├── install ├── files │ ├── 1020 │ │ ├── logo-web300x300.png │ │ ├── logo-web300x300.0x120.png │ │ ├── logo-web300x300.0x240.png │ │ └── logo-web300x300.260x0.png │ └── README.txt ├── invoices-preview.png ├── info.php ├── finish.php └── install.sql ├── modules └── README.txt ├── templates ├── invoice-options.php ├── clients.php ├── basic-page.php ├── client.php ├── errors │ ├── 500.html │ └── README.txt ├── invoice-status.php ├── home.php ├── parts │ ├── status-nav.php │ ├── logo.php │ ├── topnav.php │ ├── invoice-list.php │ └── invoice-email.php ├── _init.php ├── styles │ └── main.css ├── admin.php ├── _main.php ├── classes │ ├── Labels.php │ └── EmailTemplateHelper.php ├── admin │ ├── invoice-edit.js │ └── invoice-edit.php ├── invoice.php └── _func.php ├── assets └── index.php ├── classes ├── InvoiceDayPage.php ├── InvoiceItemTypePage.php ├── InvoicePaymentsRepeaterPage.php ├── InvoiceItemsRepeaterPage.php ├── InvoiceStatusPage.php ├── HomePage.php ├── ClientPage.php ├── InvoiceSettingsPage.php └── InvoicePage.php ├── finished.php ├── init.php ├── .gitignore ├── ready.php ├── config.php └── README.md /install/files/README.txt: -------------------------------------------------------------------------------- 1 | This file is here to ensure Git adds the dir to the repo. You may delete this file. 2 | -------------------------------------------------------------------------------- /install/invoices-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/processwire/site-invoices/HEAD/install/invoices-preview.png -------------------------------------------------------------------------------- /install/files/1020/logo-web300x300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/processwire/site-invoices/HEAD/install/files/1020/logo-web300x300.png -------------------------------------------------------------------------------- /install/files/1020/logo-web300x300.0x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/processwire/site-invoices/HEAD/install/files/1020/logo-web300x300.0x120.png -------------------------------------------------------------------------------- /install/files/1020/logo-web300x300.0x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/processwire/site-invoices/HEAD/install/files/1020/logo-web300x300.0x240.png -------------------------------------------------------------------------------- /install/files/1020/logo-web300x300.260x0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/processwire/site-invoices/HEAD/install/files/1020/logo-web300x300.260x0.png -------------------------------------------------------------------------------- /modules/README.txt: -------------------------------------------------------------------------------- 1 | This directory is for site-specific plugin modules. 2 | Please see the URL below for more information: 3 | 4 | https://processwire.com/docs/modules/about-site-modules/ 5 | -------------------------------------------------------------------------------- /templates/invoice-options.php: -------------------------------------------------------------------------------- 1 | 3 |
4 | 7 |
-------------------------------------------------------------------------------- /templates/clients.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 9 |
-------------------------------------------------------------------------------- /assets/index.php: -------------------------------------------------------------------------------- 1 | 13 | 14 |
15 | body?> 16 |
-------------------------------------------------------------------------------- /classes/InvoiceItemTypePage.php: -------------------------------------------------------------------------------- 1 | 6 |

parent->title?>

7 | 8 |
9 |

title?>

10 | render('./parts/invoice-list.php', [ 12 | 'items' => $page->getInvoices() 13 | ]); 14 | ?> 15 |
-------------------------------------------------------------------------------- /templates/errors/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 500 Internal Server Error 5 | 6 | 7 |

Internal Server Error

8 |

The server encountered an internal error or misconfiguration and was unable to complete your request.

9 |

{message}

10 | 11 | 12 | -------------------------------------------------------------------------------- /install/info.php: -------------------------------------------------------------------------------- 1 | "Invoice application site profile", 5 | 'summary' => "A full invoicing application developed in ProcessWire. Enables you to create invoices, record payments to them, email invoices to clients, print invoices, and more.", 6 | 'screenshot' => "invoices-preview.png" 7 | ); 8 | -------------------------------------------------------------------------------- /classes/InvoicePaymentsRepeaterPage.php: -------------------------------------------------------------------------------- 1 | 6 |

7 | 8 |
9 | render('./parts/invoice-list.php', [ 12 | 'items' => pages()->get('/invoices/')->children("invoice_status=$page") 13 | ]); 14 | ?> 15 |
-------------------------------------------------------------------------------- /classes/InvoiceItemsRepeaterPage.php: -------------------------------------------------------------------------------- 1 | subtitle, $this->title); 20 | } 21 | } -------------------------------------------------------------------------------- /templates/home.php: -------------------------------------------------------------------------------- 1 | 6 | 7 |
8 | isLoggedin()) { 10 | include('./parts/status-nav.php'); 11 | $headline = _('invoices'); 12 | echo files()->render('./parts/invoice-list.php', [ 13 | 'items' => pages()->get('/invoices/')->children 14 | ]); 15 | } else { 16 | $loginUrl = urls()->admin; 17 | $loginLabel = _('Login'); 18 | $headline = _('Login to continue'); 19 | echo "

$loginLabel

"; 20 | } 21 | ?> 22 |
23 | 24 |

-------------------------------------------------------------------------------- /templates/parts/status-nav.php: -------------------------------------------------------------------------------- 1 | get('/settings/invoice-statuses/')->children; 13 | 14 | ?> 15 | -------------------------------------------------------------------------------- /init.php: -------------------------------------------------------------------------------- 1 | addHookAfter('Page::render', function($event) { 16 | * $event->return = str_replace("", "

Hello World

", $event->return); 17 | * }); 18 | * 19 | */ -------------------------------------------------------------------------------- /templates/parts/logo.php: -------------------------------------------------------------------------------- 1 | for invoice profile 5 | * 6 | */ 7 | 8 | // max height for logo image in px (adjust as needed) 9 | $logoHeight = 120; 10 | $logo = settings()->image; 11 | 12 | if($logo) { 13 | $logo1x = $logo->maxHeight($logoHeight); 14 | $logo2x = $logo->maxHeight($logoHeight * 2); // for hidpi 15 | $website = settings()->website; 16 | $alt = $logo->description; 17 | $style = "max-height:{$logoHeight}px"; 18 | $img = ""; 19 | if($website) $img = "$img"; 20 | echo $img; 21 | } else { 22 | echo ""; 23 | } -------------------------------------------------------------------------------- /classes/HomePage.php: -------------------------------------------------------------------------------- 1 | '-10 DAYS', 19 | '2024-03-01 00:00:00' => '-8 DAYS', 20 | '2024-03-03 00:00:00' => '-5 DAYS', 21 | '2024-03-08 00:00:00' => '-1 DAY', 22 | ]; 23 | 24 | foreach($dates as $oldDate => $newDate) { 25 | $newDate = date('Y-m-d', strtotime($newDate)) . ' 00:00:00'; 26 | $sql = 'UPDATE field_date SET `data`=:newDate WHERE `data`=:oldDate'; 27 | $query = $database->prepare($sql); 28 | $query->bindValue(':newDate', $newDate); 29 | $query->bindValue(':oldDate', $oldDate); 30 | $query->execute(); 31 | } 32 | -------------------------------------------------------------------------------- /templates/_init.php: -------------------------------------------------------------------------------- 1 | prependTemplateFile in /site/config.php. 8 | * Use this to define shared variables, functions, classes, includes, etc. 9 | * or include other files that have them. Note that this _init.php file 10 | * is not automatically included for the admin.php template file, but 11 | * it is for all others. 12 | * 13 | * In this case we are using this file to limit access to only logged 14 | * in users, unless the current page template is 'home' or 'invoice'. 15 | * If a guest attempts to view anything other than the homepage or 16 | * a specific invoice page, then we redirect them to the homepage, 17 | * which displays a login button. 18 | * 19 | */ 20 | 21 | if(!user()->isLoggedin() && page()->id != config()->http404PageID) { 22 | if(!in_array(page()->template->name, [ 'home', 'invoice' ])) { 23 | session()->redirect(urls()->root); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /templates/styles/main.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Front-end CSS for invoices site profile 3 | * 4 | */ 5 | 6 | #container { 7 | margin-top: 70px; 8 | margin-bottom: 70px; 9 | } 10 | 11 | #logo { 12 | float: right; 13 | } 14 | 15 | #headline > span { 16 | position: relative; 17 | top: -4px; 18 | margin-left: 10px; 19 | } 20 | 21 | #invoice-meta h4, 22 | .uk-table th { 23 | font-size: .875rem; 24 | text-transform: uppercase; 25 | color: #999; 26 | letter-spacing: 1px; 27 | } 28 | 29 | #invoice-meta h4 { 30 | border-bottom: 1px solid #ddd; 31 | margin: 0 0 10px 0; 32 | padding-bottom: 10px; 33 | } 34 | 35 | #invoice-meta p { 36 | margin: 0 0 20px 0; 37 | } 38 | 39 | #content tr.separate, 40 | #content tr:first-child { 41 | border-color: #999; 42 | } 43 | 44 | td:last-child, 45 | th:last-child, 46 | #line-items td:nth-last-child(2), 47 | #line-items th:nth-last-child(2) { 48 | text-align: right; 49 | } 50 | 51 | @media print { 52 | #topnav { 53 | display: none; 54 | } 55 | } 56 | 57 | @media screen and (max-width: 767px) { 58 | #logo { 59 | float: none; 60 | } 61 | } -------------------------------------------------------------------------------- /ready.php: -------------------------------------------------------------------------------- 1 | addHookAfter('ProcessPageEdit::loadPage', function(HookEvent $event) use($wire) { 28 | $page = $event->return; 29 | if($page instanceof InvoicePage) { 30 | // note: invoice-edit.php expects $page and $wire API vars 31 | include('./admin/invoice-edit.php'); 32 | } 33 | }); 34 | 35 | require($config->paths->core . 'admin.php'); -------------------------------------------------------------------------------- /templates/parts/topnav.php: -------------------------------------------------------------------------------- 1 | parents as $parent) { 13 | // breadcrumbs 14 | if($parent->isHidden() || !$parent->viewable()) continue; 15 | $label = $parent->id === 1 ? _('invoices') : $parent->title; 16 | if($parent->viewable()) $topnav[$parent->url] = $label; 17 | } 18 | 19 | if($page instanceof InvoicePage) { 20 | // add some extra nav links when viewing an invoice 21 | if($page->client->id) $topnav[$page->client->url] = $page->client->title; 22 | $topnav[$page->url . 'email/'] = icon('mail', _('view email')); 23 | $topnav[$page->url . 'print/'] = icon('print', _('print')); 24 | } 25 | 26 | if($page->editable()) { 27 | // edit page link 28 | $topnav[$page->editUrl] = icon('file-edit', _('edit')); 29 | $topnav[newInvoiceUrl()] = icon('plus-circle', _('add new invoice')); 30 | } 31 | 32 | ?> 33 | 34 | -------------------------------------------------------------------------------- /config.php: -------------------------------------------------------------------------------- 1 | useFunctionsAPI = true; 28 | $config->usePageClasses = true; 29 | $config->useMarkupRegions = true; 30 | $config->prependTemplateFile = '_init.php'; 31 | $config->appendTemplateFile = '_main.php'; 32 | $config->templateCompile = false; 33 | $config->defaultAdminTheme = 'AdminThemeUikit'; 34 | 35 | 36 | /*** INSTALLER CONFIG ********************************************************************/ 37 | 38 | 39 | -------------------------------------------------------------------------------- /templates/parts/invoice-list.php: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | getSubtotal(); 23 | $total += $subtotal; 24 | ?> 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | count()): ?> 35 | 36 | 37 | 38 | 39 | 40 | 41 | 47 | 48 | 51 | 52 | 53 |
title?>client->title?>date?>invoice_status->title?>
42 | 43 | 44 | 45 | 46 | 49 | 50 |
-------------------------------------------------------------------------------- /classes/ClientPage.php: -------------------------------------------------------------------------------- 1 | wire()->pages->find($selector); 26 | return $items; 27 | } 28 | 29 | /** 30 | * Get number of active/published invoices for this client 31 | * 32 | * @return int 33 | * 34 | */ 35 | function getNumInvoices() { 36 | return $this->wire()->pages->count("template=invoice, client=$this"); 37 | } 38 | 39 | /** 40 | * Extend get() method to handle custom properties 41 | * 42 | * @param string $key 43 | * @return mixed 44 | * 45 | */ 46 | public function get($key) { 47 | if($key === 'num_invoices') return $this->getNumInvoices(); 48 | if($key === 'invoices') return $this->getInvoices(); 49 | return parent::get($key); 50 | } 51 | 52 | /** 53 | * Get the label markup to display in the admin page-list 54 | * 55 | * @return string 56 | * 57 | */ 58 | public function getPageListLabel() { 59 | $n = $this->getNumInvoices(); 60 | $info = "· $n " . ($n === 1 ? _('invoice') : _('invoices')); 61 | return sanitizer()->entities1($this->title) . ' ' . ukText('meta', $info); 62 | } 63 | } -------------------------------------------------------------------------------- /classes/InvoiceSettingsPage.php: -------------------------------------------------------------------------------- 1 | 'USD', 'symbol' => '$', 'decimal' => '.', 'thousands' => ',']; 33 | $currency = json_decode($this->getUnformatted('currency'), true); 34 | if(!is_array($currency)) $currency = []; 35 | $currency = array_merge($defaults, $currency); 36 | if($property === false) return $currency; 37 | if($this->of()) { 38 | foreach($currency as $key => $value) { 39 | $currency[$key] = sanitizer()->entities1($value); 40 | } 41 | } 42 | } 43 | if($property) { 44 | return isset($currency[$property]) ? $currency[$property] : ''; 45 | } 46 | return $currency; 47 | } 48 | 49 | } -------------------------------------------------------------------------------- /templates/_main.php: -------------------------------------------------------------------------------- 1 | appendTemplateFile in /site/config.php, and 8 | * is typically used to define and output markup common among most pages. 9 | * 10 | * When the Markup Regions feature is used, template files can prepend, append, 11 | * replace or delete any element defined here that has an "id" attribute. 12 | * https://processwire.com/docs/front-end/output/markup-regions/ 13 | * 14 | */ 15 | 16 | // Using uikit version bundled with ProcessWire (feel free to change) 17 | $ukUrl = urls()->get('AdminThemeUikit') . 'uikit/dist/'; 18 | 19 | ?> 20 | 21 | 22 | 23 | 24 | <?php echo page()->title; ?> 25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 |
33 | 34 | 35 |

title?>

36 |
37 |
38 | 39 |
40 |
41 | 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ProcessWire Invoice Application Site Profile 2 | 3 | A full invoicing application developed in ProcessWire. Enables you to create invoices, 4 | record payments to them, email invoices to clients, print invoices, and more. 5 | 6 | This site profile is primarily used from ProcessWire’s admin, but it does 7 | also come with front-end templates to list, view and print invoices. 8 | 9 | ![Invoice site profile preview](install/invoices-preview.png) 10 | 11 | ## Installation 12 | 13 | This site profile is installed in the same manner as any other site profile. 14 | Below is a summary: 15 | 16 | 1. [Download](https://processwire.com/download/core/) a fresh copy of 17 | the ProcessWire core (3.0.227 or newer is required) and extract the core 18 | files into a new web accessible directory, i.e. `/invoices/`. 19 | 20 | 2. Download and copy the entire contents of *this* site profile into a 21 | `site-invoices` directory under your core installation directory, for 22 | example `/invoices/site-invoices/`. 23 | 24 | 3. Open the installation directory in your web browser, for example 25 | . This will start the installer. 26 | 27 | 4. When the installer asks you what site profile you want to install, select 28 | the “Invoice Application Site Profile”. Proceed with installation. After 29 | installation, login to the admin as instructed by the installer. 30 | 31 | 5. In the admin, the first thing you should do is go and edit the "Settings" 32 | page. This is where you can set your company name, logo, address, email 33 | and more. 34 | 35 | ## Getting started 36 | 37 | Once installed, you'll notice this site profile comes with a few example 38 | invoices and clients already installed. These are here to give you a quick 39 | demonstration of how the invoices work. Feel free to make some test edits to 40 | the examples. 41 | 42 | If you intend to use the invoice application to create your own invoices, 43 | you'll want to delete the example invoices and clients when you no longer 44 | need then. 45 | 46 | Use of the Invoices site requires that you are logged in. Though actual 47 | invoices can be viewed directly by URL whether logged in or not. This enables 48 | you to send the URL to a client if you want to. It also enables the 49 | email-invoice function to work. If you want to change the logic behind the 50 | access control, you can do so from the /site/templates/_init.php file. 51 | 52 | Additional information is coming soon via a related blog post. This will 53 | include a detailed explanation of the included files, how you might use 54 | invoices, how you might send them to clients, how to customize and expand 55 | the invoices profile, and more. -------------------------------------------------------------------------------- /templates/classes/Labels.php: -------------------------------------------------------------------------------- 1 | _('Add new invoice'); 19 | case 'all': return $this->_('All'); 20 | case 'amount': return $this->_('Amount'); 21 | case 'amount due': return $this->_('Amount due'); 22 | case 'billed to': return $this->_('Billed to'); 23 | case 'client': return $this->_('Client'); 24 | case 'date': return $this->_('Date'); 25 | case 'description': return $this->_('Description'); 26 | case 'due date': return $this->_('Due date'); 27 | case 'edit': return $this->_('Edit'); 28 | case 'error sending email': return $this->_('Error sending email'); 29 | case 'langcode': return $this->_('en'); // language code for html tag 30 | case 'from': return $this->_('From'); 31 | case 'invoice': return $this->_('Invoice'); 32 | case 'invoice created': return $this->_('Invoice created'); 33 | case 'invoice id': return $this->_('Invoice ID'); 34 | case 'invoice status changed': return $this->_('Invoice status changed'); 35 | case 'invoice status set': return $this->_('Invoice status set'); 36 | case 'invoices': return $this->_('Invoices'); 37 | case 'issue date': return $this->_('Issue date'); 38 | case 'login': return $this->_('Login'); 39 | case 'login to continue': return $this->_('Login to continue'); 40 | case 'new': return $this->_('New'); 41 | case 'no invoices to list': return $this->_('No invoices to list'); 42 | case 'summary': return $this->_('Summary'); 43 | case 'paid': return $this->_('Paid'); 44 | case 'payments': return $this->_('Payments'); 45 | case 'print': return $this->_('Print'); 46 | case 'qty': return $this->_('Qty'); // Quantity abbreviation 47 | case 'rate': return $this->_('Rate'); 48 | case 'received': return $this->_('Received'); 49 | case 'sent email': return $this->_('Sent email'); 50 | case 'status': return $this->_('Status'); 51 | case 'subtotal': return $this->_('Subtotal'); 52 | case 'invoice past due': return $this->_('Invoice past due'); 53 | case 'invoice paid': return $this->_('Invoice paid'); 54 | case 'total': return $this->_('Total'); 55 | case 'total due': return $this->_('Total due'); 56 | case 'unit': return $this->_('Unit'); 57 | case 'upon receipt': return $this->_('Upon receipt'); 58 | case 'view email': return $this->_('View email version'); 59 | } 60 | } 61 | } -------------------------------------------------------------------------------- /templates/admin/invoice-edit.js: -------------------------------------------------------------------------------- 1 | /** 2 | * JS for ProcessPageEdit when editing an 'invoice' page 3 | * 4 | */ 5 | 6 | function InvoiceEdit(options) { 7 | 8 | var settings = { 9 | currencySymbol: '$', 10 | currencyCode: 'USD', 11 | thousandsSeparator: ',' 12 | }; 13 | 14 | $.extend(settings, options); 15 | 16 | function calculateLineItem(lineItem) { 17 | 18 | var lineQty, lineRate, valueTotal, label, labelText; 19 | var repeaterItem = lineItem.closest('.InputfieldRepeaterItem'); 20 | 21 | lineItem.find('input[type=number]').each(function() { 22 | var input = $(this); 23 | var name = input.attr('name'); 24 | if(name.indexOf('qty') === 0) { 25 | lineQty = input; 26 | } else if(name.indexOf('rate') === 0) { 27 | lineRate = input; 28 | } 29 | }); 30 | if(lineQty.val() && lineRate.val()) { 31 | valueTotal = parseFloat(lineQty.val()) * parseFloat(lineRate.val()); 32 | } else { 33 | valueTotal = 0.0; 34 | } 35 | label = repeaterItem.find('.InputfieldRepeaterItemLabel'); 36 | labelText = label.text(); 37 | labelText = labelText.substring(0, labelText.indexOf(':') + 1) + ' ' + formatPrice(valueTotal); 38 | label.html(labelText); 39 | 40 | return valueTotal; 41 | } 42 | 43 | function calculateTotals() { 44 | 45 | var total; 46 | var subtotal = 0.0; 47 | var payments = calculatePayments(); 48 | 49 | $('#wrap_Inputfield_invoice_items').find('.InputfieldRepeaterItem').each(function() { 50 | var item = $(this); 51 | if(item.hasClass('InputfieldRepeaterNewItem')) return; 52 | if(item.hasClass('InputfieldRepeaterDeletePending')) return; 53 | subtotal += calculateLineItem(item); 54 | }); 55 | 56 | total = subtotal - payments; 57 | $('#invoice-subtotal').text(formatPrice(subtotal)); 58 | $('#invoice-payments').text(formatPrice(payments)); 59 | $('#invoice-total').text(formatPrice(total)); 60 | // $('#Inputfield_total').val(total); 61 | } 62 | 63 | function calculatePayments() { 64 | var payments = 0.0; 65 | 66 | $('#wrap_Inputfield_invoice_payments').find('.InputfieldRepeaterItem').each(function() { 67 | $(this).find('input[type=number]').each(function() { 68 | if($(this).attr('name').indexOf('total') === 0) { 69 | if($(this).val()) payments += parseFloat($(this).val()); 70 | } 71 | }); 72 | }); 73 | 74 | return payments; 75 | } 76 | 77 | function formatPrice(n) { 78 | var s = n.toFixed(2); 79 | if(n > 999 || n < -999) s = s.replace(/\B(?=(\d{3})+(?!\d))/g, settings.thousandsSeparator); 80 | return settings.currencySymbol + s + ' ' + settings.currencyCode; 81 | } 82 | 83 | function itemTypeSelectChange(input) { 84 | var id = input.attr('id'); 85 | var option = input.children('option[selected]'); 86 | var qty = parseFloat(option.attr('data-qty')).toFixed(2); 87 | var rate = parseFloat(option.attr('data-rate')).toFixed(2); 88 | var descInput = $('#' + id.replace('invoice_item_type', 'title')); 89 | if(descInput.val().length) return; 90 | var qtyInput = $('#' + id.replace('invoice_item_type', 'qty')); 91 | var rateInput = $('#' + id.replace('invoice_item_type', 'rate')); 92 | qtyInput.val(qty); 93 | rateInput.val(rate); 94 | } 95 | 96 | function init() { 97 | 98 | $(document).on('input', '.Inputfield_invoice_items input[type=number]', function() { 99 | var lineItem = $(this).closest('.InputfieldRepeaterItem'); 100 | if(lineItem.length && lineItem.closest('.Inputfield_invoice_items').length) { 101 | calculateLineItem(lineItem); 102 | } 103 | }); 104 | 105 | $(document).on('change', '.InputfieldRepeater :input', function() { 106 | var input = $(this); 107 | if(input.attr('type') === 'number') { 108 | calculateTotals(); 109 | } else if(input.attr('name').indexOf('invoice_item_type') === 0) { 110 | itemTypeSelectChange(input); 111 | calculateTotals(); 112 | } 113 | }); 114 | 115 | $(document).on('repeateradd repeaterinsert repeaterdelete repeaterundelete cloned', function() { 116 | calculateTotals(); 117 | }); 118 | 119 | calculateTotals(); 120 | } 121 | 122 | init(); 123 | } -------------------------------------------------------------------------------- /templates/classes/EmailTemplateHelper.php: -------------------------------------------------------------------------------- 1 | start([ 12 | * 'p' => 'margin: 1em 0; font-size: 16px; line-height: 26px;', 13 | * 'h2' => 'font-size: 30px; color: #999;', 14 | * 'h2.underline' => 'text-decoration: underline;', // also inherits 'h2' 15 | * ]); 16 | * 17 | * ...HTML direct output... 18 | * 19 | * 20 | *

Hello

21 | *

World

22 | *

Hello World

23 | * 24 | * 25 | * ...end HTML output... 26 | * 27 | * $t->finish(); // sends output directly 28 | * ~~~~~ 29 | * 30 | * Delayed output usage: 31 | * ~~~~~ 32 | * $styles = [ 33 | * 'p' => 'margin: 1em 0; font-size: 16px; line-height: 26px;', 34 | * 'h2' => 'font-size: 30px; color: #999;', 35 | * 'h2.underline' => 'text-decoration: underline;', // also inherits 'h2' 36 | * ]; 37 | * $html = ' 38 | * 39 | * 40 | *

Hello

41 | *

World

42 | *

Hello World

43 | * 44 | * 45 | * '; 46 | * $t = new EmailTemplate(); 47 | * echo $t->process($html, $styles); 48 | * ~~~~~ 49 | * NOTE: when using elements with class attributes, the class attribute must be first. 50 | * For example, use `` and NOT `` 51 | * 52 | * Copyright 2022 / Developed by Ryan Cramer 53 | * 54 | */ 55 | class EmailTemplateHelper { 56 | 57 | protected $styles = []; 58 | protected $recording = false; 59 | 60 | /** 61 | * Start recording html output 62 | * 63 | * @param array $styles Optionally specify styles array 64 | * 65 | */ 66 | public function start(array $styles = []) { 67 | if(!empty($styles)) $this->styles($styles); 68 | ob_start(); 69 | $this->recording = true; 70 | } 71 | 72 | /** 73 | * Set styles array 74 | * 75 | * @param array $styles 76 | * 77 | */ 78 | public function styles(array $styles) { 79 | // merge styles so that "table.meta" also inherits "table" styles (for example) 80 | foreach($styles as $name => $style) { 81 | if(strpos($name, '.') === false) continue; 82 | list($element,) = explode('.', $name, 2); 83 | if(isset($styles[$element])) $styles[$name] = $styles[$element] . $style; 84 | } 85 | $this->styles = $styles; 86 | } 87 | 88 | /** 89 | * Process HTML for styles and return it 90 | * 91 | * @param string $html 92 | * @param array $styles Optional if previously set 93 | * @return string 94 | * 95 | */ 96 | public function process($html, $styles = array()) { 97 | 98 | if(!empty($styles)) $this->styles($styles); 99 | 100 | $a = []; 101 | 102 | foreach($this->styles as $name => $style) { 103 | $style = trim(str_replace(["\n", "\t", ": "], ['', '', ':'], $style)); 104 | if(strpos($name, '.')) { 105 | // element with class attribute 106 | list($name, $class) = explode('.', $name, 2); 107 | $replace = "<$name style=\"$style\""; 108 | $a["<$name class=\"$class\""] = $replace; 109 | $a["<$name class='$class'"] = $replace; 110 | } else { 111 | // element with no attributes 112 | $a["<$name>"] = "<$name style=\"$style\">"; 113 | } 114 | } 115 | 116 | $html = str_replace(array_keys($a), array_values($a), $html); 117 | 118 | return trim($html); 119 | } 120 | 121 | /** 122 | * Finish recording output, process and output it 123 | * 124 | * @param bool $send Send to direct output (specify false to return string instead) 125 | * @return string 126 | * 127 | */ 128 | public function finish($send = true) { 129 | 130 | // update elements in rendered markup to use inline styles (safer for email) 131 | $html = ob_get_contents(); 132 | $html = $this->process($html); 133 | 134 | ob_end_clean(); 135 | 136 | if($send) { 137 | echo $html; 138 | return ''; 139 | } 140 | 141 | return $html; 142 | } 143 | } -------------------------------------------------------------------------------- /templates/invoice.php: -------------------------------------------------------------------------------- 1 | client; 9 | $paymentsTotal = $page->getPaymentsTotal(); 10 | 11 | if(input()->urlSegmentStr === 'email') { 12 | // render invoice email instead 13 | include('./parts/invoice-email.php'); 14 | return $this->halt(); 15 | } 16 | 17 | ?> 18 | 19 |

20 | 21 | invoice_status->subtitle, $page->invoice_status->title)?> 22 |

23 | 24 |
25 | 26 |
27 |
28 |

29 |

title?>

30 |
31 |
32 |

33 |

getTotalDue())?>

34 |
35 |
36 |

37 |

date?>

38 |
39 |
40 |

41 |

getDueDate(true)?>

42 |
43 |
44 |

45 |

46 | subtitle?>
47 | address)?> 48 | website) echo "
$settings->website";?> 49 |

50 |
51 |
52 |

53 |

54 | title?>
55 | address)?> 56 | website) echo "
$client->website";?> 57 |

58 |
59 |
60 | 61 |

62 | 63 | summary) echo "

$page->summary

"; ?> 64 | 65 |
66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | invoice_items as $item): ?> 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 |
qty, 2)?>invoice_item_type->title?>title?>rate)?>rate * $item->qty)?>
getSubtotal())?>
getTotalDue())?>
100 |
101 | 102 | 103 |

104 |
105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | invoice_payments as $payment): ?> 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 125 | 126 | 127 |
date?>title?>total)?>
123 | 124 |
128 |
129 | 130 |
131 | 132 | urlSegmentStr === 'print'): ?> 133 | 136 | -------------------------------------------------------------------------------- /templates/_func.php: -------------------------------------------------------------------------------- 1 | get('/settings/'); 19 | return $settings; 20 | } 21 | 22 | /** 23 | * Commonly used translation labels 24 | * 25 | * We keep all the translatable text labels in the 26 | * /site/templates/classes/Labels.php file so that they can 27 | * all be translated (if needed) in one file. 28 | * 29 | * @param string $key 30 | * @return string 31 | * 32 | */ 33 | function _($key) { 34 | static $labels = null; 35 | if($labels === null) $labels = new Labels(); 36 | return $labels->label($key); 37 | } 38 | 39 | /** 40 | * Format an invoice price 41 | * 42 | * @param int|float $price 43 | * @param bool $formatted 44 | * @return string 45 | * 46 | */ 47 | function price($price, $formatted = true) { 48 | static $currency = null; 49 | if($currency === null) $currency = settings()->getCurrencyInfo(); 50 | $price = number_format($price, 2, $currency['decimal'], $currency['thousands']); 51 | $code = $formatted ? "$currency[code]" : $currency['code']; 52 | return "$currency[symbol]$price $code"; 53 | } 54 | 55 | /** 56 | * Render an icon 57 | * 58 | * @param string $name 59 | * @param string $title Optional title/tooltip for icon 60 | * @return string 61 | * 62 | */ 63 | function icon($name, $title = '') { 64 | $attr = "uk-icon='icon: $name'"; 65 | if($title) { 66 | $title = sanitizer()->entities1($title); 67 | $attr .= " title='$title' uk-tooltip='$title'"; 68 | } 69 | return ""; 70 | } 71 | 72 | /** 73 | * Render Uikit label (uk-label-*) 74 | * 75 | * @param string $type One of: default, success, warning, danger 76 | * @param string $text 77 | * @return string 78 | * 79 | */ 80 | function ukLabel($type, $text, $encode = true) { 81 | if($encode) $text = sanitizer()->entities1($text); 82 | if(in_array($type, [ 'default', 'success', 'warning', 'danger' ])) { 83 | return "$text"; 84 | } else { 85 | return "$text"; 86 | } 87 | } 88 | 89 | /** 90 | * Render Uikit text (uk-text-*) 91 | * 92 | * 93 | * 94 | * @param string $type One or more (space separated) of: lead, meta, 95 | * small, default, large, light, normal, bold, lighter, bolder, 96 | * capitalize, uppercase, lowercase, decoration-none, muted, 97 | * emphasis, primary, secondary, success, warning, danger, 98 | * background, left, right, center, justify, top, middle, bottom, 99 | * baseline, truncate, break, nowrap. 100 | * @param string $text 101 | * @param bool $encode Entity encode? (default=true) 102 | * @return string 103 | * 104 | */ 105 | function ukText($type, $text, $encode = true) { 106 | if($encode) $text = sanitizer()->entities1($text); 107 | $type = 'uk-text-' . str_replace(' ', ' uk-text-', $type); 108 | return "$text"; 109 | } 110 | 111 | /** 112 | * Render and send given invoice page to given email address 113 | * 114 | * @param InvoicePage $page 115 | * @param string $emailTo Email address to send to 116 | * @return bool True on success 117 | * 118 | */ 119 | function sendInvoiceEmail(InvoicePage $page, $emailTo) { 120 | 121 | $settings = settings(); 122 | $emailFrom = $settings->email; 123 | $http = new WireHttp(); 124 | $url = $page->httpUrl() . 'email'; 125 | $bodyHTML = $http->get($url); 126 | $result = 0; 127 | 128 | if($bodyHTML && $http->getHttpCode() == 200) { 129 | $title = $page->getUnformatted('title'); 130 | $company = $settings->getUnformatted('subtitle'); 131 | $result = wireMail() 132 | ->to($emailTo) 133 | ->from($emailFrom)->fromName($company) 134 | ->subject(_('invoice') . " - $title") 135 | ->bodyHTML($bodyHTML) 136 | ->send(); 137 | } 138 | 139 | if($result) { 140 | $msg = _('sent email') . " - $emailTo"; 141 | $page->message($msg, Notice::noGroup); 142 | } else { 143 | $msg = _('error sending email') . " - $url - " . $http->getHttpCode(true); 144 | $page->error($msg); 145 | } 146 | 147 | $page->addLog($msg, true); 148 | 149 | return (bool) $result; 150 | } 151 | 152 | /** 153 | * Get URL to add a new invoice 154 | * 155 | * @return string 156 | * 157 | */ 158 | function newInvoiceUrl() { 159 | return config()->urls->admin . 'page/add/?parent_id=1016'; 160 | } -------------------------------------------------------------------------------- /templates/admin/invoice-edit.php: -------------------------------------------------------------------------------- 1 | isPastDue()) { 16 | $page->warning(_('invoice past due'), 'nogroup'); 17 | } else if($page->isPaid()) { 18 | $page->message(_('invoice paid'), 'nogroup'); 19 | } 20 | 21 | // set defaults for 'qty' and 'rate' inputs in invoice line items 22 | $wire->addHookBefore('InputfieldFloat::render', function(HookEvent $event) { 23 | $f = $event->object; /** @var InputfieldFloat $f */ 24 | if($f->val()) return; 25 | if(strpos($f->name, 'rate') === 0) { 26 | $f->val(settings()->get('rate')); 27 | } else if(strpos($f->name, 'qty') === 0) { 28 | $f->val(1.0); 29 | } 30 | }); 31 | 32 | // for output of the invoice log 33 | $wire->addHookBefore('InputfieldTextarea(name=invoice_log)::renderValue', function(HookEvent $event) { 34 | /** @var InputfieldTextarea $f */ 35 | $f = $event->object; 36 | $event->return = "
" . htmlspecialchars($f->val()) . "
"; 37 | $event->replace = true; 38 | }); 39 | 40 | // add totals under the line items 41 | $wire->addHookAfter('InputfieldRepeater(name=invoice_items)::render', function(HookEvent $event) { 42 | $currency = settings()->getCurrencyInfo(false); 43 | $jsSettings = json_encode([ 44 | 'thousandsSeparator' => $currency['thousands'], 45 | 'currencySymbol' => $currency['symbol'], 46 | 'currencyCode' => $currency['code'] 47 | ]); 48 | $jsUrl = urls()->templates . 'admin/invoice-edit.js'; 49 | $event->return .= " 50 |
51 |
" . _('subtotal') . "
52 |
53 |
54 |
55 |
" . _('received') . "
56 |
57 |
58 |
59 |
" . _('total due') . "
60 |
61 |
62 | 63 | 64 | "; 65 | }); 66 | 67 | // set data-rate and data-qty attributes on invoice item type select options for use in JS 68 | // note we use 'name^=invoice_item_type' so that we can match in repeaters, which have a suffix 69 | $wire->addHookBefore('InputfieldSelect(name^=invoice_item_type)::render', function(HookEvent $event) { 70 | $f = $event->object; /** @var InputfieldSelect $f */ 71 | foreach(pages()->find('template=invoice-item-type') as $p) { 72 | /** @var InvoiceItemTypePage $p*/ 73 | $f->setOptionAttributes($p->id, [ 74 | 'data-rate' => $p->rate, 75 | 'data-qty' => $p->qty 76 | ]); 77 | } 78 | }); 79 | 80 | /** 81 | * Called right before an InvoicePage is saved 82 | * 83 | * Adjusts invoice_status and applies invoice_action when appropriate, 84 | * and updates the invoice log. 85 | * 86 | */ 87 | $wire->addHook('Pages::saveReady()', function(HookEvent $event) { 88 | $page = $event->arguments(0); /** @var InvoicePage $page */ 89 | $status = $page->getInvoiceStatus(); 90 | $statusPrev = $page->invoice_status; 91 | $emailTo = ''; 92 | 93 | if($statusPrev->id != $status->id) { 94 | if($status->id) { 95 | $page->invoice_status = $status; 96 | if($statusPrev->id) { 97 | $page->addLog( 98 | _('invoice status changed') . ' - ' . 99 | "$statusPrev->title => $status->title" 100 | ); 101 | } else { 102 | $page->addLog(_('invoice status set') . " - $status->title" ); 103 | } 104 | } 105 | } 106 | 107 | if(count($page->invoice_action)) { 108 | foreach($page->invoice_action as $action) { 109 | if($action->value === 'client') { 110 | $emailTo = $page->client->email; // email client 111 | } else if($action->value === 'email') { 112 | $emailTo = $page->email; // email another address 113 | } 114 | } 115 | $page->invoice_action->removeAll(); // reset to no value 116 | $page->untrackChange('invoice_action'); 117 | } 118 | 119 | if(!$page->invoice_log) { 120 | $page->addLog(_('invoice created')); 121 | } 122 | 123 | // set custom variable to indicate email should be sent after save 124 | $page->setQuietly('_emailTo', $emailTo); 125 | }); 126 | 127 | /** 128 | * Called immediately after an InvoicePage is saved 129 | * 130 | * Sends an invoice email when instructed to by the saveReady hook. 131 | * We send after page saved (rather than before) just to reduce the 132 | * chance that some error from the email interferes with the save. 133 | * 134 | */ 135 | $wire->addHook('Pages::saved()', function(HookEvent $event) { 136 | $page = $event->arguments(0); /** @var InvoicePage $page */ 137 | $emailTo = $page->get('_emailTo'); 138 | if($emailTo) sendInvoiceEmail($page, $emailTo); 139 | $page->setQuietly('_emailTo', ''); 140 | }); -------------------------------------------------------------------------------- /templates/parts/invoice-email.php: -------------------------------------------------------------------------------- 1 | image; 22 | if($logo) $logo = $logo->maxHeight($logoHeight * 2); 23 | 24 | require_once('./classes/EmailTemplateHelper.php'); 25 | 26 | // helper to convert class attributes to inline styles for email 27 | // since many email clients only work with inline styles 28 | $emailTemplate = new EmailTemplateHelper(); 29 | $emailTemplate->styles([ 30 | // element or element.class 31 | 'body' => " 32 | background: #eee; 33 | font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif; 34 | line-height: 22px; 35 | ", 36 | 'div.container' => " 37 | max-width: 1200px; 38 | margin: 0 auto; 39 | background: #fff; 40 | padding:20px; 41 | ", 42 | 'h1' => " 43 | font-size: 50px; 44 | font-weight: normal; 45 | ", 46 | 'h2' => " 47 | font-size: 32px; 48 | font-weight: normal; 49 | ", 50 | 'table' => " 51 | width: 100%; 52 | border-collapse: collapse; 53 | border-spacing: 0; 54 | margin-bottom: 30px; 55 | ", 56 | 'tr' => " 57 | border-top: 1px solid #ddd; 58 | ", 59 | 'tr.separator' => " 60 | border-top: 1px solid #777; 61 | ", 62 | 'tr.head' => " 63 | border: none; 64 | ", 65 | 'th' => " 66 | text-align: left; 67 | text-transform: uppercase; 68 | font-weight: normal; 69 | font-size: 0.875rem; 70 | color: #999; 71 | letter-spacing: 1px; 72 | padding: 10px; 73 | ", 74 | 'th.right' => " 75 | text-align: right; 76 | ", 77 | 'td' => " 78 | padding: 10px; 79 | vertical-align: top; 80 | ", 81 | 'td.right' => " 82 | text-align: right; 83 | ", 84 | 'table.meta' => " 85 | border-spacing: 15px; 86 | border-collapse: separate; 87 | padding: 0; 88 | ", 89 | 'td.meta' => " 90 | padding: 0 0 12px 0; 91 | ", 92 | 'th.meta' =>" 93 | padding: 0 0 12px 0; 94 | border-bottom: 1px solid #ddd; 95 | ", 96 | 'td.headline' => " 97 | vertical-align: middle; 98 | width: 50%; 99 | ", 100 | 'td.logo' => " 101 | text-align: right; 102 | width: 50%; 103 | ", 104 | 'img.logo' => " 105 | max-height:{$logoHeight}px; 106 | ", 107 | 'a.link' => " 108 | color: #999; 109 | ", 110 | ]); 111 | 112 | $emailTemplate->start(); // start recording HTML output 113 | 114 | ?> 115 | 116 | 117 | 118 | 119 | <?=$page->title?> 120 | 121 | 122 |
123 | 124 | 125 | 128 | 135 | 136 |
126 |

127 |
137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 |
title?>getTotalDue())?>date?>getDueDate(true)?>
152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 164 | 169 | 170 |
160 | subtitle?>
161 | address)?> 162 | website) echo "
$settings->website";?> 163 |
165 | title?>
166 | address)?> 167 | website) echo "
$client->website";?> 168 |
171 | 172 |
173 |

174 | 175 | summary) echo "

$page->summary


"; ?> 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | invoice_items as $item): ?> 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 210 | 211 | 212 |
qty, 2)?>invoice_item_type->title?>title?>rate)?>rate * $item->qty)?>
getSubtotal())?>
208 | getTotalDue())?> 209 |
213 | 214 | 215 |

216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | invoice_payments as $payment): ?> 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 236 | 237 | 238 |
date?>title?>total)?>
234 | 235 |
239 | 240 |
241 |
242 | 243 | 244 | 245 | finish(); -------------------------------------------------------------------------------- /classes/InvoicePage.php: -------------------------------------------------------------------------------- 1 | invoice_items as $item) { 31 | $subtotal += (((float) $item->qty) * ((float) $item->rate)); 32 | } 33 | return $subtotal; 34 | } 35 | 36 | /** 37 | * Get total amount due (invoice total minus payments received) 38 | * 39 | * @return float 40 | * 41 | */ 42 | public function getTotalDue() { 43 | $total = $this->getSubtotal() - $this->getPaymentsTotal(); 44 | return $total; 45 | } 46 | 47 | /** 48 | * Get total amount of all received payments 49 | * 50 | * @return float 51 | * 52 | */ 53 | public function getPaymentsTotal() { 54 | $total = 0.0; 55 | foreach($this->invoice_payments as $item) { 56 | $total += (float) $item->total; 57 | } 58 | return $total; 59 | } 60 | 61 | /** 62 | * Is invoice paid in full? 63 | * 64 | * @return bool 65 | * 66 | */ 67 | public function isPaid() { 68 | return $this->getTotalDue() <= 0; 69 | } 70 | 71 | /** 72 | * Is invoice past due? 73 | * 74 | * @return bool 75 | * 76 | */ 77 | public function isPastDue() { 78 | $dayPage = $this->invoice_days; 79 | if(!$dayPage->id) return false; 80 | if(!$dayPage->qty) return false; 81 | $dueDate = $this->getDueDate(); 82 | if(!$dueDate) return false; 83 | return time() > $dueDate && !$this->isPaid(); 84 | } 85 | 86 | /** 87 | * Get due date (timestamp) 88 | * 89 | * @param bool $formatted Get as formatted date string? (default=false) 90 | * @return int|false|string Returns unix timestamp, formatted date string, or false on error 91 | * 92 | */ 93 | public function getDueDate($formatted = false) { 94 | $invoiceDate = (int) $this->getUnformatted('date'); 95 | $dayPage = $this->invoice_days; 96 | if(!$dayPage->id) return false; 97 | $days = $dayPage->qty; 98 | if(!$days) return $formatted ? _('upon receipt') : time(); 99 | $dueDate = $invoiceDate + ($days * 86400); 100 | if($formatted) { 101 | $format = $this->wire()->fields->get('date')->get('dateOutputFormat'); 102 | $dueDate = $this->wire()->datetime->formatDate($dueDate, $format); 103 | } 104 | return $dueDate; 105 | } 106 | 107 | /** 108 | * Get number of days remaining till payment is due 109 | * 110 | * Returns negative days if payment is past due 111 | * 112 | * @return int|false Returns days remaining or false on error 113 | * 114 | */ 115 | public function getDaysRemaining() { 116 | if($this->isPaid()) return 0; 117 | $time = time(); 118 | $dueDate = $this->getDueDate(); 119 | if(!$dueDate) return false; 120 | if($time > $dueDate) { 121 | // past due, return negative days 122 | $days = -1 * ($time - $dueDate) / 86400; 123 | } else { 124 | $days = ($dueDate - $time) / 86400; 125 | } 126 | return ceil($days); 127 | } 128 | 129 | /** 130 | * Get days invoice was paid in or false if not yet paid 131 | * 132 | * @return int|false 133 | * 134 | */ 135 | public function getPaidInDays() { 136 | if(!$this->isPaid()) return false; 137 | $lastDate = 0; 138 | foreach($this->invoice_payments as $item) { 139 | $date = $item->getUnformatted('date'); 140 | if($date > $lastDate) $lastDate = $date; 141 | } 142 | $invoiceDate = $this->getUnformatted('date'); 143 | if($lastDate < $invoiceDate) return 0; 144 | $days = ($lastDate - $invoiceDate) / 86400; 145 | return round($days); 146 | } 147 | 148 | /** 149 | * Add an invoice line item (must be followed with a $page->save) 150 | * 151 | * @param string $type One of 'hours', 'service' or 'product' 152 | * @param string $description Description of item 153 | * @param float $qty Quantity 154 | * @param float $rate Price/rate 155 | * @return InvoiceItemsRepeaterPage 156 | * 157 | */ 158 | public function addLineItem($type, $description, $qty, $rate) { 159 | $items = $this->invoice_items; 160 | $item = $items->getNewItem(); 161 | $item->item_type = $type; 162 | $item->title = $description; 163 | $item->qty = (float) $qty; 164 | $item->rate = (float) $rate; 165 | $this->trackChange('invoice_items'); 166 | return $item; 167 | } 168 | 169 | /** 170 | * Add a payment to the invoice (must be followed with a $page->save) 171 | * 172 | * @param int|string $date 173 | * @param float $amount 174 | * @param string $description 175 | * @return InvoicePaymentsRepeaterPage 176 | * 177 | */ 178 | public function addPayment($date, $amount, $description) { 179 | $items = $this->invoice_payments; 180 | $item = $items->getNewItem(); 181 | $item->date = $date; 182 | $item->total = (float) $amount; 183 | $item->title = $description; 184 | $this->trackChange('invoice_payments'); 185 | return $item; 186 | } 187 | 188 | /** 189 | * Add a log entry 190 | * 191 | * @param string $line 192 | * 193 | */ 194 | public function addLog($line, $saveNow = false) { 195 | $line = str_replace("\n", " ", $line); 196 | $line = date('Y-m-d H:i:s') . " $line"; 197 | $log = trim($this->getUnformatted('invoice_log') . "\n$line"); 198 | $this->invoice_log = $log; 199 | $this->trackChange('invoice_log'); 200 | if($saveNow && $this->id) $this->setAndSave('invoice_log', $log); 201 | } 202 | 203 | /** 204 | * Get invoice status page 205 | * 206 | * @return NullPage|Page 207 | * 208 | */ 209 | public function getInvoiceStatus() { 210 | $total = $this->getTotalDue(); 211 | $this->total = $total; 212 | 213 | if($this->isUnpublished()) { 214 | $statusName = 'draft'; 215 | } else if($total > 0) { 216 | if($this->isPastDue()) { 217 | $statusName = 'past-due'; 218 | } else { 219 | $statusName = 'pending'; 220 | } 221 | } else { 222 | $statusName = 'paid'; 223 | } 224 | 225 | $status = $this->wire()->pages->get("/settings/invoice-statuses/$statusName"); 226 | 227 | return $status->id ? $status : $this->invoice_status; 228 | } 229 | 230 | /** 231 | * Get the label markup to display in the admin page-list 232 | * 233 | * @return string 234 | * 235 | */ 236 | public function getPageListLabel() { 237 | $status = $this->getInvoiceStatus(); 238 | if(!$status->id) return ''; // makes it use default label 239 | static $icons = [ 240 | 'paid' => 'star', 241 | 'past-due' => 'ban', 242 | 'pending' => 'star-o', 243 | 'partial' => 'star-half-o', 244 | 'draft' => 'star-o' 245 | ]; 246 | if($status->name === 'pending' && $this->invoice_payments->count()) { 247 | $icon = $icons['partial']; 248 | } else { 249 | $icon = isset($icons[$status->name]) ? $icons[$status->name] : $icons['pending']; 250 | } 251 | $this->template->setIcon($icon); 252 | $labelType = sanitizer()->pageName($status->get('subtitle')); 253 | $title = sanitizer()->entities1($this->title); 254 | $client = $this->client; 255 | $client = $client->id ? sanitizer()->entities1($client->title) : ''; 256 | $subtotal = $this->getSubtotal(); 257 | $subtotal = $subtotal > 0 ? '(' . price($subtotal, false) . ')' : ''; 258 | if(wireInstanceOf($this->wire()->adminTheme, 'AdminThemeUikit')) { 259 | return 260 | ukLabel($labelType, $status->title) . " $title " . 261 | ukText('meta', "· $client $subtotal", false); 262 | } else { 263 | return "$title · $client $subtotal - $status->title"; 264 | } 265 | } 266 | } -------------------------------------------------------------------------------- /install/install.sql: -------------------------------------------------------------------------------- 1 | # --- WireDatabaseBackup {"time":"2024-03-08 12:19:25","user":"","dbName":"pw_invoices","description":"","tables":[],"excludeTables":["pages_drafts","pages_roles","permissions","roles","roles_permissions","users","users_roles","user","role","permission"],"excludeCreateTables":[],"excludeExportTables":["field_roles","field_permissions","field_email","field_pass","caches","session_login_throttle","page_path_history"]} 2 | 3 | DROP TABLE IF EXISTS `caches`; 4 | CREATE TABLE `caches` ( 5 | `name` varchar(191) NOT NULL, 6 | `data` mediumtext NOT NULL, 7 | `expires` datetime NOT NULL, 8 | PRIMARY KEY (`name`), 9 | KEY `expires` (`expires`) 10 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 11 | 12 | DROP TABLE IF EXISTS `field_address`; 13 | CREATE TABLE `field_address` ( 14 | `pages_id` int(10) unsigned NOT NULL, 15 | `data` mediumtext NOT NULL, 16 | PRIMARY KEY (`pages_id`), 17 | KEY `data_exact` (`data`(191)), 18 | FULLTEXT KEY `data` (`data`) 19 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 20 | 21 | INSERT INTO `field_address` (`pages_id`, `data`) VALUES('1020', '168 Open Source Ave.\nAtlanta, GA 30030'); 22 | INSERT INTO `field_address` (`pages_id`, `data`) VALUES('1053', '123 Acme Way\nDuluth, MN 12345'); 23 | INSERT INTO `field_address` (`pages_id`, `data`) VALUES('1054', '9998 Ponce de Leon Avenue\nAtlanta, GA 30307'); 24 | 25 | DROP TABLE IF EXISTS `field_admin_theme`; 26 | CREATE TABLE `field_admin_theme` ( 27 | `pages_id` int(10) unsigned NOT NULL, 28 | `data` int(11) NOT NULL, 29 | PRIMARY KEY (`pages_id`), 30 | KEY `data` (`data`) 31 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 32 | 33 | 34 | DROP TABLE IF EXISTS `field_body`; 35 | CREATE TABLE `field_body` ( 36 | `pages_id` int(10) unsigned NOT NULL, 37 | `data` mediumtext NOT NULL, 38 | PRIMARY KEY (`pages_id`), 39 | KEY `data_exact` (`data`(191)), 40 | FULLTEXT KEY `data` (`data`) 41 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 42 | 43 | INSERT INTO `field_body` (`pages_id`, `data`) VALUES('27', '

The page you were looking for is not found. 

'); 44 | 45 | DROP TABLE IF EXISTS `field_client`; 46 | CREATE TABLE `field_client` ( 47 | `pages_id` int(10) unsigned NOT NULL, 48 | `data` int(11) NOT NULL, 49 | `sort` int(10) unsigned NOT NULL, 50 | PRIMARY KEY (`pages_id`,`sort`), 51 | KEY `data` (`data`,`pages_id`,`sort`) 52 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 53 | 54 | INSERT INTO `field_client` (`pages_id`, `data`, `sort`) VALUES('1047', '1053', '0'); 55 | INSERT INTO `field_client` (`pages_id`, `data`, `sort`) VALUES('1050', '1053', '0'); 56 | INSERT INTO `field_client` (`pages_id`, `data`, `sort`) VALUES('1041', '1054', '0'); 57 | 58 | DROP TABLE IF EXISTS `field_currency`; 59 | CREATE TABLE `field_currency` ( 60 | `pages_id` int(10) unsigned NOT NULL, 61 | `data` text NOT NULL, 62 | PRIMARY KEY (`pages_id`), 63 | KEY `data_exact` (`data`(191)), 64 | FULLTEXT KEY `data` (`data`) 65 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 66 | 67 | INSERT INTO `field_currency` (`pages_id`, `data`) VALUES('1020', '{ \"code\": \"USD\", \"symbol\": \"$\", \"decimal\": \".\", \"thousands\": \",\" }'); 68 | 69 | DROP TABLE IF EXISTS `field_date`; 70 | CREATE TABLE `field_date` ( 71 | `pages_id` int(10) unsigned NOT NULL, 72 | `data` datetime NOT NULL, 73 | PRIMARY KEY (`pages_id`), 74 | KEY `data` (`data`) 75 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 76 | 77 | INSERT INTO `field_date` (`pages_id`, `data`) VALUES('1041', '2024-02-28 00:00:00'); 78 | INSERT INTO `field_date` (`pages_id`, `data`) VALUES('1047', '2024-03-01 00:00:00'); 79 | INSERT INTO `field_date` (`pages_id`, `data`) VALUES('1060', '2024-03-03 00:00:00'); 80 | INSERT INTO `field_date` (`pages_id`, `data`) VALUES('1050', '2024-03-08 00:00:00'); 81 | INSERT INTO `field_date` (`pages_id`, `data`) VALUES('1162', '2024-03-08 00:00:00'); 82 | 83 | DROP TABLE IF EXISTS `field_email`; 84 | CREATE TABLE `field_email` ( 85 | `pages_id` int(10) unsigned NOT NULL, 86 | `data` varchar(191) NOT NULL DEFAULT '', 87 | PRIMARY KEY (`pages_id`), 88 | KEY `data_exact` (`data`), 89 | FULLTEXT KEY `data` (`data`) 90 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 91 | 92 | DROP TABLE IF EXISTS `field_image`; 93 | CREATE TABLE `field_image` ( 94 | `pages_id` int(10) unsigned NOT NULL, 95 | `data` varchar(191) NOT NULL, 96 | `sort` int(10) unsigned NOT NULL, 97 | `description` text NOT NULL, 98 | `modified` datetime DEFAULT NULL, 99 | `created` datetime DEFAULT NULL, 100 | `filedata` mediumtext, 101 | `filesize` int(11) DEFAULT NULL, 102 | `created_users_id` int(10) unsigned NOT NULL DEFAULT '0', 103 | `modified_users_id` int(10) unsigned NOT NULL DEFAULT '0', 104 | `width` int(11) DEFAULT NULL, 105 | `height` int(11) DEFAULT NULL, 106 | `ratio` decimal(4,2) DEFAULT NULL, 107 | PRIMARY KEY (`pages_id`,`sort`), 108 | KEY `data` (`data`), 109 | KEY `modified` (`modified`), 110 | KEY `created` (`created`), 111 | KEY `filesize` (`filesize`), 112 | KEY `width` (`width`), 113 | KEY `height` (`height`), 114 | KEY `ratio` (`ratio`), 115 | FULLTEXT KEY `description` (`description`), 116 | FULLTEXT KEY `filedata` (`filedata`) 117 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 118 | 119 | INSERT INTO `field_image` (`pages_id`, `data`, `sort`, `description`, `modified`, `created`, `filedata`, `filesize`, `created_users_id`, `modified_users_id`, `width`, `height`, `ratio`) VALUES('1020', 'logo-web300x300.png', '0', '', '2022-09-29 07:25:44', '2022-09-29 07:25:44', '', '12570', '41', '41', '291', '300', '0.97'); 120 | 121 | DROP TABLE IF EXISTS `field_invoice_action`; 122 | CREATE TABLE `field_invoice_action` ( 123 | `pages_id` int(10) unsigned NOT NULL, 124 | `data` int(10) unsigned NOT NULL, 125 | `sort` int(10) unsigned NOT NULL, 126 | PRIMARY KEY (`pages_id`,`sort`), 127 | KEY `data` (`data`) 128 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 129 | 130 | 131 | DROP TABLE IF EXISTS `field_invoice_days`; 132 | CREATE TABLE `field_invoice_days` ( 133 | `pages_id` int(10) unsigned NOT NULL, 134 | `data` int(11) NOT NULL, 135 | `sort` int(10) unsigned NOT NULL, 136 | PRIMARY KEY (`pages_id`,`sort`), 137 | KEY `data` (`data`,`pages_id`,`sort`) 138 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 139 | 140 | INSERT INTO `field_invoice_days` (`pages_id`, `data`, `sort`) VALUES('1041', '1068', '0'); 141 | INSERT INTO `field_invoice_days` (`pages_id`, `data`, `sort`) VALUES('1047', '1070', '0'); 142 | INSERT INTO `field_invoice_days` (`pages_id`, `data`, `sort`) VALUES('1050', '1070', '0'); 143 | 144 | DROP TABLE IF EXISTS `field_invoice_item_type`; 145 | CREATE TABLE `field_invoice_item_type` ( 146 | `pages_id` int(10) unsigned NOT NULL, 147 | `data` int(11) NOT NULL, 148 | `sort` int(10) unsigned NOT NULL, 149 | PRIMARY KEY (`pages_id`,`sort`), 150 | KEY `data` (`data`,`pages_id`,`sort`) 151 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 152 | 153 | INSERT INTO `field_invoice_item_type` (`pages_id`, `data`, `sort`) VALUES('1043', '1065', '0'); 154 | INSERT INTO `field_invoice_item_type` (`pages_id`, `data`, `sort`) VALUES('1049', '1065', '0'); 155 | INSERT INTO `field_invoice_item_type` (`pages_id`, `data`, `sort`) VALUES('1052', '1065', '0'); 156 | INSERT INTO `field_invoice_item_type` (`pages_id`, `data`, `sort`) VALUES('1056', '1065', '0'); 157 | INSERT INTO `field_invoice_item_type` (`pages_id`, `data`, `sort`) VALUES('1058', '1065', '0'); 158 | 159 | DROP TABLE IF EXISTS `field_invoice_items`; 160 | CREATE TABLE `field_invoice_items` ( 161 | `pages_id` int(10) unsigned NOT NULL, 162 | `data` text NOT NULL, 163 | `count` int(11) NOT NULL, 164 | `parent_id` int(11) NOT NULL, 165 | PRIMARY KEY (`pages_id`), 166 | KEY `data_exact` (`data`(1)), 167 | KEY `count` (`count`,`pages_id`), 168 | KEY `parent_id` (`parent_id`,`pages_id`), 169 | FULLTEXT KEY `data` (`data`) 170 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 171 | 172 | INSERT INTO `field_invoice_items` (`pages_id`, `data`, `count`, `parent_id`) VALUES('1041', '1043', '1', '1042'); 173 | INSERT INTO `field_invoice_items` (`pages_id`, `data`, `count`, `parent_id`) VALUES('1047', '1049,1056,1058', '3', '1048'); 174 | INSERT INTO `field_invoice_items` (`pages_id`, `data`, `count`, `parent_id`) VALUES('1050', '1052', '1', '1051'); 175 | 176 | DROP TABLE IF EXISTS `field_invoice_log`; 177 | CREATE TABLE `field_invoice_log` ( 178 | `pages_id` int(10) unsigned NOT NULL, 179 | `data` mediumtext NOT NULL, 180 | PRIMARY KEY (`pages_id`), 181 | KEY `data_exact` (`data`(191)), 182 | FULLTEXT KEY `data` (`data`) 183 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 184 | 185 | INSERT INTO `field_invoice_log` (`pages_id`, `data`) VALUES('1041', '2022-09-30 11:14:30 Invoice created\n2022-10-03 08:54:01 Invoice status set from past-due to pending\n2022-10-03 08:57:13 Invoice status changed from pending to past-due\n2022-10-03 10:29:19 Invoice status set to Past due\n2024-03-08 11:33:00 Invoice status changed - Past due => Pending\n2024-03-08 11:33:33 Invoice status changed - Pending => Past due'); 186 | INSERT INTO `field_invoice_log` (`pages_id`, `data`) VALUES('1047', '2022-09-30 11:06:32 Invoice created\n2022-10-03 10:29:07 Invoice status set to Pending\n2023-02-19 12:29:37 Invoice status changed from Pending to Past due\n2024-03-08 10:10:30 Invoice status changed - Past due => Pending\n2024-03-08 11:23:15 Invoice status changed - Pending => Paid'); 187 | INSERT INTO `field_invoice_log` (`pages_id`, `data`) VALUES('1050', '2022-09-30 11:09:24 Invoice created\n2022-09-30 11:40:32 Invoice status set from pending to past-due\n2022-10-03 10:29:25 Invoice status set to Draft\n2024-03-08 11:19:37 Invoice status changed - Draft => Past due\n2024-03-08 11:20:02 Invoice status changed - Past due => Pending'); 188 | 189 | DROP TABLE IF EXISTS `field_invoice_payments`; 190 | CREATE TABLE `field_invoice_payments` ( 191 | `pages_id` int(10) unsigned NOT NULL, 192 | `data` text NOT NULL, 193 | `count` int(11) NOT NULL, 194 | `parent_id` int(11) NOT NULL, 195 | PRIMARY KEY (`pages_id`), 196 | KEY `data_exact` (`data`(1)), 197 | KEY `count` (`count`,`pages_id`), 198 | KEY `parent_id` (`parent_id`,`pages_id`), 199 | FULLTEXT KEY `data` (`data`) 200 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 201 | 202 | INSERT INTO `field_invoice_payments` (`pages_id`, `data`, `count`, `parent_id`) VALUES('1041', '', '0', '0'); 203 | INSERT INTO `field_invoice_payments` (`pages_id`, `data`, `count`, `parent_id`) VALUES('1047', '1060,1162', '2', '1059'); 204 | INSERT INTO `field_invoice_payments` (`pages_id`, `data`, `count`, `parent_id`) VALUES('1050', '', '0', '0'); 205 | 206 | DROP TABLE IF EXISTS `field_invoice_status`; 207 | CREATE TABLE `field_invoice_status` ( 208 | `pages_id` int(10) unsigned NOT NULL, 209 | `data` int(11) NOT NULL, 210 | `sort` int(10) unsigned NOT NULL, 211 | PRIMARY KEY (`pages_id`,`sort`), 212 | KEY `data` (`data`,`pages_id`,`sort`) 213 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 214 | 215 | INSERT INTO `field_invoice_status` (`pages_id`, `data`, `sort`) VALUES('1050', '1075', '0'); 216 | INSERT INTO `field_invoice_status` (`pages_id`, `data`, `sort`) VALUES('1041', '1076', '0'); 217 | INSERT INTO `field_invoice_status` (`pages_id`, `data`, `sort`) VALUES('1047', '1077', '0'); 218 | 219 | DROP TABLE IF EXISTS `field_pass`; 220 | CREATE TABLE `field_pass` ( 221 | `pages_id` int(10) unsigned NOT NULL, 222 | `data` char(40) NOT NULL, 223 | `salt` char(32) NOT NULL, 224 | PRIMARY KEY (`pages_id`), 225 | KEY `data` (`data`) 226 | ) ENGINE=MyISAM DEFAULT CHARSET=ascii; 227 | 228 | DROP TABLE IF EXISTS `field_permissions`; 229 | CREATE TABLE `field_permissions` ( 230 | `pages_id` int(10) unsigned NOT NULL, 231 | `data` int(11) NOT NULL, 232 | `sort` int(10) unsigned NOT NULL, 233 | PRIMARY KEY (`pages_id`,`sort`), 234 | KEY `data` (`data`,`pages_id`,`sort`) 235 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 236 | 237 | DROP TABLE IF EXISTS `field_process`; 238 | CREATE TABLE `field_process` ( 239 | `pages_id` int(11) NOT NULL DEFAULT '0', 240 | `data` int(11) NOT NULL DEFAULT '0', 241 | PRIMARY KEY (`pages_id`), 242 | KEY `data` (`data`) 243 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 244 | 245 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('10', '7'); 246 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('23', '10'); 247 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('3', '12'); 248 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('8', '12'); 249 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('9', '14'); 250 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('6', '17'); 251 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('11', '47'); 252 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('16', '48'); 253 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('21', '50'); 254 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('29', '66'); 255 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('30', '68'); 256 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('22', '76'); 257 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('28', '76'); 258 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('2', '87'); 259 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('300', '104'); 260 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('301', '109'); 261 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('302', '121'); 262 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('303', '129'); 263 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('31', '136'); 264 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('304', '138'); 265 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('1007', '150'); 266 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('1010', '159'); 267 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('1012', '161'); 268 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('1044', '170'); 269 | INSERT INTO `field_process` (`pages_id`, `data`) VALUES('1160', '210'); 270 | 271 | DROP TABLE IF EXISTS `field_qty`; 272 | CREATE TABLE `field_qty` ( 273 | `pages_id` int(10) unsigned NOT NULL, 274 | `data` decimal(6,2) DEFAULT NULL, 275 | PRIMARY KEY (`pages_id`), 276 | KEY `data` (`data`) 277 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 278 | 279 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1067', '0.00'); 280 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1056', '1.00'); 281 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1064', '1.00'); 282 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1065', '1.00'); 283 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1066', '1.00'); 284 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1058', '3.25'); 285 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1068', '7.00'); 286 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1043', '15.00'); 287 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1049', '15.00'); 288 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1052', '15.00'); 289 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1069', '15.00'); 290 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1070', '30.00'); 291 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1071', '45.00'); 292 | INSERT INTO `field_qty` (`pages_id`, `data`) VALUES('1072', '60.00'); 293 | 294 | DROP TABLE IF EXISTS `field_rate`; 295 | CREATE TABLE `field_rate` ( 296 | `pages_id` int(10) unsigned NOT NULL, 297 | `data` decimal(10,2) DEFAULT NULL, 298 | PRIMARY KEY (`pages_id`), 299 | KEY `data` (`data`) 300 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 301 | 302 | INSERT INTO `field_rate` (`pages_id`, `data`) VALUES('1064', '0.00'); 303 | INSERT INTO `field_rate` (`pages_id`, `data`) VALUES('1066', '0.00'); 304 | INSERT INTO `field_rate` (`pages_id`, `data`) VALUES('1049', '20.00'); 305 | INSERT INTO `field_rate` (`pages_id`, `data`) VALUES('1058', '50.00'); 306 | INSERT INTO `field_rate` (`pages_id`, `data`) VALUES('1020', '125.00'); 307 | INSERT INTO `field_rate` (`pages_id`, `data`) VALUES('1043', '125.00'); 308 | INSERT INTO `field_rate` (`pages_id`, `data`) VALUES('1052', '125.00'); 309 | INSERT INTO `field_rate` (`pages_id`, `data`) VALUES('1056', '125.00'); 310 | INSERT INTO `field_rate` (`pages_id`, `data`) VALUES('1065', '125.00'); 311 | 312 | DROP TABLE IF EXISTS `field_roles`; 313 | CREATE TABLE `field_roles` ( 314 | `pages_id` int(10) unsigned NOT NULL, 315 | `data` int(11) NOT NULL, 316 | `sort` int(10) unsigned NOT NULL, 317 | PRIMARY KEY (`pages_id`,`sort`), 318 | KEY `data` (`data`,`pages_id`,`sort`) 319 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 320 | 321 | DROP TABLE IF EXISTS `field_subtitle`; 322 | CREATE TABLE `field_subtitle` ( 323 | `pages_id` int(10) unsigned NOT NULL, 324 | `data` text NOT NULL, 325 | PRIMARY KEY (`pages_id`), 326 | KEY `data_exact` (`data`(191)), 327 | FULLTEXT KEY `data` (`data`) 328 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 329 | 330 | INSERT INTO `field_subtitle` (`pages_id`, `data`) VALUES('1', 'All Invoices'); 331 | INSERT INTO `field_subtitle` (`pages_id`, `data`) VALUES('1020', 'ProcessWire'); 332 | INSERT INTO `field_subtitle` (`pages_id`, `data`) VALUES('1075', 'default'); 333 | INSERT INTO `field_subtitle` (`pages_id`, `data`) VALUES('1076', 'danger'); 334 | INSERT INTO `field_subtitle` (`pages_id`, `data`) VALUES('1077', 'success'); 335 | INSERT INTO `field_subtitle` (`pages_id`, `data`) VALUES('1078', 'warning'); 336 | 337 | DROP TABLE IF EXISTS `field_summary`; 338 | CREATE TABLE `field_summary` ( 339 | `pages_id` int(10) unsigned NOT NULL, 340 | `data` mediumtext NOT NULL, 341 | PRIMARY KEY (`pages_id`), 342 | KEY `data_exact` (`data`(191)), 343 | FULLTEXT KEY `data` (`data`) 344 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 345 | 346 | 347 | DROP TABLE IF EXISTS `field_title`; 348 | CREATE TABLE `field_title` ( 349 | `pages_id` int(10) unsigned NOT NULL, 350 | `data` text NOT NULL, 351 | PRIMARY KEY (`pages_id`), 352 | KEY `data_exact` (`data`(191)), 353 | FULLTEXT KEY `data` (`data`) 354 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 355 | 356 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1', 'Home'); 357 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('2', 'Admin'); 358 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('3', 'Pages'); 359 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('6', 'Add Page'); 360 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('7', 'Trash'); 361 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('8', 'Tree'); 362 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('9', 'Save Sort'); 363 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('10', 'Edit'); 364 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('11', 'Templates'); 365 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('16', 'Fields'); 366 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('21', 'Modules'); 367 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('22', 'Setup'); 368 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('23', 'Login'); 369 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('27', '404 Not Found'); 370 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('28', 'Access'); 371 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('29', 'Users'); 372 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('30', 'Roles'); 373 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('31', 'Permissions'); 374 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('32', 'Edit pages'); 375 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('34', 'Delete pages'); 376 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('35', 'Move pages (change parent)'); 377 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('36', 'View pages'); 378 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('50', 'Sort child pages'); 379 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('51', 'Change templates on pages'); 380 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('52', 'Administer users'); 381 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('53', 'User can update profile/password'); 382 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('54', 'Lock or unlock a page'); 383 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('300', 'Search'); 384 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('301', 'Empty Trash'); 385 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('302', 'Insert Link'); 386 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('303', 'Insert Image'); 387 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('304', 'Profile'); 388 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1006', 'Use Page Lister'); 389 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1007', 'Find'); 390 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1010', 'Recent'); 391 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1011', 'Can see recently edited pages'); 392 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1012', 'Logs'); 393 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1013', 'Can view system logs'); 394 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1014', 'Can manage system logs'); 395 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1015', 'Repeaters'); 396 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1016', 'Invoices'); 397 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1017', 'Clients'); 398 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1018', 'invoice_items'); 399 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1020', 'Settings'); 400 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1027', 'invoice_payments'); 401 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1041', 'Widget Consult August'); 402 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1042', 'test-invoice'); 403 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1043', 'Lots of work'); 404 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1044', 'Clone'); 405 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1045', 'Clone a page'); 406 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1046', 'Clone a tree of pages'); 407 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1047', 'ACME Goods 001'); 408 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1048', 'test-invoice-1'); 409 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1049', 'Explosive tennis balls'); 410 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1050', 'ACME Goods 002'); 411 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1051', 'test-invoice-2'); 412 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1052', 'Lots of work'); 413 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1053', 'ACME Inc.'); 414 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1054', 'Widgets & Fidgets LLC'); 415 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1056', 'American wrought anvil'); 416 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1058', 'Product research for giant 50 ft. rubber band'); 417 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1059', 'test-invoice-1'); 418 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1060', 'Payment for anvil, check #123'); 419 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1062', 'Invoice item types'); 420 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1063', 'Invoice days'); 421 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1064', 'Service'); 422 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1065', 'Hours'); 423 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1066', 'Product'); 424 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1067', 'Due upon receipt'); 425 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1068', '7 days'); 426 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1069', '15 days'); 427 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1070', '30 days'); 428 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1071', '45 days'); 429 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1072', '60 days'); 430 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1074', 'Invoice statuses'); 431 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1075', 'Pending'); 432 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1076', 'Past due'); 433 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1077', 'Paid'); 434 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1078', 'Draft'); 435 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1160', 'DB Backups'); 436 | INSERT INTO `field_title` (`pages_id`, `data`) VALUES('1162', 'Payment for the rest, check #456'); 437 | 438 | DROP TABLE IF EXISTS `field_total`; 439 | CREATE TABLE `field_total` ( 440 | `pages_id` int(10) unsigned NOT NULL, 441 | `data` decimal(10,2) DEFAULT NULL, 442 | PRIMARY KEY (`pages_id`), 443 | KEY `data` (`data`) 444 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 445 | 446 | INSERT INTO `field_total` (`pages_id`, `data`) VALUES('1047', '0.00'); 447 | INSERT INTO `field_total` (`pages_id`, `data`) VALUES('1060', '125.00'); 448 | INSERT INTO `field_total` (`pages_id`, `data`) VALUES('1162', '462.50'); 449 | INSERT INTO `field_total` (`pages_id`, `data`) VALUES('1041', '1875.00'); 450 | INSERT INTO `field_total` (`pages_id`, `data`) VALUES('1050', '1875.00'); 451 | 452 | DROP TABLE IF EXISTS `field_website`; 453 | CREATE TABLE `field_website` ( 454 | `pages_id` int(10) unsigned NOT NULL, 455 | `data` text NOT NULL, 456 | PRIMARY KEY (`pages_id`), 457 | KEY `data_exact` (`data`(191)), 458 | FULLTEXT KEY `data` (`data`) 459 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 460 | 461 | INSERT INTO `field_website` (`pages_id`, `data`) VALUES('1020', 'https://processwire.com'); 462 | INSERT INTO `field_website` (`pages_id`, `data`) VALUES('1053', 'https://www.acme.com'); 463 | INSERT INTO `field_website` (`pages_id`, `data`) VALUES('1054', 'http://widgets-and-fidgets.com/'); 464 | 465 | DROP TABLE IF EXISTS `fieldgroups`; 466 | CREATE TABLE `fieldgroups` ( 467 | `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 468 | `name` varchar(191) CHARACTER SET ascii NOT NULL, 469 | PRIMARY KEY (`id`), 470 | UNIQUE KEY `name` (`name`) 471 | ) ENGINE=MyISAM AUTO_INCREMENT=108 DEFAULT CHARSET=utf8; 472 | 473 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('2', 'admin'); 474 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('83', 'basic-page'); 475 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('98', 'client'); 476 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('97', 'clients'); 477 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('1', 'home'); 478 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('100', 'invoice'); 479 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('105', 'invoice-day'); 480 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('104', 'invoice-item-type'); 481 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('106', 'invoice-options'); 482 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('101', 'invoice-settings'); 483 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('107', 'invoice-status'); 484 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('99', 'invoices'); 485 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('5', 'permission'); 486 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('102', 'repeater_invoice_items'); 487 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('103', 'repeater_invoice_payments'); 488 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('4', 'role'); 489 | INSERT INTO `fieldgroups` (`id`, `name`) VALUES('3', 'user'); 490 | 491 | DROP TABLE IF EXISTS `fieldgroups_fields`; 492 | CREATE TABLE `fieldgroups_fields` ( 493 | `fieldgroups_id` int(10) unsigned NOT NULL DEFAULT '0', 494 | `fields_id` int(10) unsigned NOT NULL DEFAULT '0', 495 | `sort` int(11) unsigned NOT NULL DEFAULT '0', 496 | `data` text, 497 | PRIMARY KEY (`fieldgroups_id`,`fields_id`) 498 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 499 | 500 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('1', '1', '0', NULL); 501 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('1', '112', '1', NULL); 502 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('2', '1', '0', NULL); 503 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('2', '2', '1', NULL); 504 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('3', '3', '0', NULL); 505 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('3', '4', '2', NULL); 506 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('3', '92', '1', NULL); 507 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('3', '97', '3', NULL); 508 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('4', '5', '0', NULL); 509 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('5', '1', '0', NULL); 510 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('83', '1', '0', NULL); 511 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('83', '121', '1', NULL); 512 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('97', '1', '0', NULL); 513 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('98', '1', '0', '{\"label\":\"Client name\"}'); 514 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('98', '92', '3', '{\"columnWidth\":50}'); 515 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('98', '98', '1', NULL); 516 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('98', '101', '2', '{\"columnWidth\":50}'); 517 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('99', '1', '0', NULL); 518 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('99', '112', '1', NULL); 519 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('100', '1', '0', '{\"columnWidth\":25,\"label\":\"Invoice title\\/ID\"}'); 520 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('100', '92', '9', '{\"label\":\"Email address to send invoice to\",\"showIf\":\"invoice_action=1\"}'); 521 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('100', '99', '2', '{\"columnWidth\":25,\"label\":\"Invoice date\"}'); 522 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('100', '105', '6', '{\"collapsed\":\"4\"}'); 523 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('100', '106', '4', '{\"label\":\"Line items\"}'); 524 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('100', '108', '7', '{\"collapsed\":\"2\",\"icon\":\"thumb-tack\",\"label\":\"Invoice notes\"}'); 525 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('100', '109', '1', '{\"columnWidth\":25}'); 526 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('100', '110', '5', NULL); 527 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('100', '114', '8', '{\"collapsed\":\"1\"}'); 528 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('100', '115', '10', NULL); 529 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('100', '116', '3', '{\"columnWidth\":25}'); 530 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('100', '119', '11', NULL); 531 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('101', '1', '0', '{\"collapsed\":\"1\"}'); 532 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('101', '92', '5', '{\"columnWidth\":34}'); 533 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('101', '98', '3', '{\"label\":\"Mailing address\"}'); 534 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('101', '101', '4', '{\"columnWidth\":33}'); 535 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('101', '102', '6', '{\"columnWidth\":33,\"label\":\"Default hourly rate\"}'); 536 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('101', '112', '1', '{\"label\":\"Company or name\"}'); 537 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('101', '113', '2', '{\"label\":\"Company logo image\"}'); 538 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('101', '120', '7', NULL); 539 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('102', '1', '1', '{\"collapsed\":\"9\",\"columnWidth\":55,\"label\":\"Description\",\"required\":\"\"}'); 540 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('102', '102', '3', '{\"collapsed\":\"9\",\"columnWidth\":15}'); 541 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('102', '104', '2', '{\"collapsed\":\"9\",\"columnWidth\":15}'); 542 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('102', '118', '0', '{\"columnWidth\":15,\"label\":\"Type\",\"required\":1}'); 543 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('103', '1', '2', '{\"collapsed\":\"9\",\"columnWidth\":60,\"label\":\"Description\",\"required\":\"\"}'); 544 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('103', '99', '0', '{\"collapsed\":\"9\",\"columnWidth\":20}'); 545 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('103', '105', '1', '{\"collapsed\":\"9\",\"columnWidth\":20,\"label\":\"Amount\"}'); 546 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('104', '1', '0', NULL); 547 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('104', '102', '1', '{\"label\":\"Default rate value\"}'); 548 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('104', '104', '2', '{\"label\":\"Default quantity value\"}'); 549 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('105', '1', '0', NULL); 550 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('105', '104', '1', '{\"label\":\"Number of days\"}'); 551 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('106', '1', '0', NULL); 552 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('107', '1', '0', NULL); 553 | INSERT INTO `fieldgroups_fields` (`fieldgroups_id`, `fields_id`, `sort`, `data`) VALUES('107', '112', '1', '{\"description\":\"One of: default, success, warning, danger\",\"label\":\"Uikit label type\"}'); 554 | 555 | DROP TABLE IF EXISTS `fields`; 556 | CREATE TABLE `fields` ( 557 | `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 558 | `type` varchar(128) CHARACTER SET ascii NOT NULL, 559 | `name` varchar(191) CHARACTER SET ascii NOT NULL, 560 | `flags` int(11) NOT NULL DEFAULT '0', 561 | `label` varchar(191) NOT NULL DEFAULT '', 562 | `data` text NOT NULL, 563 | PRIMARY KEY (`id`), 564 | UNIQUE KEY `name` (`name`), 565 | KEY `type` (`type`) 566 | ) ENGINE=MyISAM AUTO_INCREMENT=122 DEFAULT CHARSET=utf8; 567 | 568 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('1', 'FieldtypePageTitle', 'title', '13', 'Title', '{\"required\":1,\"textformatters\":[\"TextformatterEntities\"],\"size\":0,\"maxlength\":255}'); 569 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('2', 'FieldtypeModule', 'process', '25', 'Process', '{\"description\":\"The process that is executed on this page. Since this is mostly used by ProcessWire internally, it is recommended that you don\'t change the value of this unless adding your own pages in the admin.\",\"collapsed\":1,\"required\":1,\"moduleTypes\":[\"Process\"],\"permanent\":1}'); 570 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('3', 'FieldtypePassword', 'pass', '24', 'Set Password', '{\"collapsed\":1,\"size\":50,\"maxlength\":128}'); 571 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('4', 'FieldtypePage', 'roles', '24', 'Roles', '{\"derefAsPage\":0,\"parent_id\":30,\"labelFieldName\":\"name\",\"inputfield\":\"InputfieldCheckboxes\",\"description\":\"User will inherit the permissions assigned to each role. You may assign multiple roles to a user. When accessing a page, the user will only inherit permissions from the roles that are also assigned to the page\'s template.\"}'); 572 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('5', 'FieldtypePage', 'permissions', '24', 'Permissions', '{\"derefAsPage\":0,\"parent_id\":31,\"labelFieldName\":\"title\",\"inputfield\":\"InputfieldCheckboxes\"}'); 573 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('92', 'FieldtypeEmail', 'email', '9', 'E-Mail Address', '{\"size\":0,\"maxlength\":255,\"collapsed\":0,\"minlength\":0,\"showCount\":0,\"textformatters\":[\"TextformatterEntities\"]}'); 574 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('97', 'FieldtypeModule', 'admin_theme', '8', 'Admin Theme', '{\"moduleTypes\":[\"AdminTheme\"],\"labelField\":\"title\",\"inputfieldClass\":\"InputfieldRadios\"}'); 575 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('98', 'FieldtypeTextarea', 'address', '0', 'Address', '{\"textformatters\":[\"TextformatterEntities\"],\"inputfieldClass\":\"InputfieldTextarea\",\"contentType\":0,\"collapsed\":0,\"minlength\":0,\"maxlength\":0,\"showCount\":0,\"rows\":4}'); 576 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('99', 'FieldtypeDatetime', 'date', '0', 'Date', '{\"dateOutputFormat\":\"Y\\/m\\/d\",\"collapsed\":0,\"inputType\":\"text\",\"htmlType\":\"date\",\"datepicker\":3,\"timeInputSelect\":0,\"dateInputFormat\":\"Y-m-d\",\"size\":0,\"dateSelectFormat\":\"yMd\",\"yearFrom\":1922,\"yearTo\":2042,\"yearLock\":0,\"defaultToday\":1,\"required\":1}'); 577 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('101', 'FieldtypeURL', 'website', '0', 'Website', '{\"textformatters\":[\"TextformatterEntities\"],\"noRelative\":1,\"allowIDN\":0,\"allowQuotes\":0,\"addRoot\":0,\"collapsed\":0,\"minlength\":0,\"maxlength\":1024,\"showCount\":0,\"size\":0}'); 578 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('102', 'FieldtypeDecimal', 'rate', '0', 'Rate', '{\"digits\":10,\"precision\":2,\"zeroNotEmpty\":0,\"collapsed\":0,\"inputType\":\"number\",\"size\":0}'); 579 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('104', 'FieldtypeDecimal', 'qty', '0', 'Qty', '{\"digits\":6,\"precision\":2,\"zeroNotEmpty\":0,\"collapsed\":0,\"inputType\":\"number\",\"size\":0}'); 580 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('105', 'FieldtypeDecimal', 'total', '0', 'Total', '{\"precision\":2,\"zeroNotEmpty\":0,\"inputType\":\"number\",\"size\":0,\"digits\":10,\"collapsed\":0}'); 581 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('106', 'FieldtypeRepeater', 'invoice_items', '0', 'Invoice items', '{\"template_id\":48,\"parent_id\":1018,\"repeaterFields\":[118,1,104,102],\"familyFriendly\":0,\"repeaterCollapse\":3,\"repeaterLoading\":0,\"rememberOpen\":0,\"accordionMode\":0,\"loudControls\":0,\"lazyParents\":1,\"collapsed\":0,\"repeaterAddLabel\":\"Add item\",\"repeaterTitle\":\"Item #n:\",\"themeOffset\":\"m\"}'); 582 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('108', 'FieldtypeTextarea', 'summary', '0', 'Summary', '{\"textformatters\":[\"TextformatterEntities\"],\"inputfieldClass\":\"InputfieldTextarea\",\"contentType\":0,\"collapsed\":0,\"minlength\":0,\"maxlength\":0,\"showCount\":0,\"rows\":3}'); 583 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('109', 'FieldtypePage', 'client', '0', 'Client', '{\"derefAsPage\":2,\"inputfield\":\"InputfieldSelect\",\"parent_id\":1017,\"labelFieldName\":\"title\",\"collapsed\":0,\"template_id\":44,\"required\":1}'); 584 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('110', 'FieldtypeRepeater', 'invoice_payments', '0', 'Received payments', '{\"template_id\":49,\"parent_id\":1027,\"repeaterFields\":[99,105,1],\"familyFriendly\":0,\"repeaterCollapse\":3,\"repeaterLoading\":0,\"rememberOpen\":0,\"accordionMode\":0,\"loudControls\":0,\"collapsed\":2,\"repeaterTitle\":\"Payment #n\",\"lazyParents\":1,\"repeaterAddLabel\":\"Add payment\",\"themeOffset\":\"m\"}'); 585 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('112', 'FieldtypeText', 'subtitle', '0', 'Subtitle', '{\"textformatters\":[\"TextformatterEntities\"],\"collapsed\":0,\"minlength\":0,\"maxlength\":2048,\"showCount\":0,\"size\":0}'); 586 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('113', 'FieldtypeImage', 'image', '0', 'Image', '{\"fileSchema\":270,\"textformatters\":[\"TextformatterEntities\"],\"extensions\":\"gif jpg jpeg png\",\"maxFiles\":1,\"outputFormat\":0,\"descriptionRows\":1,\"useTags\":0,\"gridMode\":\"left\",\"focusMode\":\"on\",\"resizeServer\":0,\"clientQuality\":90,\"maxReject\":0,\"dimensionsByAspectRatio\":0,\"defaultValuePage\":0,\"inputfieldClass\":\"InputfieldImage\",\"collapsed\":0}'); 587 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('114', 'FieldtypeOptions', 'invoice_action', '0', 'Invoice action', '{\"inputfieldClass\":\"InputfieldSelect\",\"collapsed\":0,\"optionColumns\":0,\"description\":\"Select an action and then click Save to complete it.\",\"icon\":\"paper-plane-o\"}'); 588 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('115', 'FieldtypeTextarea', 'invoice_log', '0', 'Log / history', '{\"textformatters\":[\"TextformatterEntities\"],\"inputfieldClass\":\"InputfieldTextarea\",\"contentType\":0,\"collapsed\":8,\"minlength\":0,\"maxlength\":0,\"showCount\":0,\"rows\":5,\"icon\":\"map-o\"}'); 589 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('116', 'FieldtypePage', 'invoice_days', '0', 'Due in', '{\"derefAsPage\":2,\"inputfield\":\"InputfieldSelect\",\"parent_id\":1063,\"template_id\":51,\"labelFieldName\":\"title\",\"collapsed\":0,\"required\":1}'); 590 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('118', 'FieldtypePage', 'invoice_item_type', '0', 'Invoice item type', '{\"derefAsPage\":2,\"inputfield\":\"InputfieldSelect\",\"parent_id\":1062,\"template_id\":50,\"labelFieldName\":\"title\",\"collapsed\":9,\"defaultValue\":1065,\"required\":1}'); 591 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('119', 'FieldtypePage', 'invoice_status', '0', 'Invoice status', '{\"derefAsPage\":2,\"inputfield\":\"InputfieldSelect\",\"parent_id\":1074,\"template_id\":53,\"labelFieldName\":\"title\",\"collapsed\":4}'); 592 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('120', 'FieldtypeText', 'currency', '0', 'Currency info JSON', '{\"notes\":\"Example: `{\\\"code\\\":\\\"EUR\\\",\\\"symbol\\\":\\\"\\u20ac\\\",\\\"decimal\\\":\\\".\\\",\\\"thousands\\\":\\\",\\\"}`\",\"textformatters\":[\"TextformatterEntities\"],\"collapsed\":0,\"minlength\":0,\"maxlength\":2048,\"showCount\":0,\"size\":0,\"description\":\"Enter currency code, symbol, decimal and thousands separator in given JSON format. We could create separate fields for these, but given that this likely only needs to be edited once or never, we\'ll just use this.\"}'); 593 | INSERT INTO `fields` (`id`, `type`, `name`, `flags`, `label`, `data`) VALUES('121', 'FieldtypeTextarea', 'body', '0', 'Body', '{\"inputfieldClass\":\"InputfieldTinyMCE\",\"contentType\":1,\"htmlOptions\":[2],\"inlineMode\":0,\"height\":500,\"lazyMode\":1,\"features\":[\"toolbar\",\"menubar\",\"stickybars\",\"purifier\",\"imgUpload\",\"imgResize\",\"pasteFilter\"],\"toolbar\":\"styles bold italic pwlink pwimage blockquote hr bullist numlist table anchor code\",\"plugins\":[\"anchor\",\"code\",\"link\",\"lists\",\"pwimage\",\"pwlink\",\"table\"],\"collapsed\":0,\"minlength\":0,\"maxlength\":0,\"showCount\":0,\"rows\":15}'); 594 | 595 | DROP TABLE IF EXISTS `fieldtype_options`; 596 | CREATE TABLE `fieldtype_options` ( 597 | `fields_id` int(10) unsigned NOT NULL, 598 | `option_id` int(10) unsigned NOT NULL, 599 | `title` text, 600 | `value` varchar(171) DEFAULT NULL, 601 | `sort` int(10) unsigned NOT NULL, 602 | PRIMARY KEY (`fields_id`,`option_id`), 603 | UNIQUE KEY `title` (`title`(171),`fields_id`), 604 | KEY `value` (`value`,`fields_id`), 605 | KEY `sort` (`sort`,`fields_id`), 606 | FULLTEXT KEY `title_ft` (`title`), 607 | FULLTEXT KEY `value_ft` (`value`) 608 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 609 | 610 | INSERT INTO `fieldtype_options` (`fields_id`, `option_id`, `title`, `value`, `sort`) VALUES('114', '1', 'Email invoice to another address', 'email', '1'); 611 | INSERT INTO `fieldtype_options` (`fields_id`, `option_id`, `title`, `value`, `sort`) VALUES('114', '2', 'Email invoice to client', 'client', '0'); 612 | 613 | DROP TABLE IF EXISTS `modules`; 614 | CREATE TABLE `modules` ( 615 | `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 616 | `class` varchar(128) CHARACTER SET ascii NOT NULL, 617 | `flags` int(11) NOT NULL DEFAULT '0', 618 | `data` mediumtext NOT NULL, 619 | `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 620 | PRIMARY KEY (`id`), 621 | UNIQUE KEY `class` (`class`) 622 | ) ENGINE=MyISAM AUTO_INCREMENT=238 DEFAULT CHARSET=utf8; 623 | 624 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('1', 'FieldtypeTextarea', '0', '', '2022-09-26 10:27:31'); 625 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('3', 'FieldtypeText', '0', '', '2022-09-26 10:27:31'); 626 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('4', 'FieldtypePage', '0', '', '2022-09-26 10:27:31'); 627 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('6', 'FieldtypeFile', '0', '', '2022-09-26 10:27:31'); 628 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('7', 'ProcessPageEdit', '1', '', '2022-09-26 10:27:31'); 629 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('10', 'ProcessLogin', '0', '', '2022-09-26 10:27:31'); 630 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('12', 'ProcessPageList', '0', '{\"pageLabelField\":\"title\",\"paginationLimit\":25,\"limit\":50}', '2022-09-26 10:27:31'); 631 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('14', 'ProcessPageSort', '0', '', '2022-09-26 10:27:31'); 632 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('15', 'InputfieldPageListSelect', '0', '', '2022-09-26 10:27:31'); 633 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('17', 'ProcessPageAdd', '0', '', '2022-09-26 10:27:31'); 634 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('25', 'InputfieldAsmSelect', '0', '', '2022-09-26 10:27:31'); 635 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('27', 'FieldtypeModule', '0', '', '2022-09-26 10:27:31'); 636 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('28', 'FieldtypeDatetime', '0', '', '2022-09-26 10:27:31'); 637 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('29', 'FieldtypeEmail', '0', '', '2022-09-26 10:27:31'); 638 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('30', 'InputfieldForm', '0', '', '2022-09-26 10:27:31'); 639 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('32', 'InputfieldSubmit', '0', '', '2022-09-26 10:27:31'); 640 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('34', 'InputfieldText', '0', '', '2022-09-26 10:27:31'); 641 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('35', 'InputfieldTextarea', '0', '', '2022-09-26 10:27:31'); 642 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('36', 'InputfieldSelect', '0', '', '2022-09-26 10:27:31'); 643 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('37', 'InputfieldCheckbox', '0', '', '2022-09-26 10:27:31'); 644 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('38', 'InputfieldCheckboxes', '0', '', '2022-09-26 10:27:31'); 645 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('39', 'InputfieldRadios', '0', '', '2022-09-26 10:27:31'); 646 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('40', 'InputfieldHidden', '0', '', '2022-09-26 10:27:31'); 647 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('41', 'InputfieldName', '0', '', '2022-09-26 10:27:31'); 648 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('43', 'InputfieldSelectMultiple', '0', '', '2022-09-26 10:27:31'); 649 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('45', 'JqueryWireTabs', '0', '', '2022-09-26 10:27:31'); 650 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('47', 'ProcessTemplate', '0', '', '2022-09-26 10:27:31'); 651 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('48', 'ProcessField', '32', '{\"collapsedTags\":[]}', '2022-09-26 10:27:31'); 652 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('50', 'ProcessModule', '0', '', '2022-09-26 10:27:31'); 653 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('55', 'InputfieldFile', '0', '', '2022-09-26 10:27:31'); 654 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('56', 'InputfieldImage', '0', '', '2022-09-26 10:27:31'); 655 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('57', 'FieldtypeImage', '0', '', '2022-09-26 10:27:31'); 656 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('60', 'InputfieldPage', '0', '{\"inputfieldClasses\":[\"InputfieldSelect\",\"InputfieldSelectMultiple\",\"InputfieldCheckboxes\",\"InputfieldRadios\",\"InputfieldAsmSelect\",\"InputfieldPageListSelect\",\"InputfieldPageListSelectMultiple\",\"InputfieldPageAutocomplete\"]}', '2022-09-26 10:27:31'); 657 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('61', 'TextformatterEntities', '0', '', '2022-09-26 10:27:31'); 658 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('66', 'ProcessUser', '0', '{\"showFields\":[\"name\",\"email\",\"roles\"]}', '2022-09-26 10:27:31'); 659 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('67', 'MarkupAdminDataTable', '0', '', '2022-09-26 10:27:31'); 660 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('68', 'ProcessRole', '0', '{\"showFields\":[\"name\"]}', '2022-09-26 10:27:31'); 661 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('76', 'ProcessList', '0', '', '2022-09-26 10:27:31'); 662 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('78', 'InputfieldFieldset', '0', '', '2022-09-26 10:27:31'); 663 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('79', 'InputfieldMarkup', '0', '', '2022-09-26 10:27:31'); 664 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('80', 'InputfieldEmail', '0', '', '2022-09-26 10:27:31'); 665 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('83', 'ProcessPageView', '0', '', '2022-09-26 10:27:31'); 666 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('84', 'FieldtypeInteger', '0', '', '2022-09-26 10:27:31'); 667 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('85', 'InputfieldInteger', '0', '', '2022-09-26 10:27:31'); 668 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('86', 'InputfieldPageName', '0', '', '2022-09-26 10:27:31'); 669 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('87', 'ProcessHome', '0', '', '2022-09-26 10:27:31'); 670 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('89', 'FieldtypeFloat', '1', '', '2022-09-26 10:27:31'); 671 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('90', 'InputfieldFloat', '0', '', '2022-09-26 10:27:31'); 672 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('94', 'InputfieldDatetime', '0', '', '2022-09-26 10:27:31'); 673 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('97', 'FieldtypeCheckbox', '1', '', '2022-09-26 10:27:31'); 674 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('98', 'MarkupPagerNav', '0', '', '2022-09-26 10:27:31'); 675 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('103', 'JqueryTableSorter', '1', '', '2022-09-26 10:27:31'); 676 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('104', 'ProcessPageSearch', '1', '{\"searchFields\":\"title\",\"displayField\":\"title path\"}', '2022-09-26 10:27:31'); 677 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('105', 'FieldtypeFieldsetOpen', '1', '', '2022-09-26 10:27:31'); 678 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('106', 'FieldtypeFieldsetClose', '1', '', '2022-09-26 10:27:31'); 679 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('107', 'FieldtypeFieldsetTabOpen', '1', '', '2022-09-26 10:27:31'); 680 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('108', 'InputfieldURL', '0', '', '2022-09-26 10:27:31'); 681 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('109', 'ProcessPageTrash', '1', '', '2022-09-26 10:27:31'); 682 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('111', 'FieldtypePageTitle', '1', '', '2022-09-26 10:27:31'); 683 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('112', 'InputfieldPageTitle', '0', '', '2022-09-26 10:27:31'); 684 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('113', 'MarkupPageArray', '3', '', '2022-09-26 10:27:31'); 685 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('114', 'PagePermissions', '3', '', '2022-09-26 10:27:31'); 686 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('115', 'PageRender', '3', '{\"clearCache\":1}', '2022-09-26 10:27:31'); 687 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('116', 'JqueryCore', '1', '', '2022-09-26 10:27:31'); 688 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('117', 'JqueryUI', '1', '', '2022-09-26 10:27:31'); 689 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('121', 'ProcessPageEditLink', '1', '', '2022-09-26 10:27:31'); 690 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('122', 'InputfieldPassword', '0', '', '2022-09-26 10:27:31'); 691 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('125', 'SessionLoginThrottle', '11', '', '2022-09-26 10:27:31'); 692 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('129', 'ProcessPageEditImageSelect', '1', '', '2022-09-26 10:27:31'); 693 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('131', 'InputfieldButton', '0', '', '2022-09-26 10:27:31'); 694 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('133', 'FieldtypePassword', '1', '', '2022-09-26 10:27:31'); 695 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('134', 'ProcessPageType', '33', '{\"showFields\":[]}', '2022-09-26 10:27:31'); 696 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('135', 'FieldtypeURL', '1', '', '2022-09-26 10:27:31'); 697 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('136', 'ProcessPermission', '1', '{\"showFields\":[\"name\",\"title\"]}', '2022-09-26 10:27:31'); 698 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('137', 'InputfieldPageListSelectMultiple', '0', '', '2022-09-26 10:27:31'); 699 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('138', 'ProcessProfile', '1', '{\"profileFields\":[\"pass\",\"email\",\"admin_theme\"]}', '2022-09-26 10:27:31'); 700 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('139', 'SystemUpdater', '1', '{\"systemVersion\":20,\"coreVersion\":\"3.0.236\"}', '2022-09-26 10:27:31'); 701 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('148', 'AdminThemeDefault', '10', '{\"colors\":\"classic\"}', '2022-09-26 10:27:31'); 702 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('149', 'InputfieldSelector', '42', '', '2022-09-26 10:27:31'); 703 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('150', 'ProcessPageLister', '32', '{\"bookmarks\":{\"_1007\":{\"_1709909701\":{\"title\":\"Invoices\",\"desc\":\"\",\"selector\":\"template=46\",\"columns\":[\"title\",\"date\",\"client\",\"invoice_status\"],\"sort\":\"-modified\",\"type\":0,\"roles\":[]}}}}', '2022-09-26 10:27:31'); 704 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('151', 'JqueryMagnific', '1', '', '2022-09-26 10:27:31'); 705 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('155', 'InputfieldCKEditor', '0', '', '2022-09-26 10:27:31'); 706 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('156', 'MarkupHTMLPurifier', '0', '', '2022-09-26 10:27:31'); 707 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('159', 'ProcessRecentPages', '1', '', '2022-09-26 10:27:48'); 708 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('160', 'AdminThemeUikit', '10', '', '2022-09-26 10:27:48'); 709 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('161', 'ProcessLogger', '1', '', '2022-09-26 10:27:52'); 710 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('162', 'InputfieldIcon', '0', '', '2022-09-26 10:27:52'); 711 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('163', 'InputfieldTextTags', '0', '', '2022-09-26 10:58:52'); 712 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('164', 'InputfieldToggle', '0', '', '2022-09-26 11:01:24'); 713 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('165', 'FieldtypeOptions', '1', '', '2022-09-26 11:03:11'); 714 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('166', 'FieldtypeRepeater', '35', '{\"repeatersRootPageID\":1015}', '2022-09-26 11:06:27'); 715 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('167', 'InputfieldRepeater', '0', '', '2022-09-26 11:06:27'); 716 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('168', 'FieldtypeDecimal', '1', '', '2022-09-26 11:07:11'); 717 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('169', 'InputfieldPageAutocomplete', '0', '', '2022-09-26 11:20:02'); 718 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('170', 'ProcessPageClone', '11', '', '2022-09-28 10:51:43'); 719 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('172', '.Modules.info', '8192', '{\"198\":{\"name\":\"TextformatterMarkdownExtra\",\"title\":\"Markdown\\/Parsedown Extra\",\"version\":180,\"singular\":1,\"created\":1709740754,\"configurable\":4},\"61\":{\"name\":\"TextformatterEntities\",\"title\":\"HTML Entity Encoder (htmlspecialchars)\",\"version\":100,\"created\":1664202451},\"117\":{\"name\":\"JqueryUI\",\"title\":\"jQuery UI\",\"version\":\"1.10.4\",\"singular\":true,\"created\":1664202451,\"permanent\":true},\"103\":{\"name\":\"JqueryTableSorter\",\"title\":\"jQuery Table Sorter Plugin\",\"version\":\"2.31.3\",\"singular\":1,\"created\":1664202451},\"116\":{\"name\":\"JqueryCore\",\"title\":\"jQuery Core\",\"version\":\"1.12.4\",\"singular\":true,\"created\":1664202451,\"permanent\":true},\"45\":{\"name\":\"JqueryWireTabs\",\"title\":\"jQuery Wire Tabs Plugin\",\"version\":110,\"created\":1664202451,\"configurable\":3,\"permanent\":true},\"151\":{\"name\":\"JqueryMagnific\",\"title\":\"jQuery Magnific Popup\",\"version\":\"1.1.0\",\"singular\":1,\"created\":1664202451},\"139\":{\"name\":\"SystemUpdater\",\"title\":\"System Updater\",\"version\":20,\"singular\":true,\"created\":1664202451,\"configurable\":3,\"permanent\":true},\"113\":{\"name\":\"MarkupPageArray\",\"title\":\"PageArray Markup\",\"version\":100,\"autoload\":true,\"singular\":true,\"created\":1664202451},\"156\":{\"name\":\"MarkupHTMLPurifier\",\"title\":\"HTML Purifier\",\"version\":497,\"created\":1664202451},\"98\":{\"name\":\"MarkupPagerNav\",\"title\":\"Pager (Pagination) Navigation\",\"version\":105,\"created\":1664202451},\"67\":{\"name\":\"MarkupAdminDataTable\",\"title\":\"Admin Data Table\",\"version\":107,\"created\":1664202451,\"permanent\":true},\"115\":{\"name\":\"PageRender\",\"title\":\"Page Render\",\"version\":105,\"autoload\":true,\"singular\":true,\"created\":1664202451,\"configurable\":3,\"permanent\":true},\"57\":{\"name\":\"FieldtypeImage\",\"title\":\"Images\",\"version\":102,\"created\":1664202451,\"configurable\":4,\"permanent\":true},\"105\":{\"name\":\"FieldtypeFieldsetOpen\",\"title\":\"Fieldset (Open)\",\"version\":101,\"singular\":1,\"created\":1664202451,\"permanent\":true},\"6\":{\"name\":\"FieldtypeFile\",\"title\":\"Files\",\"version\":107,\"created\":1664202451,\"configurable\":4,\"permanent\":true},\"4\":{\"name\":\"FieldtypePage\",\"title\":\"Page Reference\",\"version\":107,\"created\":1664202451,\"configurable\":3,\"permanent\":true},\"1\":{\"name\":\"FieldtypeTextarea\",\"title\":\"Textarea\",\"version\":107,\"created\":1664202451,\"permanent\":true},\"27\":{\"name\":\"FieldtypeModule\",\"title\":\"Module Reference\",\"version\":102,\"created\":1664202451,\"permanent\":true},\"166\":{\"name\":\"FieldtypeRepeater\",\"title\":\"Repeater\",\"version\":113,\"installs\":[\"InputfieldRepeater\"],\"autoload\":true,\"singular\":true,\"created\":1664204787,\"configurable\":3},\"167\":{\"name\":\"InputfieldRepeater\",\"title\":\"Repeater\",\"version\":111,\"requiresVersions\":{\"FieldtypeRepeater\":[\">=\",0]},\"created\":1664204787},\"111\":{\"name\":\"FieldtypePageTitle\",\"title\":\"Page Title\",\"version\":100,\"singular\":true,\"created\":1664202451,\"permanent\":true},\"135\":{\"name\":\"FieldtypeURL\",\"title\":\"URL\",\"version\":101,\"singular\":1,\"created\":1664202451,\"permanent\":true},\"84\":{\"name\":\"FieldtypeInteger\",\"title\":\"Integer\",\"version\":102,\"created\":1664202451,\"permanent\":true},\"168\":{\"name\":\"FieldtypeDecimal\",\"title\":\"Decimal\",\"version\":1,\"singular\":1,\"created\":1664204831},\"106\":{\"name\":\"FieldtypeFieldsetClose\",\"title\":\"Fieldset (Close)\",\"version\":100,\"singular\":1,\"created\":1664202451,\"permanent\":true},\"165\":{\"name\":\"FieldtypeOptions\",\"title\":\"Select Options\",\"version\":2,\"singular\":1,\"created\":1664204591},\"133\":{\"name\":\"FieldtypePassword\",\"title\":\"Password\",\"version\":101,\"singular\":true,\"created\":1664202451,\"permanent\":true},\"97\":{\"name\":\"FieldtypeCheckbox\",\"title\":\"Checkbox\",\"version\":101,\"singular\":1,\"created\":1664202451,\"permanent\":true},\"89\":{\"name\":\"FieldtypeFloat\",\"title\":\"Float\",\"version\":107,\"singular\":1,\"created\":1664202451,\"permanent\":true},\"3\":{\"name\":\"FieldtypeText\",\"title\":\"Text\",\"version\":102,\"created\":1664202451,\"permanent\":true},\"107\":{\"name\":\"FieldtypeFieldsetTabOpen\",\"title\":\"Fieldset in Tab (Open)\",\"version\":100,\"singular\":1,\"created\":1664202451,\"permanent\":true},\"29\":{\"name\":\"FieldtypeEmail\",\"title\":\"E-Mail\",\"version\":101,\"created\":1664202451},\"28\":{\"name\":\"FieldtypeDatetime\",\"title\":\"Datetime\",\"version\":105,\"created\":1664202451},\"160\":{\"name\":\"AdminThemeUikit\",\"title\":\"Uikit\",\"version\":34,\"autoload\":\"template=admin\",\"created\":1664202468,\"configurable\":4},\"148\":{\"name\":\"AdminThemeDefault\",\"title\":\"Default\",\"version\":14,\"autoload\":\"template=admin\",\"created\":1664202451,\"configurable\":19},\"114\":{\"name\":\"PagePermissions\",\"title\":\"Page Permissions\",\"version\":105,\"autoload\":true,\"singular\":true,\"created\":1664202451,\"permanent\":true},\"85\":{\"name\":\"InputfieldInteger\",\"title\":\"Integer\",\"version\":105,\"created\":1664202451,\"permanent\":true},\"108\":{\"name\":\"InputfieldURL\",\"title\":\"URL\",\"version\":103,\"created\":1664202451},\"40\":{\"name\":\"InputfieldHidden\",\"title\":\"Hidden\",\"version\":101,\"created\":1664202451,\"permanent\":true},\"90\":{\"name\":\"InputfieldFloat\",\"title\":\"Float\",\"version\":105,\"created\":1664202451,\"permanent\":true},\"38\":{\"name\":\"InputfieldCheckboxes\",\"title\":\"Checkboxes\",\"version\":108,\"created\":1664202451,\"permanent\":true},\"36\":{\"name\":\"InputfieldSelect\",\"title\":\"Select\",\"version\":103,\"created\":1664202451,\"permanent\":true},\"78\":{\"name\":\"InputfieldFieldset\",\"title\":\"Fieldset\",\"version\":101,\"created\":1664202451,\"permanent\":true},\"56\":{\"name\":\"InputfieldImage\",\"title\":\"Images\",\"version\":128,\"created\":1664202451,\"permanent\":true},\"35\":{\"name\":\"InputfieldTextarea\",\"title\":\"Textarea\",\"version\":103,\"created\":1664202451,\"permanent\":true},\"55\":{\"name\":\"InputfieldFile\",\"title\":\"Files\",\"version\":128,\"created\":1664202451,\"permanent\":true},\"164\":{\"name\":\"InputfieldToggle\",\"title\":\"Toggle\",\"version\":1,\"created\":1664204484},\"131\":{\"name\":\"InputfieldButton\",\"title\":\"Button\",\"version\":100,\"created\":1664202451,\"permanent\":true},\"25\":{\"name\":\"InputfieldAsmSelect\",\"title\":\"asmSelect\",\"version\":203,\"created\":1664202451,\"permanent\":true},\"60\":{\"name\":\"InputfieldPage\",\"title\":\"Page\",\"version\":109,\"created\":1664202451,\"configurable\":3,\"permanent\":true},\"80\":{\"name\":\"InputfieldEmail\",\"title\":\"Email\",\"version\":102,\"created\":1664202451},\"86\":{\"name\":\"InputfieldPageName\",\"title\":\"Page Name\",\"version\":106,\"created\":1664202451,\"configurable\":3,\"permanent\":true},\"94\":{\"name\":\"InputfieldDatetime\",\"title\":\"Datetime\",\"version\":107,\"created\":1664202451,\"permanent\":true},\"155\":{\"name\":\"InputfieldCKEditor\",\"title\":\"CKEditor\",\"version\":172,\"installs\":[\"MarkupHTMLPurifier\"],\"created\":1664202451},\"34\":{\"name\":\"InputfieldText\",\"title\":\"Text\",\"version\":106,\"created\":1664202451,\"permanent\":true},\"37\":{\"name\":\"InputfieldCheckbox\",\"title\":\"Checkbox\",\"version\":106,\"created\":1664202451,\"permanent\":true},\"79\":{\"name\":\"InputfieldMarkup\",\"title\":\"Markup\",\"version\":102,\"created\":1664202451,\"permanent\":true},\"43\":{\"name\":\"InputfieldSelectMultiple\",\"title\":\"Select Multiple\",\"version\":101,\"created\":1664202451,\"permanent\":true},\"162\":{\"name\":\"InputfieldIcon\",\"title\":\"Icon\",\"version\":3,\"created\":1664202472},\"39\":{\"name\":\"InputfieldRadios\",\"title\":\"Radio Buttons\",\"version\":106,\"created\":1664202451,\"permanent\":true},\"112\":{\"name\":\"InputfieldPageTitle\",\"title\":\"Page Title\",\"version\":102,\"created\":1664202451,\"permanent\":true},\"122\":{\"name\":\"InputfieldPassword\",\"title\":\"Password\",\"version\":102,\"created\":1664202451,\"permanent\":true},\"169\":{\"name\":\"InputfieldPageAutocomplete\",\"title\":\"Page Auto Complete\",\"version\":113,\"created\":1664205602},\"149\":{\"name\":\"InputfieldSelector\",\"title\":\"Selector\",\"version\":28,\"autoload\":\"template=admin\",\"created\":1664202451,\"configurable\":3,\"addFlag\":32},\"32\":{\"name\":\"InputfieldSubmit\",\"title\":\"Submit\",\"version\":103,\"created\":1664202451,\"permanent\":true},\"191\":{\"name\":\"InputfieldTinyMCE\",\"title\":\"TinyMCE\",\"version\":618,\"icon\":\"keyboard-o\",\"requiresVersions\":{\"ProcessWire\":[\">=\",\"3.0.200\"],\"MarkupHTMLPurifier\":[\">=\",0]},\"created\":1709740718,\"configurable\":4},\"163\":{\"name\":\"InputfieldTextTags\",\"title\":\"Text Tags\",\"version\":6,\"icon\":\"tags\",\"created\":1664204332},\"30\":{\"name\":\"InputfieldForm\",\"title\":\"Form\",\"version\":107,\"created\":1664202451,\"permanent\":true},\"15\":{\"name\":\"InputfieldPageListSelect\",\"title\":\"Page List Select\",\"version\":101,\"created\":1664202451,\"permanent\":true},\"137\":{\"name\":\"InputfieldPageListSelectMultiple\",\"title\":\"Page List Select Multiple\",\"version\":103,\"created\":1664202451,\"permanent\":true},\"41\":{\"name\":\"InputfieldName\",\"title\":\"Name\",\"version\":100,\"created\":1664202451,\"permanent\":true},\"50\":{\"name\":\"ProcessModule\",\"title\":\"Modules\",\"version\":121,\"permission\":\"module-admin\",\"created\":1664202451,\"permanent\":true,\"useNavJSON\":true,\"nav\":[{\"url\":\"?site#tab_site_modules\",\"label\":\"Site\",\"icon\":\"plug\",\"navJSON\":\"navJSON\\/?site=1\"},{\"url\":\"?core#tab_core_modules\",\"label\":\"Core\",\"icon\":\"plug\",\"navJSON\":\"navJSON\\/?core=1\"},{\"url\":\"?configurable#tab_configurable_modules\",\"label\":\"Configure\",\"icon\":\"gear\",\"navJSON\":\"navJSON\\/?configurable=1\"},{\"url\":\"?install#tab_install_modules\",\"label\":\"Install\",\"icon\":\"sign-in\",\"navJSON\":\"navJSON\\/?install=1\"},{\"url\":\"?new#tab_new_modules\",\"label\":\"New\",\"icon\":\"plus\"},{\"url\":\"?reset=1\",\"label\":\"Refresh\",\"icon\":\"refresh\"}]},\"170\":{\"name\":\"ProcessPageClone\",\"title\":\"Page Clone\",\"version\":104,\"permission\":\"page-clone\",\"autoload\":\"template=admin\",\"singular\":true,\"created\":1664376703},\"48\":{\"name\":\"ProcessField\",\"title\":\"Fields\",\"version\":114,\"icon\":\"cube\",\"permission\":\"field-admin\",\"created\":1664202451,\"configurable\":3,\"permanent\":true,\"useNavJSON\":true,\"addFlag\":32},\"136\":{\"name\":\"ProcessPermission\",\"title\":\"Permissions\",\"version\":101,\"icon\":\"gear\",\"permission\":\"permission-admin\",\"singular\":1,\"created\":1664202451,\"configurable\":3,\"permanent\":true,\"useNavJSON\":true},\"121\":{\"name\":\"ProcessPageEditLink\",\"title\":\"Page Edit Link\",\"version\":112,\"icon\":\"link\",\"permission\":\"page-edit\",\"singular\":1,\"created\":1664202451,\"configurable\":4,\"permanent\":true},\"161\":{\"name\":\"ProcessLogger\",\"title\":\"Logs\",\"version\":2,\"icon\":\"tree\",\"permission\":\"logs-view\",\"singular\":1,\"created\":1664202472,\"useNavJSON\":true},\"150\":{\"name\":\"ProcessPageLister\",\"title\":\"Lister\",\"version\":26,\"icon\":\"search\",\"permission\":\"page-lister\",\"created\":1664202451,\"configurable\":true,\"permanent\":true,\"useNavJSON\":true,\"addFlag\":32},\"87\":{\"name\":\"ProcessHome\",\"title\":\"Admin Home\",\"version\":101,\"permission\":\"page-view\",\"created\":1664202451,\"permanent\":true},\"68\":{\"name\":\"ProcessRole\",\"title\":\"Roles\",\"version\":104,\"icon\":\"gears\",\"permission\":\"role-admin\",\"created\":1664202451,\"configurable\":3,\"permanent\":true,\"useNavJSON\":true},\"83\":{\"name\":\"ProcessPageView\",\"title\":\"Page View\",\"version\":106,\"permission\":\"page-view\",\"created\":1664202451,\"permanent\":true},\"104\":{\"name\":\"ProcessPageSearch\",\"title\":\"Page Search\",\"version\":108,\"permission\":\"page-edit\",\"singular\":1,\"created\":1664202451,\"configurable\":3,\"permanent\":true},\"12\":{\"name\":\"ProcessPageList\",\"title\":\"Page List\",\"version\":124,\"icon\":\"sitemap\",\"permission\":\"page-edit\",\"created\":1664202451,\"configurable\":3,\"permanent\":true,\"useNavJSON\":true},\"134\":{\"name\":\"ProcessPageType\",\"title\":\"Page Type\",\"version\":101,\"singular\":1,\"created\":1664202451,\"configurable\":3,\"permanent\":true,\"useNavJSON\":true,\"addFlag\":32},\"7\":{\"name\":\"ProcessPageEdit\",\"title\":\"Page Edit\",\"version\":112,\"icon\":\"edit\",\"permission\":\"page-edit\",\"singular\":1,\"created\":1664202451,\"configurable\":3,\"permanent\":true,\"useNavJSON\":true},\"129\":{\"name\":\"ProcessPageEditImageSelect\",\"title\":\"Page Edit Image\",\"version\":121,\"permission\":\"page-edit\",\"singular\":1,\"created\":1664202451,\"configurable\":3,\"permanent\":true},\"76\":{\"name\":\"ProcessList\",\"title\":\"List\",\"version\":101,\"permission\":\"page-view\",\"created\":1664202451,\"permanent\":true},\"14\":{\"name\":\"ProcessPageSort\",\"title\":\"Page Sort and Move\",\"version\":101,\"permission\":\"page-edit\",\"created\":1664202451,\"permanent\":true},\"66\":{\"name\":\"ProcessUser\",\"title\":\"Users\",\"version\":107,\"icon\":\"group\",\"permission\":\"user-admin\",\"created\":1664202451,\"configurable\":\"ProcessUserConfig.php\",\"permanent\":true,\"useNavJSON\":true},\"10\":{\"name\":\"ProcessLogin\",\"title\":\"Login\",\"version\":109,\"permission\":\"page-view\",\"created\":1664202451,\"configurable\":4,\"permanent\":true},\"109\":{\"name\":\"ProcessPageTrash\",\"title\":\"Page Trash\",\"version\":103,\"singular\":1,\"created\":1664202451,\"permanent\":true},\"159\":{\"name\":\"ProcessRecentPages\",\"title\":\"Recent Pages\",\"version\":2,\"icon\":\"clock-o\",\"permission\":\"page-edit-recent\",\"singular\":1,\"created\":1664202468,\"useNavJSON\":true,\"nav\":[{\"url\":\"?edited=1\",\"label\":\"Edited\",\"icon\":\"users\",\"navJSON\":\"navJSON\\/?edited=1\"},{\"url\":\"?added=1\",\"label\":\"Created\",\"icon\":\"users\",\"navJSON\":\"navJSON\\/?added=1\"},{\"url\":\"?edited=1&me=1\",\"label\":\"Edited by me\",\"icon\":\"user\",\"navJSON\":\"navJSON\\/?edited=1&me=1\"},{\"url\":\"?added=1&me=1\",\"label\":\"Created by me\",\"icon\":\"user\",\"navJSON\":\"navJSON\\/?added=1&me=1\"},{\"url\":\"another\\/\",\"label\":\"Add another\",\"icon\":\"plus-circle\",\"navJSON\":\"anotherNavJSON\\/\"}]},\"47\":{\"name\":\"ProcessTemplate\",\"title\":\"Templates\",\"version\":114,\"icon\":\"cubes\",\"permission\":\"template-admin\",\"created\":1664202451,\"configurable\":4,\"permanent\":true,\"useNavJSON\":true},\"17\":{\"name\":\"ProcessPageAdd\",\"title\":\"Page Add\",\"version\":109,\"icon\":\"plus-circle\",\"permission\":\"page-edit\",\"created\":1664202451,\"configurable\":3,\"permanent\":true,\"useNavJSON\":true},\"138\":{\"name\":\"ProcessProfile\",\"title\":\"User Profile\",\"version\":105,\"permission\":\"profile-edit\",\"singular\":1,\"created\":1664202451,\"configurable\":3,\"permanent\":true},\"125\":{\"name\":\"SessionLoginThrottle\",\"title\":\"Session Login Throttle\",\"version\":103,\"autoload\":\"function\",\"singular\":true,\"created\":1664202451,\"configurable\":3},\"221\":{\"name\":\"ProcessExportProfile\",\"title\":\"Export Site Profile\",\"version\":401,\"icon\":\"truck\",\"requiresVersions\":{\"ProcessWire\":[\">=\",\"3.0.0\"]},\"singular\":1,\"created\":1709915864}}', '2023-08-27 12:19:00'); 720 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('173', '.ModulesVerbose.info', '8192', '{\"198\":{\"summary\":\"Markdown\\/Parsedown extra lightweight markup language by Emanuil Rusev. Based on Markdown by John Gruber.\",\"core\":true,\"versionStr\":\"1.8.0\"},\"61\":{\"summary\":\"Entity encode ampersands, quotes (single and double) and greater-than\\/less-than signs using htmlspecialchars(str, ENT_QUOTES). It is recommended that you use this on all text\\/textarea fields except those using a rich text editor or a markup language like Markdown.\",\"core\":true,\"versionStr\":\"1.0.0\"},\"117\":{\"summary\":\"jQuery UI as required by ProcessWire and plugins\",\"href\":\"https:\\/\\/ui.jquery.com\",\"core\":true,\"versionStr\":\"1.10.4\"},\"103\":{\"summary\":\"Provides a jQuery plugin for sorting tables.\",\"href\":\"https:\\/\\/mottie.github.io\\/tablesorter\\/\",\"core\":true,\"versionStr\":\"2.31.3\"},\"116\":{\"summary\":\"jQuery Core as required by ProcessWire Admin and plugins\",\"href\":\"https:\\/\\/jquery.com\",\"core\":true,\"versionStr\":\"1.12.4\"},\"45\":{\"summary\":\"Provides a jQuery plugin for generating tabs in ProcessWire.\",\"core\":true,\"versionStr\":\"1.1.0\"},\"151\":{\"summary\":\"Provides lightbox capability for image galleries. Replacement for FancyBox. Uses Magnific Popup by @dimsemenov.\",\"href\":\"https:\\/\\/github.com\\/dimsemenov\\/Magnific-Popup\\/\",\"core\":true,\"versionStr\":\"1.1.0\"},\"139\":{\"summary\":\"Manages system versions and upgrades.\",\"core\":true,\"versionStr\":\"0.2.0\"},\"113\":{\"summary\":\"Adds renderPager() method to all PaginatedArray types, for easy pagination output. Plus a render() method to PageArray instances.\",\"core\":true,\"versionStr\":\"1.0.0\"},\"156\":{\"summary\":\"Front-end to the HTML Purifier library.\",\"core\":true,\"versionStr\":\"4.9.7\"},\"98\":{\"summary\":\"Generates markup for pagination navigation\",\"core\":true,\"versionStr\":\"1.0.5\"},\"67\":{\"summary\":\"Generates markup for data tables used by ProcessWire admin\",\"core\":true,\"versionStr\":\"1.0.7\"},\"115\":{\"summary\":\"Adds a render method to Page and caches page output.\",\"core\":true,\"versionStr\":\"1.0.5\"},\"57\":{\"summary\":\"Field that stores one or more GIF, JPG, or PNG images\",\"core\":true,\"versionStr\":\"1.0.2\"},\"105\":{\"summary\":\"Open a fieldset to group fields. Should be followed by a Fieldset (Close) after one or more fields.\",\"core\":true,\"versionStr\":\"1.0.1\"},\"6\":{\"summary\":\"Field that stores one or more files\",\"core\":true,\"versionStr\":\"1.0.7\"},\"4\":{\"summary\":\"Field that stores one or more references to ProcessWire pages\",\"core\":true,\"versionStr\":\"1.0.7\"},\"1\":{\"summary\":\"Field that stores multiple lines of text\",\"core\":true,\"versionStr\":\"1.0.7\"},\"27\":{\"summary\":\"Field that stores a reference to another module\",\"core\":true,\"versionStr\":\"1.0.2\"},\"166\":{\"summary\":\"Maintains a collection of fields that are repeated for any number of times.\",\"core\":true,\"versionStr\":\"1.1.3\"},\"167\":{\"summary\":\"Repeats fields from another template. Provides the input for FieldtypeRepeater.\",\"core\":true,\"versionStr\":\"1.1.1\"},\"111\":{\"summary\":\"Field that stores a page title\",\"core\":true,\"versionStr\":\"1.0.0\"},\"135\":{\"summary\":\"Field that stores a URL\",\"core\":true,\"versionStr\":\"1.0.1\"},\"84\":{\"summary\":\"Field that stores an integer\",\"core\":true,\"versionStr\":\"1.0.2\"},\"168\":{\"summary\":\"Field that stores a decimal number\",\"core\":true,\"versionStr\":\"0.0.1\"},\"106\":{\"summary\":\"Close a fieldset opened by FieldsetOpen. \",\"core\":true,\"versionStr\":\"1.0.0\"},\"165\":{\"summary\":\"Field that stores single and multi select options.\",\"core\":true,\"versionStr\":\"0.0.2\"},\"133\":{\"summary\":\"Field that stores a hashed and salted password\",\"core\":true,\"versionStr\":\"1.0.1\"},\"97\":{\"summary\":\"This Fieldtype stores an ON\\/OFF toggle via a single checkbox. The ON value is 1 and OFF value is 0.\",\"core\":true,\"versionStr\":\"1.0.1\"},\"89\":{\"summary\":\"Field that stores a floating point number\",\"core\":true,\"versionStr\":\"1.0.7\"},\"3\":{\"summary\":\"Field that stores a single line of text\",\"core\":true,\"versionStr\":\"1.0.2\"},\"107\":{\"summary\":\"Open a fieldset to group fields. Same as Fieldset (Open) except that it displays in a tab instead.\",\"core\":true,\"versionStr\":\"1.0.0\"},\"29\":{\"summary\":\"Field that stores an e-mail address\",\"core\":true,\"versionStr\":\"1.0.1\"},\"28\":{\"summary\":\"Field that stores a date and optionally time\",\"core\":true,\"versionStr\":\"1.0.5\"},\"160\":{\"summary\":\"Uikit v3 admin theme\",\"core\":true,\"versionStr\":\"0.3.4\"},\"148\":{\"summary\":\"Minimal admin theme that supports all ProcessWire features.\",\"core\":true,\"versionStr\":\"0.1.4\"},\"114\":{\"summary\":\"Adds various permission methods to Page objects that are used by Process modules.\",\"core\":true,\"versionStr\":\"1.0.5\"},\"85\":{\"summary\":\"Integer (positive or negative)\",\"core\":true,\"versionStr\":\"1.0.5\"},\"108\":{\"summary\":\"URL in valid format\",\"core\":true,\"versionStr\":\"1.0.3\"},\"40\":{\"summary\":\"Hidden value in a form\",\"core\":true,\"versionStr\":\"1.0.1\"},\"90\":{\"summary\":\"Floating point number with precision\",\"core\":true,\"versionStr\":\"1.0.5\"},\"38\":{\"summary\":\"Multiple checkbox toggles\",\"core\":true,\"versionStr\":\"1.0.8\"},\"36\":{\"summary\":\"Selection of a single value from a select pulldown\",\"core\":true,\"versionStr\":\"1.0.3\"},\"78\":{\"summary\":\"Groups one or more fields together in a container\",\"core\":true,\"versionStr\":\"1.0.1\"},\"56\":{\"summary\":\"One or more image uploads (sortable)\",\"core\":true,\"versionStr\":\"1.2.8\"},\"35\":{\"summary\":\"Multiple lines of text\",\"core\":true,\"versionStr\":\"1.0.3\"},\"55\":{\"summary\":\"One or more file uploads (sortable)\",\"core\":true,\"versionStr\":\"1.2.8\"},\"164\":{\"summary\":\"A toggle providing similar input capability to a checkbox but much more configurable.\",\"core\":true,\"versionStr\":\"0.0.1\"},\"131\":{\"summary\":\"Form button element that you can optionally pass an href attribute to.\",\"core\":true,\"versionStr\":\"1.0.0\"},\"25\":{\"summary\":\"Multiple selection, progressive enhancement to select multiple\",\"core\":true,\"versionStr\":\"2.0.3\"},\"60\":{\"summary\":\"Select one or more pages\",\"core\":true,\"versionStr\":\"1.0.9\"},\"80\":{\"summary\":\"E-Mail address in valid format\",\"core\":true,\"versionStr\":\"1.0.2\"},\"86\":{\"summary\":\"Text input validated as a ProcessWire Page name field\",\"core\":true,\"versionStr\":\"1.0.6\"},\"94\":{\"summary\":\"Inputfield that accepts date and optionally time\",\"core\":true,\"versionStr\":\"1.0.7\"},\"155\":{\"summary\":\"CKEditor textarea rich text editor.\",\"core\":true,\"versionStr\":\"1.7.2\"},\"34\":{\"summary\":\"Single line of text\",\"core\":true,\"versionStr\":\"1.0.6\"},\"37\":{\"summary\":\"Single checkbox toggle\",\"core\":true,\"versionStr\":\"1.0.6\"},\"79\":{\"summary\":\"Contains any other markup and optionally child Inputfields\",\"core\":true,\"versionStr\":\"1.0.2\"},\"43\":{\"summary\":\"Select multiple items from a list\",\"core\":true,\"versionStr\":\"1.0.1\"},\"162\":{\"summary\":\"Select an icon\",\"core\":true,\"versionStr\":\"0.0.3\"},\"39\":{\"summary\":\"Radio buttons for selection of a single item\",\"core\":true,\"versionStr\":\"1.0.6\"},\"112\":{\"summary\":\"Handles input of Page Title and auto-generation of Page Name (when name is blank)\",\"core\":true,\"versionStr\":\"1.0.2\"},\"122\":{\"summary\":\"Password input with confirmation field that doesn't ever echo the input back.\",\"core\":true,\"versionStr\":\"1.0.2\"},\"169\":{\"summary\":\"Multiple Page selection using auto completion and sorting capability. Intended for use as an input field for Page reference fields.\",\"core\":true,\"versionStr\":\"1.1.3\"},\"149\":{\"summary\":\"Build a page finding selector visually.\",\"author\":\"Avoine + ProcessWire\",\"core\":true,\"versionStr\":\"0.2.8\"},\"32\":{\"summary\":\"Form submit button\",\"core\":true,\"versionStr\":\"1.0.3\"},\"191\":{\"summary\":\"TinyMCE rich text editor version 6.8.2.\",\"core\":true,\"versionStr\":\"6.1.8\"},\"163\":{\"summary\":\"Enables input of user entered tags or selection of predefined tags.\",\"core\":true,\"versionStr\":\"0.0.6\"},\"30\":{\"summary\":\"Contains one or more fields in a form\",\"core\":true,\"versionStr\":\"1.0.7\"},\"15\":{\"summary\":\"Selection of a single page from a ProcessWire page tree list\",\"core\":true,\"versionStr\":\"1.0.1\"},\"137\":{\"summary\":\"Selection of multiple pages from a ProcessWire page tree list\",\"core\":true,\"versionStr\":\"1.0.3\"},\"41\":{\"summary\":\"Text input validated as a ProcessWire name field\",\"core\":true,\"versionStr\":\"1.0.0\"},\"50\":{\"summary\":\"List, edit or install\\/uninstall modules\",\"core\":true,\"versionStr\":\"1.2.1\"},\"170\":{\"summary\":\"Provides ability to clone\\/copy\\/duplicate pages in the admin. Adds a "copy" option to all applicable pages in the PageList.\",\"core\":true,\"versionStr\":\"1.0.4\",\"permissions\":{\"page-clone\":\"Clone a page\",\"page-clone-tree\":\"Clone a tree of pages\"},\"page\":{\"name\":\"clone\",\"title\":\"Clone\",\"parent\":\"page\",\"status\":1024}},\"48\":{\"summary\":\"Edit individual fields that hold page data\",\"core\":true,\"versionStr\":\"1.1.4\",\"searchable\":\"fields\"},\"136\":{\"summary\":\"Manage system permissions\",\"core\":true,\"versionStr\":\"1.0.1\"},\"121\":{\"summary\":\"Provides a link capability as used by some Fieldtype modules (like rich text editors).\",\"core\":true,\"versionStr\":\"1.1.2\"},\"161\":{\"summary\":\"View and manage system logs.\",\"author\":\"Ryan Cramer\",\"core\":true,\"versionStr\":\"0.0.2\",\"permissions\":{\"logs-view\":\"Can view system logs\",\"logs-edit\":\"Can manage system logs\"},\"page\":{\"name\":\"logs\",\"parent\":\"setup\",\"title\":\"Logs\"}},\"150\":{\"summary\":\"Admin tool for finding and listing pages by any property.\",\"author\":\"Ryan Cramer\",\"core\":true,\"versionStr\":\"0.2.6\",\"permissions\":{\"page-lister\":\"Use Page Lister\"}},\"87\":{\"summary\":\"Acts as a placeholder Process for the admin root. Ensures proper flow control after login.\",\"core\":true,\"versionStr\":\"1.0.1\"},\"68\":{\"summary\":\"Manage user roles and what permissions are attached\",\"core\":true,\"versionStr\":\"1.0.4\"},\"83\":{\"summary\":\"All page views are routed through this Process\",\"core\":true,\"versionStr\":\"1.0.6\"},\"104\":{\"summary\":\"Provides a page search engine for admin use.\",\"core\":true,\"versionStr\":\"1.0.8\"},\"12\":{\"summary\":\"List pages in a hierarchical tree structure\",\"core\":true,\"versionStr\":\"1.2.4\"},\"134\":{\"summary\":\"List, Edit and Add pages of a specific type\",\"core\":true,\"versionStr\":\"1.0.1\"},\"7\":{\"summary\":\"Edit a Page\",\"core\":true,\"versionStr\":\"1.1.2\"},\"129\":{\"summary\":\"Provides image manipulation functions for image fields and rich text editors.\",\"core\":true,\"versionStr\":\"1.2.1\"},\"76\":{\"summary\":\"Lists the Process assigned to each child page of the current\",\"core\":true,\"versionStr\":\"1.0.1\"},\"14\":{\"summary\":\"Handles page sorting and moving for PageList\",\"core\":true,\"versionStr\":\"1.0.1\"},\"66\":{\"summary\":\"Manage system users\",\"core\":true,\"versionStr\":\"1.0.7\",\"searchable\":\"users\"},\"10\":{\"summary\":\"Login to ProcessWire\",\"core\":true,\"versionStr\":\"1.0.9\"},\"109\":{\"summary\":\"Handles emptying of Page trash\",\"core\":true,\"versionStr\":\"1.0.3\"},\"159\":{\"summary\":\"Shows a list of recently edited pages in your admin.\",\"author\":\"Ryan Cramer\",\"href\":\"http:\\/\\/modules.processwire.com\\/\",\"core\":true,\"versionStr\":\"0.0.2\",\"permissions\":{\"page-edit-recent\":\"Can see recently edited pages\"},\"page\":{\"name\":\"recent-pages\",\"parent\":\"page\",\"title\":\"Recent\"}},\"47\":{\"summary\":\"List and edit the templates that control page output\",\"core\":true,\"versionStr\":\"1.1.4\",\"searchable\":\"templates\"},\"17\":{\"summary\":\"Add a new page\",\"core\":true,\"versionStr\":\"1.0.9\"},\"138\":{\"summary\":\"Enables user to change their password, email address and other settings that you define.\",\"core\":true,\"versionStr\":\"1.0.5\"},\"125\":{\"summary\":\"Throttles login attempts to help prevent dictionary attacks.\",\"core\":true,\"versionStr\":\"1.0.3\"},\"221\":{\"summary\":\"Create a site profile that can be used for a fresh install of ProcessWire.\",\"versionStr\":\"4.0.1\",\"page\":{\"name\":\"export-site-profile\",\"parent\":\"setup\"}}}', '2023-08-27 12:19:00'); 721 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('174', '.ModulesUninstalled.info', '8192', '{\"PageFrontEdit\":{\"name\":\"PageFrontEdit\",\"title\":\"Front-End Page Editor\",\"version\":6,\"versionStr\":\"0.0.6\",\"author\":\"Ryan Cramer\",\"summary\":\"Enables front-end editing of page fields.\",\"icon\":\"cube\",\"permissions\":{\"page-edit-front\":\"Use the front-end page editor\"},\"autoload\":true,\"created\":1700065790,\"installed\":false,\"configurable\":\"PageFrontEditConfig.php\",\"core\":true,\"license\":\"MPL 2.0\"},\"FieldtypePageTitleLanguage\":{\"name\":\"FieldtypePageTitleLanguage\",\"title\":\"Page Title (Multi-Language)\",\"version\":100,\"versionStr\":\"1.0.0\",\"author\":\"Ryan Cramer\",\"summary\":\"Field that stores a page title in multiple languages. Use this only if you want title inputs created for ALL languages on ALL pages. Otherwise create separate languaged-named title fields, i.e. title_fr, title_es, title_fi, etc. \",\"requiresVersions\":{\"LanguageSupportFields\":[\">=\",0],\"FieldtypeTextLanguage\":[\">=\",0]},\"created\":1596218034,\"installed\":false,\"core\":true},\"LanguageSupportFields\":{\"name\":\"LanguageSupportFields\",\"title\":\"Languages Support - Fields\",\"version\":101,\"versionStr\":\"1.0.1\",\"author\":\"Ryan Cramer\",\"summary\":\"Required to use multi-language fields.\",\"requiresVersions\":{\"LanguageSupport\":[\">=\",0]},\"installs\":[\"FieldtypePageTitleLanguage\",\"FieldtypeTextareaLanguage\",\"FieldtypeTextLanguage\"],\"autoload\":true,\"singular\":true,\"created\":1673029402,\"installed\":false,\"core\":true},\"FieldtypeTextLanguage\":{\"name\":\"FieldtypeTextLanguage\",\"title\":\"Text (Multi-language)\",\"version\":100,\"versionStr\":\"1.0.0\",\"summary\":\"Field that stores a single line of text in multiple languages\",\"requiresVersions\":{\"LanguageSupportFields\":[\">=\",0]},\"created\":1694530836,\"installed\":false,\"core\":true},\"LanguageTabs\":{\"name\":\"LanguageTabs\",\"title\":\"Languages Support - Tabs\",\"version\":117,\"versionStr\":\"1.1.7\",\"author\":\"adamspruijt, ryan, flipzoom\",\"summary\":\"Organizes multi-language fields into tabs for a cleaner easier to use interface.\",\"requiresVersions\":{\"LanguageSupport\":[\">=\",0]},\"autoload\":\"template=admin\",\"singular\":true,\"created\":1692385257,\"installed\":false,\"configurable\":4,\"core\":true},\"FieldtypeTextareaLanguage\":{\"name\":\"FieldtypeTextareaLanguage\",\"title\":\"Textarea (Multi-language)\",\"version\":100,\"versionStr\":\"1.0.0\",\"summary\":\"Field that stores a multiple lines of text in multiple languages\",\"requiresVersions\":{\"LanguageSupportFields\":[\">=\",0]},\"created\":1692385257,\"installed\":false,\"core\":true},\"LanguageSupport\":{\"name\":\"LanguageSupport\",\"title\":\"Languages Support\",\"version\":104,\"versionStr\":\"1.0.4\",\"author\":\"Ryan Cramer\",\"summary\":\"ProcessWire multi-language support.\",\"installs\":[\"ProcessLanguage\",\"ProcessLanguageTranslator\"],\"autoload\":true,\"singular\":true,\"created\":1707415922,\"installed\":false,\"configurable\":3,\"core\":true,\"addFlag\":32},\"LanguageSupportPageNames\":{\"name\":\"LanguageSupportPageNames\",\"title\":\"Languages Support - Page Names\",\"version\":14,\"versionStr\":\"0.1.4\",\"author\":\"Ryan Cramer\",\"summary\":\"Required to use multi-language page names.\",\"requiresVersions\":{\"LanguageSupport\":[\">=\",0],\"LanguageSupportFields\":[\">=\",0]},\"autoload\":true,\"singular\":true,\"created\":1708524221,\"installed\":false,\"configurable\":4,\"core\":true},\"ProcessLanguageTranslator\":{\"name\":\"ProcessLanguageTranslator\",\"title\":\"Language Translator\",\"version\":103,\"versionStr\":\"1.0.3\",\"author\":\"Ryan Cramer\",\"summary\":\"Provides language translation capabilities for ProcessWire core and modules.\",\"requiresVersions\":{\"LanguageSupport\":[\">=\",0]},\"permission\":\"lang-edit\",\"created\":1692385257,\"installed\":false,\"configurable\":4,\"core\":true},\"ProcessLanguage\":{\"name\":\"ProcessLanguage\",\"title\":\"Languages\",\"version\":103,\"versionStr\":\"1.0.3\",\"author\":\"Ryan Cramer\",\"summary\":\"Manage system languages\",\"icon\":\"language\",\"requiresVersions\":{\"LanguageSupport\":[\">=\",0]},\"permission\":\"lang-edit\",\"permissions\":{\"lang-edit\":\"Administer languages and static translation files\"},\"created\":1694530836,\"installed\":false,\"configurable\":3,\"core\":true,\"useNavJSON\":true},\"TextformatterSmartypants\":{\"name\":\"TextformatterSmartypants\",\"title\":\"SmartyPants Typographer\",\"version\":171,\"versionStr\":\"1.7.1\",\"summary\":\"Smart typography for web sites, by Michel Fortin based on SmartyPants by John Gruber. If combined with Markdown, it should be applied AFTER Markdown.\",\"created\":1694530836,\"installed\":false,\"configurable\":4,\"core\":true,\"url\":\"https:\\/\\/github.com\\/michelf\\/php-smartypants\"},\"TextformatterMarkdownExtra\":{\"name\":\"TextformatterMarkdownExtra\",\"title\":\"Markdown\\/Parsedown Extra\",\"version\":180,\"versionStr\":\"1.8.0\",\"summary\":\"Markdown\\/Parsedown extra lightweight markup language by Emanuil Rusev. Based on Markdown by John Gruber.\",\"created\":1630062055,\"installed\":false,\"configurable\":4,\"core\":true},\"TextformatterPstripper\":{\"name\":\"TextformatterPstripper\",\"title\":\"Paragraph Stripper\",\"version\":100,\"versionStr\":\"1.0.0\",\"summary\":\"Strips paragraph

tags that may have been applied by other text formatters before it. \",\"created\":1542749687,\"installed\":false,\"core\":true},\"TextformatterStripTags\":{\"name\":\"TextformatterStripTags\",\"title\":\"Strip Markup Tags\",\"version\":100,\"versionStr\":\"1.0.0\",\"summary\":\"Strips HTML\\/XHTML Markup Tags\",\"created\":1694530836,\"installed\":false,\"configurable\":3,\"core\":true},\"TextformatterNewlineBR\":{\"name\":\"TextformatterNewlineBR\",\"title\":\"Newlines to XHTML Line Breaks\",\"version\":100,\"versionStr\":\"1.0.0\",\"summary\":\"Converts newlines to XHTML line break
tags. \",\"created\":1542749687,\"installed\":false,\"core\":true},\"TextformatterNewlineUL\":{\"name\":\"TextformatterNewlineUL\",\"title\":\"Newlines to Unordered List\",\"version\":100,\"versionStr\":\"1.0.0\",\"summary\":\"Converts newlines to

  • list items and surrounds in an
      unordered list. \",\"created\":1542749687,\"installed\":false,\"core\":true},\"PagePathHistory\":{\"name\":\"PagePathHistory\",\"title\":\"Page Path History\",\"version\":8,\"versionStr\":\"0.0.8\",\"summary\":\"Keeps track of past URLs where pages have lived and automatically redirects (301 permanent) to the new location whenever the past URL is accessed.\",\"autoload\":true,\"singular\":true,\"created\":1708445203,\"installed\":false,\"configurable\":4,\"core\":true},\"LazyCron\":{\"name\":\"LazyCron\",\"title\":\"Lazy Cron\",\"version\":104,\"versionStr\":\"1.0.4\",\"summary\":\"Provides hooks that are automatically executed at various intervals. It is called \'lazy\' because it\'s triggered by a pageview, so the interval is guaranteed to be at least the time requested, rather than exactly the time requested. This is fine for most cases, but you can make it not lazy by connecting this to a real CRON job. See the module file for details. \",\"href\":\"https:\\/\\/processwire.com\\/api\\/modules\\/lazy-cron\\/\",\"autoload\":true,\"singular\":true,\"created\":1707320342,\"installed\":false,\"core\":true},\"ImageSizerEngineIMagick\":{\"name\":\"ImageSizerEngineIMagick\",\"title\":\"IMagick Image Sizer\",\"version\":3,\"versionStr\":\"0.0.3\",\"author\":\"Horst Nogajski\",\"summary\":\"Upgrades image manipulations to use PHP\'s ImageMagick library when possible.\",\"created\":1706896849,\"installed\":false,\"configurable\":4,\"core\":true},\"ImageSizerEngineAnimatedGif\":{\"name\":\"ImageSizerEngineAnimatedGif\",\"title\":\"Animated GIF Image Sizer\",\"version\":1,\"versionStr\":\"0.0.1\",\"author\":\"Horst Nogajski\",\"summary\":\"Upgrades image manipulations for animated GIFs.\",\"created\":1577984826,\"installed\":false,\"configurable\":4,\"core\":true},\"SystemNotifications\":{\"name\":\"SystemNotifications\",\"title\":\"System Notifications\",\"version\":12,\"versionStr\":\"0.1.2\",\"summary\":\"Adds support for notifications in ProcessWire (currently in development)\",\"icon\":\"bell\",\"installs\":[\"FieldtypeNotifications\"],\"autoload\":true,\"created\":1630062055,\"installed\":false,\"configurable\":\"SystemNotificationsConfig.php\",\"core\":true},\"FieldtypeNotifications\":{\"name\":\"FieldtypeNotifications\",\"title\":\"Notifications\",\"version\":4,\"versionStr\":\"0.0.4\",\"summary\":\"Field that stores user notifications.\",\"requiresVersions\":{\"SystemNotifications\":[\">=\",0]},\"created\":1542749687,\"installed\":false,\"core\":true},\"MarkupCache\":{\"name\":\"MarkupCache\",\"title\":\"Markup Cache\",\"version\":101,\"versionStr\":\"1.0.1\",\"summary\":\"A simple way to cache segments of markup in your templates. \",\"href\":\"https:\\/\\/processwire.com\\/api\\/modules\\/markupcache\\/\",\"autoload\":true,\"singular\":true,\"created\":1542749687,\"installed\":false,\"configurable\":3,\"core\":true},\"MarkupPageFields\":{\"name\":\"MarkupPageFields\",\"title\":\"Markup Page Fields\",\"version\":100,\"versionStr\":\"1.0.0\",\"summary\":\"Adds $page->renderFields() and $page->images->render() methods that return basic markup for output during development and debugging.\",\"autoload\":true,\"singular\":true,\"created\":1542749687,\"installed\":false,\"core\":true,\"permanent\":true},\"MarkupRSS\":{\"name\":\"MarkupRSS\",\"title\":\"Markup RSS Feed\",\"version\":105,\"versionStr\":\"1.0.5\",\"summary\":\"Renders an RSS feed. Given a PageArray, renders an RSS feed of them.\",\"icon\":\"rss-square\",\"created\":1692385257,\"installed\":false,\"configurable\":3,\"core\":true},\"FieldtypeCache\":{\"name\":\"FieldtypeCache\",\"title\":\"Cache\",\"version\":102,\"versionStr\":\"1.0.2\",\"summary\":\"Caches the values of other fields for fewer runtime queries. Can also be used to combine multiple text fields and have them all be searchable under the cached field name.\",\"created\":1662299679,\"installed\":false,\"core\":true},\"FieldtypePageTable\":{\"name\":\"FieldtypePageTable\",\"title\":\"ProFields: Page Table\",\"version\":8,\"versionStr\":\"0.0.8\",\"summary\":\"A fieldtype containing a group of editable pages.\",\"installs\":[\"InputfieldPageTable\"],\"autoload\":true,\"created\":1705083680,\"installed\":false,\"core\":true},\"FieldtypeFieldsetPage\":{\"name\":\"FieldtypeFieldsetPage\",\"title\":\"Fieldset (Page)\",\"version\":1,\"versionStr\":\"0.0.1\",\"summary\":\"Fieldset with fields isolated to separate namespace (page), enabling re-use of fields.\",\"requiresVersions\":{\"FieldtypeRepeater\":[\">=\",0]},\"autoload\":true,\"created\":1705083689,\"installed\":false,\"configurable\":3,\"core\":true},\"FieldtypeSelector\":{\"name\":\"FieldtypeSelector\",\"title\":\"Selector\",\"version\":13,\"versionStr\":\"0.1.3\",\"author\":\"Avoine + ProcessWire\",\"summary\":\"Build a page finding selector visually.\",\"created\":1692988389,\"installed\":false,\"core\":true},\"FieldtypeComments\":{\"name\":\"FieldtypeComments\",\"title\":\"Comments\",\"version\":110,\"versionStr\":\"1.1.0\",\"summary\":\"Field that stores user posted comments for a single Page\",\"installs\":[\"InputfieldCommentsAdmin\"],\"created\":1692385257,\"installed\":false,\"core\":true},\"InputfieldCommentsAdmin\":{\"name\":\"InputfieldCommentsAdmin\",\"title\":\"Comments Admin\",\"version\":104,\"versionStr\":\"1.0.4\",\"summary\":\"Provides an administrative interface for working with comments\",\"requiresVersions\":{\"FieldtypeComments\":[\">=\",0]},\"created\":1679500890,\"installed\":false,\"core\":true},\"CommentFilterAkismet\":{\"name\":\"CommentFilterAkismet\",\"title\":\"Comment Filter: Akismet\",\"version\":200,\"versionStr\":\"2.0.0\",\"summary\":\"Uses the Akismet service to identify comment spam. Module plugin for the Comments Fieldtype.\",\"requiresVersions\":{\"FieldtypeComments\":[\">=\",0]},\"created\":1555593922,\"installed\":false,\"configurable\":3,\"core\":true},\"FieldtypeToggle\":{\"name\":\"FieldtypeToggle\",\"title\":\"Toggle (Yes\\/No)\",\"version\":1,\"versionStr\":\"0.0.1\",\"summary\":\"Configurable yes\\/no, on\\/off toggle alternative to a checkbox, plus optional \\u201cother\\u201d option.\",\"requiresVersions\":{\"InputfieldToggle\":[\">=\",0]},\"created\":1709226072,\"installed\":false,\"core\":true},\"AdminThemeReno\":{\"name\":\"AdminThemeReno\",\"title\":\"Reno\",\"version\":17,\"versionStr\":\"0.1.7\",\"author\":\"Tom Reno (Renobird)\",\"summary\":\"Admin theme for ProcessWire 2.5+ by Tom Reno (Renobird)\",\"requiresVersions\":{\"AdminThemeDefault\":[\">=\",0]},\"autoload\":\"template=admin\",\"created\":1692385257,\"installed\":false,\"configurable\":3,\"core\":true},\"InputfieldPageTable\":{\"name\":\"InputfieldPageTable\",\"title\":\"ProFields: Page Table\",\"version\":14,\"versionStr\":\"0.1.4\",\"summary\":\"Inputfield to accompany FieldtypePageTable\",\"requiresVersions\":{\"FieldtypePageTable\":[\">=\",0]},\"created\":1703264426,\"installed\":false,\"core\":true},\"InputfieldTinyMCE\":{\"name\":\"InputfieldTinyMCE\",\"title\":\"TinyMCE\",\"version\":618,\"versionStr\":\"6.1.8\",\"summary\":\"TinyMCE rich text editor version 6.8.2.\",\"icon\":\"keyboard-o\",\"requiresVersions\":{\"ProcessWire\":[\">=\",\"3.0.200\"],\"MarkupHTMLPurifier\":[\">=\",0]},\"created\":1706294191,\"installed\":false,\"configurable\":4,\"core\":true},\"PagePaths\":{\"name\":\"PagePaths\",\"title\":\"Page Paths\",\"version\":4,\"versionStr\":\"0.0.4\",\"summary\":\"Enables page paths\\/urls to be queryable by selectors. Also offers potential for improved load performance. Builds an index at install (may take time on a large site).\",\"autoload\":true,\"singular\":true,\"created\":1694530836,\"installed\":false,\"configurable\":4,\"core\":true},\"FileCompilerTags\":{\"name\":\"FileCompilerTags\",\"title\":\"Tags File Compiler\",\"version\":1,\"versionStr\":\"0.0.1\",\"summary\":\"Enables {var} or {var.property} variables in markup sections of a file. Can be used with any API variable.\",\"created\":1542749687,\"installed\":false,\"configurable\":4,\"core\":true},\"ProcessForgotPassword\":{\"name\":\"ProcessForgotPassword\",\"title\":\"Forgot Password\",\"version\":104,\"versionStr\":\"1.0.4\",\"summary\":\"Provides password reset\\/email capability for the Login process.\",\"permission\":\"page-view\",\"created\":1673029402,\"installed\":false,\"configurable\":4,\"core\":true},\"ProcessCommentsManager\":{\"name\":\"ProcessCommentsManager\",\"title\":\"Comments\",\"version\":12,\"versionStr\":\"0.1.2\",\"author\":\"Ryan Cramer\",\"summary\":\"Manage comments in your site outside of the page editor.\",\"icon\":\"comments\",\"requiresVersions\":{\"FieldtypeComments\":[\">=\",0]},\"permission\":\"comments-manager\",\"permissions\":{\"comments-manager\":\"Use the comments manager\"},\"created\":1700054804,\"installed\":false,\"searchable\":\"comments\",\"core\":true,\"page\":{\"name\":\"comments\",\"parent\":\"setup\",\"title\":\"Comments\"},\"nav\":[{\"url\":\"?go=approved\",\"label\":\"Approved\"},{\"url\":\"?go=pending\",\"label\":\"Pending\"},{\"url\":\"?go=spam\",\"label\":\"Spam\"},{\"url\":\"?go=all\",\"label\":\"All\"}]},\"ProcessPagesExportImport\":{\"name\":\"ProcessPagesExportImport\",\"title\":\"Pages Export\\/Import\",\"version\":1,\"versionStr\":\"0.0.1\",\"author\":\"Ryan Cramer\",\"summary\":\"Enables exporting and importing of pages. Development version, not yet recommended for production use.\",\"icon\":\"paper-plane-o\",\"permission\":\"page-edit-export\",\"created\":1674140726,\"installed\":false,\"core\":true,\"page\":{\"name\":\"export-import\",\"parent\":\"page\",\"title\":\"Export\\/Import\"}},\"ProcessSessionDB\":{\"name\":\"ProcessSessionDB\",\"title\":\"Sessions\",\"version\":5,\"versionStr\":\"0.0.5\",\"summary\":\"Enables you to browse active database sessions.\",\"icon\":\"dashboard\",\"requiresVersions\":{\"SessionHandlerDB\":[\">=\",0]},\"created\":1692385257,\"installed\":false,\"core\":true,\"page\":{\"name\":\"sessions-db\",\"parent\":\"access\",\"title\":\"Sessions\"}},\"SessionHandlerDB\":{\"name\":\"SessionHandlerDB\",\"title\":\"Session Handler Database\",\"version\":6,\"versionStr\":\"0.0.6\",\"summary\":\"Installing this module makes ProcessWire store sessions in the database rather than the file system. Note that this module will log you out after install or uninstall.\",\"installs\":[\"ProcessSessionDB\"],\"created\":1630062055,\"installed\":false,\"configurable\":3,\"core\":true},\"PagesVersions\":{\"name\":\"PagesVersions\",\"title\":\"Pages Versions\",\"version\":2,\"versionStr\":\"0.0.2\",\"author\":\"Ryan Cramer\",\"summary\":\"Provides a version control API for pages in ProcessWire.\",\"icon\":\"code-fork\",\"autoload\":true,\"singular\":true,\"created\":1708698171,\"installed\":false,\"core\":true},\"ProcessDatabaseBackups\":{\"name\":\"ProcessDatabaseBackups\",\"title\":\"Database Backups\",\"version\":6,\"versionStr\":\"0.0.6\",\"author\":\"Ryan Cramer\",\"summary\":\"Create and\\/or restore database backups from ProcessWire admin.\",\"icon\":\"database\",\"requiresVersions\":{\"ProcessWire\":[\">=\",\"3.0.62\"]},\"permission\":\"db-backup\",\"permissions\":{\"db-backup\":\"Manage database backups (recommended for superuser only)\"},\"created\":1668793008,\"installed\":false,\"page\":{\"name\":\"db-backups\",\"parent\":\"setup\",\"title\":\"DB Backups\"},\"nav\":[{\"url\":\".\\/\",\"label\":\"View\",\"icon\":\"list\"},{\"url\":\"backup\\/\",\"label\":\"Backup\",\"icon\":\"plus-circle\"},{\"url\":\"upload\\/\",\"label\":\"Upload\",\"icon\":\"cloud-upload\"}]},\"FileValidatorSvgSanitizer\":{\"name\":\"FileValidatorSvgSanitizer\",\"title\":\"SVG File Sanitizer\\/Validator\",\"version\":5,\"versionStr\":\"0.0.5\",\"author\":\"Adrian and Ryan\",\"summary\":\"Validates and\\/or sanitizes uploaded SVG files.\",\"requiresVersions\":{\"ProcessWire\":[\">=\",\"3.0.148\"]},\"created\":1709918112,\"installed\":false,\"configurable\":\"FileValidatorSvgSanitizer.config.php\",\"validates\":[\"svg\"]}}', '2023-08-27 12:19:00'); 722 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('175', '.ModulesVersions.info', '8192', '{\"121\":109,\"104\":107,\"129\":120,\"14\":100}', '2023-08-27 12:19:00'); 723 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('177', '.Modules.wire/modules/', '8192', 'Page/PageFrontEdit/PageFrontEdit.module\nLanguageSupport/FieldtypePageTitleLanguage.module\nLanguageSupport/LanguageSupportFields.module\nLanguageSupport/FieldtypeTextLanguage.module\nLanguageSupport/LanguageTabs.module\nLanguageSupport/FieldtypeTextareaLanguage.module\nLanguageSupport/LanguageSupport.module\nLanguageSupport/LanguageSupportPageNames.module\nLanguageSupport/ProcessLanguageTranslator.module\nLanguageSupport/ProcessLanguage.module\nTextformatter/TextformatterSmartypants/TextformatterSmartypants.module\nTextformatter/TextformatterMarkdownExtra/TextformatterMarkdownExtra.module\nTextformatter/TextformatterPstripper.module\nTextformatter/TextformatterStripTags.module\nTextformatter/TextformatterEntities.module\nTextformatter/TextformatterNewlineBR.module\nTextformatter/TextformatterNewlineUL.module\nPagePathHistory.module\nJquery/JqueryUI/JqueryUI.module\nJquery/JqueryTableSorter/JqueryTableSorter.module\nJquery/JqueryCore/JqueryCore.module\nJquery/JqueryWireTabs/JqueryWireTabs.module\nJquery/JqueryMagnific/JqueryMagnific.module\nLazyCron.module\nImage/ImageSizerEngineIMagick/ImageSizerEngineIMagick.module\nImage/ImageSizerEngineAnimatedGif/ImageSizerEngineAnimatedGif.module\nSystem/SystemUpdater/SystemUpdater.module\nSystem/SystemNotifications/SystemNotifications.module\nSystem/SystemNotifications/FieldtypeNotifications.module\nMarkup/MarkupCache.module\nMarkup/MarkupPageArray.module\nMarkup/MarkupHTMLPurifier/MarkupHTMLPurifier.module\nMarkup/MarkupPagerNav/MarkupPagerNav.module\nMarkup/MarkupPageFields.module\nMarkup/MarkupAdminDataTable/MarkupAdminDataTable.module\nMarkup/MarkupRSS.module\nPageRender.module\nFieldtype/FieldtypeImage/FieldtypeImage.module\nFieldtype/FieldtypeFieldsetOpen.module\nFieldtype/FieldtypeCache.module\nFieldtype/FieldtypeFile/FieldtypeFile.module\nFieldtype/FieldtypePage.module\nFieldtype/FieldtypeTextarea.module\nFieldtype/FieldtypePageTable.module\nFieldtype/FieldtypeModule.module\nFieldtype/FieldtypeRepeater/FieldtypeFieldsetPage.module\nFieldtype/FieldtypeRepeater/FieldtypeRepeater.module\nFieldtype/FieldtypeRepeater/InputfieldRepeater.module\nFieldtype/FieldtypePageTitle.module\nFieldtype/FieldtypeURL.module\nFieldtype/FieldtypeInteger.module\nFieldtype/FieldtypeDecimal.module\nFieldtype/FieldtypeFieldsetClose.module\nFieldtype/FieldtypeOptions/FieldtypeOptions.module\nFieldtype/FieldtypePassword.module\nFieldtype/FieldtypeCheckbox.module\nFieldtype/FieldtypeFloat.module\nFieldtype/FieldtypeSelector.module\nFieldtype/FieldtypeComments/FieldtypeComments.module\nFieldtype/FieldtypeComments/InputfieldCommentsAdmin.module\nFieldtype/FieldtypeComments/CommentFilterAkismet.module\nFieldtype/FieldtypeText.module\nFieldtype/FieldtypeFieldsetTabOpen.module\nFieldtype/FieldtypeToggle.module\nFieldtype/FieldtypeEmail.module\nFieldtype/FieldtypeDatetime.module\nAdminTheme/AdminThemeReno/AdminThemeReno.module\nAdminTheme/AdminThemeUikit/AdminThemeUikit.module\nAdminTheme/AdminThemeDefault/AdminThemeDefault.module\nPagePermissions.module\nInputfield/InputfieldInteger.module\nInputfield/InputfieldURL.module\nInputfield/InputfieldHidden.module\nInputfield/InputfieldPageTable/InputfieldPageTable.module\nInputfield/InputfieldFloat.module\nInputfield/InputfieldCheckboxes/InputfieldCheckboxes.module\nInputfield/InputfieldSelect.module\nInputfield/InputfieldFieldset.module\nInputfield/InputfieldImage/InputfieldImage.module\nInputfield/InputfieldTextarea.module\nInputfield/InputfieldFile/InputfieldFile.module\nInputfield/InputfieldToggle/InputfieldToggle.module\nInputfield/InputfieldButton.module\nInputfield/InputfieldAsmSelect/InputfieldAsmSelect.module\nInputfield/InputfieldPage/InputfieldPage.module\nInputfield/InputfieldEmail.module\nInputfield/InputfieldPageName/InputfieldPageName.module\nInputfield/InputfieldDatetime/InputfieldDatetime.module\nInputfield/InputfieldCKEditor/InputfieldCKEditor.module\nInputfield/InputfieldText/InputfieldText.module\nInputfield/InputfieldCheckbox/InputfieldCheckbox.module\nInputfield/InputfieldMarkup.module\nInputfield/InputfieldSelectMultiple.module\nInputfield/InputfieldIcon/InputfieldIcon.module\nInputfield/InputfieldRadios/InputfieldRadios.module\nInputfield/InputfieldPageTitle/InputfieldPageTitle.module\nInputfield/InputfieldPassword/InputfieldPassword.module\nInputfield/InputfieldPageAutocomplete/InputfieldPageAutocomplete.module\nInputfield/InputfieldSelector/InputfieldSelector.module\nInputfield/InputfieldSubmit/InputfieldSubmit.module\nInputfield/InputfieldTinyMCE/InputfieldTinyMCE.module.php\nInputfield/InputfieldTextTags/InputfieldTextTags.module\nInputfield/InputfieldForm.module\nInputfield/InputfieldPageListSelect/InputfieldPageListSelect.module\nInputfield/InputfieldPageListSelect/InputfieldPageListSelectMultiple.module\nInputfield/InputfieldName.module\nPages/PagesVersions/PagesVersions.module.php\nPagePaths.module\nFileCompilerTags.module\nProcess/ProcessModule/ProcessModule.module\nProcess/ProcessPageClone.module\nProcess/ProcessField/ProcessField.module\nProcess/ProcessPermission/ProcessPermission.module\nProcess/ProcessForgotPassword/ProcessForgotPassword.module\nProcess/ProcessPageEditLink/ProcessPageEditLink.module\nProcess/ProcessLogger/ProcessLogger.module\nProcess/ProcessPageLister/ProcessPageLister.module\nProcess/ProcessHome.module\nProcess/ProcessRole/ProcessRole.module\nProcess/ProcessPageView.module\nProcess/ProcessPageSearch/ProcessPageSearch.module\nProcess/ProcessPageList/ProcessPageList.module\nProcess/ProcessPageType/ProcessPageType.module\nProcess/ProcessPageEdit/ProcessPageEdit.module\nProcess/ProcessPageEditImageSelect/ProcessPageEditImageSelect.module\nProcess/ProcessCommentsManager/ProcessCommentsManager.module\nProcess/ProcessList.module\nProcess/ProcessPageSort.module\nProcess/ProcessUser/ProcessUser.module\nProcess/ProcessPagesExportImport/ProcessPagesExportImport.module\nProcess/ProcessLogin/ProcessLogin.module\nProcess/ProcessPageTrash.module\nProcess/ProcessRecentPages/ProcessRecentPages.module\nProcess/ProcessTemplate/ProcessTemplate.module\nProcess/ProcessPageAdd/ProcessPageAdd.module\nProcess/ProcessProfile/ProcessProfile.module\nSession/SessionLoginThrottle/SessionLoginThrottle.module\nSession/SessionHandlerDB/ProcessSessionDB.module\nSession/SessionHandlerDB/SessionHandlerDB.module', '2023-08-27 12:19:00'); 724 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('178', '.Modules.site/modules/', '8192', 'ProcessExportProfile/ProcessExportProfile.module\nFileValidatorSvgSanitizer/FileValidatorSvgSanitizer.module.php', '2023-08-27 12:19:00'); 725 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('191', 'InputfieldTinyMCE', '0', '{\"skin\":\"oxide\",\"skin_url\":\"\",\"content_css\":\"wire\",\"content_css_url\":\"\",\"extPluginOpts\":\"\",\"optionals\":[\"settingsJSON\"],\"headlines\":[\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"],\"contextmenu\":\"default\",\"menubar\":\"default\",\"removed_menuitems\":\"default\",\"styleFormatsCSS\":\"\",\"invalid_styles\":\"default\",\"imageFields\":[],\"extraCSS\":\"\",\"pasteFilter\":\"default\",\"defaultsJSON\":\"\",\"defaultsFile\":\"\",\"debugMode\":0}', '2024-03-06 10:58:38'); 726 | INSERT INTO `modules` (`id`, `class`, `flags`, `data`, `created`) VALUES('198', 'TextformatterMarkdownExtra', '1', '', '2024-03-06 10:59:14'); 727 | 728 | DROP TABLE IF EXISTS `pages`; 729 | CREATE TABLE `pages` ( 730 | `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 731 | `parent_id` int(11) unsigned NOT NULL DEFAULT '0', 732 | `templates_id` int(11) unsigned NOT NULL DEFAULT '0', 733 | `name` varchar(128) CHARACTER SET ascii NOT NULL, 734 | `status` int(10) unsigned NOT NULL DEFAULT '1', 735 | `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 736 | `modified_users_id` int(10) unsigned NOT NULL DEFAULT '2', 737 | `created` timestamp NOT NULL DEFAULT '2015-12-18 06:09:00', 738 | `created_users_id` int(10) unsigned NOT NULL DEFAULT '2', 739 | `published` datetime DEFAULT NULL, 740 | `sort` int(11) NOT NULL DEFAULT '0', 741 | PRIMARY KEY (`id`), 742 | UNIQUE KEY `name_parent_id` (`name`,`parent_id`), 743 | KEY `parent_id` (`parent_id`), 744 | KEY `templates_id` (`templates_id`), 745 | KEY `modified` (`modified`), 746 | KEY `created` (`created`), 747 | KEY `status` (`status`), 748 | KEY `published` (`published`) 749 | ) ENGINE=MyISAM AUTO_INCREMENT=1164 DEFAULT CHARSET=utf8; 750 | 751 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1', '0', '1', 'home', '9', '2024-03-05 13:15:43', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '0'); 752 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('2', '1', '2', 'processwire', '1035', '2022-09-26 10:27:48', '40', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '5'); 753 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('3', '2', '2', 'page', '21', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '0'); 754 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('6', '3', '2', 'add', '21', '2022-09-26 10:27:55', '40', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '1'); 755 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('7', '1', '2', 'trash', '1039', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '6'); 756 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('8', '3', '2', 'list', '21', '2022-09-26 10:27:57', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '0'); 757 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('9', '3', '2', 'sort', '1047', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '3'); 758 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('10', '3', '2', 'edit', '1045', '2022-09-26 10:27:57', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '4'); 759 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('11', '22', '2', 'template', '21', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '0'); 760 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('16', '22', '2', 'field', '21', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '2'); 761 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('21', '2', '2', 'module', '21', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '2'); 762 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('22', '2', '2', 'setup', '21', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '1'); 763 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('23', '2', '2', 'login', '1035', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '4'); 764 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('27', '1', '29', 'http404', '1035', '2024-03-06 11:00:33', '41', '2022-09-26 10:27:31', '3', '2022-09-26 10:27:31', '4'); 765 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('28', '2', '2', 'access', '13', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '3'); 766 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('29', '28', '2', 'users', '29', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '0'); 767 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('30', '28', '2', 'roles', '29', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '1'); 768 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('31', '28', '2', 'permissions', '29', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '2'); 769 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('32', '31', '5', 'page-edit', '25', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '2'); 770 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('34', '31', '5', 'page-delete', '25', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '3'); 771 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('35', '31', '5', 'page-move', '25', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '4'); 772 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('36', '31', '5', 'page-view', '25', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '0'); 773 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('37', '30', '4', 'guest', '25', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '0'); 774 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('38', '30', '4', 'superuser', '25', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '1'); 775 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('40', '29', '3', 'guest', '25', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '1'); 776 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('41', '29', '3', 'admin', '1', '2022-09-26 10:27:48', '40', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '0'); 777 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('50', '31', '5', 'page-sort', '25', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '5'); 778 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('51', '31', '5', 'page-template', '25', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '6'); 779 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('52', '31', '5', 'user-admin', '25', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '10'); 780 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('53', '31', '5', 'profile-edit', '1', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '13'); 781 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('54', '31', '5', 'page-lock', '1', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '8'); 782 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('300', '3', '2', 'search', '1045', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '6'); 783 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('301', '3', '2', 'trash', '1047', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '6'); 784 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('302', '3', '2', 'link', '1041', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '7'); 785 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('303', '3', '2', 'image', '1041', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '8'); 786 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('304', '2', '2', 'profile', '1025', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '41', '2022-09-26 10:27:31', '5'); 787 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1006', '31', '5', 'page-lister', '1', '2022-09-26 10:27:31', '40', '2022-09-26 10:27:31', '40', '2022-09-26 10:27:31', '9'); 788 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1007', '3', '2', 'lister', '1', '2022-09-26 10:27:31', '40', '2022-09-26 10:27:31', '40', '2022-09-26 10:27:31', '9'); 789 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1010', '3', '2', 'recent-pages', '1', '2022-09-26 10:27:48', '40', '2022-09-26 10:27:48', '40', '2022-09-26 10:27:48', '10'); 790 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1011', '31', '5', 'page-edit-recent', '1', '2022-09-26 10:27:48', '40', '2022-09-26 10:27:48', '40', '2022-09-26 10:27:48', '10'); 791 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1012', '22', '2', 'logs', '1', '2022-09-26 10:27:52', '40', '2022-09-26 10:27:52', '40', '2022-09-26 10:27:52', '2'); 792 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1013', '31', '5', 'logs-view', '1', '2022-09-26 10:27:52', '40', '2022-09-26 10:27:52', '40', '2022-09-26 10:27:52', '11'); 793 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1014', '31', '5', 'logs-edit', '1', '2022-09-26 10:27:52', '40', '2022-09-26 10:27:52', '40', '2022-09-26 10:27:52', '12'); 794 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1015', '2', '2', 'repeaters', '1036', '2022-09-26 11:06:27', '41', '2022-09-26 11:06:27', '41', '2022-09-26 11:06:27', '6'); 795 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1016', '1', '45', 'invoices', '1', '2024-03-06 11:03:57', '41', '2022-09-26 11:11:15', '41', '2022-09-26 11:11:15', '3'); 796 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1017', '1', '43', 'clients', '1', '2022-09-30 11:01:54', '41', '2022-09-26 11:12:20', '41', '2022-09-26 11:12:20', '4'); 797 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1018', '1015', '2', 'for-field-106', '17', '2022-10-03 09:45:33', '41', '2022-09-26 11:13:37', '41', '2022-09-26 11:13:37', '0'); 798 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1020', '1', '47', 'settings', '1', '2024-03-08 11:18:55', '41', '2022-09-26 11:34:16', '41', '2022-09-26 11:34:32', '5'); 799 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1027', '1015', '2', 'for-field-110', '17', '2022-10-03 09:57:17', '41', '2022-09-27 10:51:09', '41', '2022-09-27 10:51:09', '1'); 800 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1041', '1016', '46', 'test-invoice', '1', '2024-03-08 11:33:33', '41', '2022-09-28 10:49:14', '41', '2022-09-30 11:41:08', '3'); 801 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1042', '1018', '2', 'for-page-1041', '17', '2022-09-28 10:49:32', '41', '2022-09-28 10:49:32', '41', '2022-09-28 10:49:32', '2'); 802 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1043', '1042', '48', '1664376572-8005-1', '1', '2022-10-03 10:29:19', '41', '2022-09-28 10:49:32', '41', '2022-09-28 10:49:45', '0'); 803 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1044', '3', '2', 'clone', '1024', '2022-09-28 10:51:43', '41', '2022-09-28 10:51:43', '41', '2022-09-28 10:51:43', '10'); 804 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1045', '31', '5', 'page-clone', '1', '2022-09-28 10:51:43', '41', '2022-09-28 10:51:43', '41', '2022-09-28 10:51:43', '13'); 805 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1046', '31', '5', 'page-clone-tree', '1', '2022-09-28 10:51:43', '41', '2022-09-28 10:51:43', '41', '2022-09-28 10:51:43', '14'); 806 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1047', '1016', '46', 'test-invoice-1', '1', '2024-03-08 11:30:10', '41', '2022-09-28 10:51:53', '41', '2022-09-28 10:52:08', '1'); 807 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1048', '1018', '2', 'for-page-1047', '17', '2022-09-28 10:51:53', '41', '2022-09-28 10:51:53', '41', '2022-09-28 10:51:53', '3'); 808 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1049', '1048', '48', '1664376572-8005-1', '1', '2022-10-03 10:29:07', '41', '2022-09-28 10:51:53', '41', '2022-09-28 10:51:53', '0'); 809 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1050', '1016', '46', 'test-invoice-2', '1', '2024-03-08 11:20:02', '41', '2022-09-28 10:53:28', '41', '2024-03-08 11:19:37', '4'); 810 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1051', '1018', '2', 'for-page-1050', '17', '2022-09-28 10:53:29', '41', '2022-09-28 10:53:29', '41', '2022-09-28 10:53:29', '4'); 811 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1052', '1051', '48', '1664376572-8005-1', '1', '2022-10-03 10:29:25', '41', '2022-09-28 10:53:29', '41', '2022-09-28 10:53:29', '0'); 812 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1053', '1017', '44', 'acme-inc', '1', '2024-03-08 10:10:07', '41', '2022-09-30 10:39:56', '41', '2022-09-30 10:57:16', '1'); 813 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1054', '1017', '44', 'widgets-fidgets-llc', '1', '2024-03-08 10:10:03', '41', '2022-09-30 10:59:15', '41', '2022-09-30 11:00:11', '2'); 814 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1056', '1048', '48', '1664550311-2238-1', '1', '2022-10-03 10:29:07', '41', '2022-09-30 11:05:11', '41', '2022-09-30 11:06:32', '1'); 815 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1058', '1048', '48', '1664550420-8335-1', '1', '2022-10-03 10:29:07', '41', '2022-09-30 11:07:00', '41', '2022-09-30 11:07:20', '2'); 816 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1059', '1027', '2', 'for-page-1047', '17', '2022-09-30 11:07:40', '41', '2022-09-30 11:07:40', '41', '2022-09-30 11:07:40', '2'); 817 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1060', '1059', '49', '1664550460-0232-1', '1', '2024-03-08 11:23:15', '41', '2022-09-30 11:07:40', '41', '2022-09-30 11:07:57', '0'); 818 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1062', '1020', '52', 'invoice-item-types', '1', '2022-10-03 08:40:38', '41', '2022-10-03 08:30:03', '41', '2022-10-03 08:30:03', '0'); 819 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1063', '1020', '52', 'invoice-days', '1', '2022-10-03 08:30:20', '41', '2022-10-03 08:30:20', '41', '2022-10-03 08:30:20', '1'); 820 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1064', '1062', '50', 'service', '1', '2022-10-03 08:31:39', '41', '2022-10-03 08:31:13', '41', '2022-10-03 08:31:39', '1'); 821 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1065', '1062', '50', 'hours', '1', '2022-10-03 08:32:56', '41', '2022-10-03 08:32:00', '41', '2022-10-03 08:32:26', '0'); 822 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1066', '1062', '50', 'product', '1', '2022-10-03 08:32:48', '41', '2022-10-03 08:32:39', '41', '2022-10-03 08:32:48', '2'); 823 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1067', '1063', '51', 'due-upon-receipt', '1', '2022-10-03 08:33:40', '41', '2022-10-03 08:33:36', '41', '2022-10-03 08:33:40', '0'); 824 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1068', '1063', '51', '7-days', '1', '2022-10-03 08:33:53', '41', '2022-10-03 08:33:50', '41', '2022-10-03 08:33:53', '1'); 825 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1069', '1063', '51', '15-days', '1', '2022-10-03 08:34:19', '41', '2022-10-03 08:34:15', '41', '2022-10-03 08:34:19', '2'); 826 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1070', '1063', '51', '30-days', '1', '2022-10-03 08:34:33', '41', '2022-10-03 08:34:27', '41', '2022-10-03 08:34:33', '3'); 827 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1071', '1063', '51', '45-days', '1', '2022-10-03 08:34:44', '41', '2022-10-03 08:34:41', '41', '2022-10-03 08:34:44', '4'); 828 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1072', '1063', '51', '60-days', '1', '2022-10-03 08:34:58', '41', '2022-10-03 08:34:54', '41', '2022-10-03 08:34:58', '5'); 829 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1074', '1020', '52', 'invoice-statuses', '1025', '2024-03-06 11:01:48', '41', '2022-10-03 10:04:17', '41', '2022-10-03 10:04:17', '2'); 830 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1075', '1074', '53', 'pending', '1', '2024-03-07 13:37:58', '41', '2022-10-03 10:05:06', '41', '2022-10-03 10:05:06', '0'); 831 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1076', '1074', '53', 'past-due', '1', '2022-10-03 10:19:31', '41', '2022-10-03 10:05:11', '41', '2022-10-03 10:05:11', '1'); 832 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1077', '1074', '53', 'paid', '1', '2022-10-03 10:19:47', '41', '2022-10-03 10:05:17', '41', '2022-10-03 10:05:17', '2'); 833 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1078', '1074', '53', 'draft', '1', '2022-10-03 10:20:07', '41', '2022-10-03 10:19:56', '41', '2022-10-03 10:20:07', '3'); 834 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1160', '7', '2', '1160.22.3_db-backups', '8193', '2024-03-08 12:13:46', '41', '2024-03-08 09:52:46', '41', '2024-03-08 09:52:46', '3'); 835 | INSERT INTO `pages` (`id`, `parent_id`, `templates_id`, `name`, `status`, `modified`, `modified_users_id`, `created`, `created_users_id`, `published`, `sort`) VALUES('1162', '1059', '49', '1709914857-9432-1', '1', '2024-03-08 11:30:10', '41', '2024-03-08 11:20:57', '41', '2024-03-08 11:23:15', '1'); 836 | 837 | DROP TABLE IF EXISTS `pages_access`; 838 | CREATE TABLE `pages_access` ( 839 | `pages_id` int(11) NOT NULL, 840 | `templates_id` int(11) NOT NULL, 841 | `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 842 | PRIMARY KEY (`pages_id`), 843 | KEY `templates_id` (`templates_id`) 844 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 845 | 846 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('32', '2', '2022-09-26 10:27:31'); 847 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('34', '2', '2022-09-26 10:27:31'); 848 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('35', '2', '2022-09-26 10:27:31'); 849 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('36', '2', '2022-09-26 10:27:31'); 850 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('37', '2', '2022-09-26 10:27:31'); 851 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('38', '2', '2022-09-26 10:27:31'); 852 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('50', '2', '2022-09-26 10:27:31'); 853 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('51', '2', '2022-09-26 10:27:31'); 854 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('52', '2', '2022-09-26 10:27:31'); 855 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('53', '2', '2022-09-26 10:27:31'); 856 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('54', '2', '2022-09-26 10:27:31'); 857 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1006', '2', '2022-09-26 10:27:31'); 858 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1011', '2', '2022-09-26 10:27:48'); 859 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1013', '2', '2022-09-26 10:27:52'); 860 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1014', '2', '2022-09-26 10:27:52'); 861 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1016', '1', '2022-09-26 11:11:15'); 862 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1017', '1', '2022-09-26 11:12:20'); 863 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1020', '1', '2022-09-26 11:34:16'); 864 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1041', '1', '2024-03-08 11:13:23'); 865 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1043', '2', '2022-09-28 10:49:32'); 866 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1045', '2', '2022-09-28 10:51:43'); 867 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1046', '2', '2022-09-28 10:51:43'); 868 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1047', '1', '2024-03-08 10:10:15'); 869 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1049', '2', '2022-09-28 10:51:53'); 870 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1050', '1', '2024-03-08 11:13:27'); 871 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1052', '2', '2022-09-28 10:53:29'); 872 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1053', '1', '2024-03-08 10:10:07'); 873 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1054', '1', '2024-03-08 10:10:03'); 874 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1056', '2', '2022-09-30 11:05:11'); 875 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1058', '2', '2022-09-30 11:07:00'); 876 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1060', '2', '2022-09-30 11:07:40'); 877 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1062', '1', '2022-10-03 08:30:03'); 878 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1063', '1', '2022-10-03 08:30:20'); 879 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1064', '1', '2022-10-03 08:31:13'); 880 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1065', '1', '2022-10-03 08:32:00'); 881 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1066', '1', '2022-10-03 08:32:39'); 882 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1067', '1', '2022-10-03 08:33:36'); 883 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1068', '1', '2022-10-03 08:33:50'); 884 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1069', '1', '2022-10-03 08:34:15'); 885 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1070', '1', '2022-10-03 08:34:27'); 886 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1071', '1', '2022-10-03 08:34:41'); 887 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1072', '1', '2022-10-03 08:34:54'); 888 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1074', '1', '2022-10-03 10:04:17'); 889 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1075', '1', '2022-10-03 10:05:06'); 890 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1076', '1', '2022-10-03 10:05:11'); 891 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1077', '1', '2022-10-03 10:05:17'); 892 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1078', '1', '2022-10-03 10:19:56'); 893 | INSERT INTO `pages_access` (`pages_id`, `templates_id`, `ts`) VALUES('1162', '2', '2024-03-08 11:20:57'); 894 | 895 | DROP TABLE IF EXISTS `pages_parents`; 896 | CREATE TABLE `pages_parents` ( 897 | `pages_id` int(10) unsigned NOT NULL, 898 | `parents_id` int(10) unsigned NOT NULL, 899 | PRIMARY KEY (`pages_id`,`parents_id`) 900 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 901 | 902 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('2', '1'); 903 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('3', '1'); 904 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('3', '2'); 905 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('7', '1'); 906 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('22', '1'); 907 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('22', '2'); 908 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('28', '1'); 909 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('28', '2'); 910 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('29', '1'); 911 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('29', '2'); 912 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('29', '28'); 913 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('30', '1'); 914 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('30', '2'); 915 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('30', '28'); 916 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('31', '1'); 917 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('31', '2'); 918 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('31', '28'); 919 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1015', '2'); 920 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1018', '2'); 921 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1018', '1015'); 922 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1027', '2'); 923 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1027', '1015'); 924 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1041', '1016'); 925 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1042', '2'); 926 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1042', '1015'); 927 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1042', '1018'); 928 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1047', '1016'); 929 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1050', '1016'); 930 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1053', '1017'); 931 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1054', '1017'); 932 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1059', '2'); 933 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1059', '1015'); 934 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1059', '1027'); 935 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1062', '1020'); 936 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1063', '1020'); 937 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1074', '1020'); 938 | INSERT INTO `pages_parents` (`pages_id`, `parents_id`) VALUES('1160', '7'); 939 | 940 | DROP TABLE IF EXISTS `pages_sortfields`; 941 | CREATE TABLE `pages_sortfields` ( 942 | `pages_id` int(10) unsigned NOT NULL DEFAULT '0', 943 | `sortfield` varchar(20) NOT NULL DEFAULT '', 944 | PRIMARY KEY (`pages_id`) 945 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 946 | 947 | INSERT INTO `pages_sortfields` (`pages_id`, `sortfield`) VALUES('1016', '-created'); 948 | INSERT INTO `pages_sortfields` (`pages_id`, `sortfield`) VALUES('1017', 'name'); 949 | 950 | DROP TABLE IF EXISTS `session_login_throttle`; 951 | CREATE TABLE `session_login_throttle` ( 952 | `name` varchar(128) NOT NULL, 953 | `attempts` int(10) unsigned NOT NULL DEFAULT '0', 954 | `last_attempt` int(10) unsigned NOT NULL, 955 | PRIMARY KEY (`name`) 956 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 957 | 958 | DROP TABLE IF EXISTS `templates`; 959 | CREATE TABLE `templates` ( 960 | `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 961 | `name` varchar(191) CHARACTER SET ascii NOT NULL, 962 | `fieldgroups_id` int(10) unsigned NOT NULL DEFAULT '0', 963 | `flags` int(11) NOT NULL DEFAULT '0', 964 | `cache_time` mediumint(9) NOT NULL DEFAULT '0', 965 | `data` text NOT NULL, 966 | PRIMARY KEY (`id`), 967 | UNIQUE KEY `name` (`name`), 968 | KEY `fieldgroups_id` (`fieldgroups_id`) 969 | ) ENGINE=MyISAM AUTO_INCREMENT=54 DEFAULT CHARSET=utf8; 970 | 971 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('1', 'home', '1', '0', '0', '{\"useRoles\":1,\"noParents\":1,\"slashUrls\":1,\"compile\":0,\"modified\":1709907215,\"ns\":\"ProcessWire\",\"_lazy\":1,\"roles\":[37]}'); 972 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('2', 'admin', '2', '8', '0', '{\"useRoles\":1,\"parentTemplates\":[2],\"allowPageNum\":1,\"redirectLogin\":23,\"slashUrls\":1,\"noGlobal\":1,\"compile\":3,\"modified\":1709909462,\"ns\":\"ProcessWire\",\"_lazy\":1}'); 973 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('3', 'user', '3', '8', '0', '{\"useRoles\":1,\"noChildren\":1,\"parentTemplates\":[2],\"slashUrls\":1,\"pageClass\":\"User\",\"noGlobal\":1,\"noMove\":1,\"noTrash\":1,\"noSettings\":1,\"noChangeTemplate\":1,\"nameContentTab\":1}'); 974 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('4', 'role', '4', '8', '0', '{\"noChildren\":1,\"parentTemplates\":[2],\"slashUrls\":1,\"pageClass\":\"Role\",\"noGlobal\":1,\"noMove\":1,\"noTrash\":1,\"noSettings\":1,\"noChangeTemplate\":1,\"nameContentTab\":1}'); 975 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('5', 'permission', '5', '8', '0', '{\"noChildren\":1,\"parentTemplates\":[2],\"slashUrls\":1,\"guestSearchable\":1,\"pageClass\":\"Permission\",\"noGlobal\":1,\"noMove\":1,\"noTrash\":1,\"noSettings\":1,\"noChangeTemplate\":1,\"nameContentTab\":1}'); 976 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('29', 'basic-page', '83', '0', '0', '{\"slashUrls\":1,\"compile\":0,\"modified\":1709907634,\"ns\":\"ProcessWire\",\"_lazy\":1}'); 977 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('43', 'clients', '97', '0', '0', '{\"noParents\":-1,\"childTemplates\":[44],\"slashUrls\":1,\"pageLabelField\":\"fa-building title\",\"compile\":0,\"label\":\"Clients\",\"modified\":1709909462,\"ns\":\"ProcessWire\",\"_lazy\":1}'); 978 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('44', 'client', '98', '0', '0', '{\"noChildren\":1,\"parentTemplates\":[43],\"slashUrls\":1,\"pageLabelField\":\"fa-building-o title\",\"compile\":0,\"label\":\"Client\",\"modified\":1709908211,\"ns\":\"ProcessWire\",\"_lazy\":1}'); 979 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('45', 'invoices', '99', '0', '0', '{\"noParents\":-1,\"childTemplates\":[46],\"slashUrls\":1,\"pageLabelField\":\"fa-list-alt title\",\"compile\":0,\"label\":\"Invoices\",\"modified\":1709662519,\"_lazy\":1}'); 980 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('46', 'invoice', '100', '0', '0', '{\"noChildren\":1,\"parentTemplates\":[45],\"urlSegments\":[\"email\",\"print\"],\"slashUrls\":1,\"pageLabelField\":\"fa-star-half-o title\",\"compile\":0,\"label\":\"Invoice\",\"modified\":1709910768,\"tabContent\":\"Invoice\",\"ns\":\"ProcessWire\",\"_lazy\":1}'); 981 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('47', 'invoice-settings', '101', '0', '0', '{\"noParents\":-1,\"childTemplates\":[52],\"slashUrls\":1,\"pageLabelField\":\"fa-sliders title\",\"compile\":0,\"label\":\"Settings\",\"modified\":1709740490,\"_lazy\":1}'); 982 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('48', 'repeater_invoice_items', '102', '8', '0', '{\"noChildren\":1,\"noParents\":1,\"slashUrls\":1,\"pageClass\":\"RepeaterPage\",\"noGlobal\":1,\"compile\":3,\"modified\":1664804733,\"_lazy\":1}'); 983 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('49', 'repeater_invoice_payments', '103', '8', '0', '{\"noChildren\":1,\"noParents\":1,\"slashUrls\":1,\"pageClass\":\"RepeaterPage\",\"noGlobal\":1,\"compile\":3,\"modified\":1664805437,\"_lazy\":1}'); 984 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('50', 'invoice-item-type', '104', '0', '0', '{\"slashUrls\":1,\"compile\":0,\"modified\":1664800811,\"_lazy\":1}'); 985 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('51', 'invoice-day', '105', '0', '0', '{\"slashUrls\":1,\"compile\":0,\"modified\":1664800133,\"_lazy\":1}'); 986 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('52', 'invoice-options', '106', '0', '0', '{\"childTemplates\":[51,50,53],\"parentTemplates\":[47],\"slashUrls\":1,\"noShortcut\":1,\"compile\":0,\"modified\":1709666161,\"ns\":\"ProcessWire\",\"_lazy\":1}'); 987 | INSERT INTO `templates` (`id`, `name`, `fieldgroups_id`, `flags`, `cache_time`, `data`) VALUES('53', 'invoice-status', '107', '0', '0', '{\"noChildren\":1,\"parentTemplates\":[52],\"slashUrls\":1,\"noShortcut\":1,\"compile\":0,\"modified\":1709909743,\"ns\":\"ProcessWire\",\"_lazy\":1}'); 988 | 989 | UPDATE pages SET created_users_id=41, modified_users_id=41, created=NOW(), modified=NOW(); 990 | 991 | # --- /WireDatabaseBackup {"numTables":32,"numCreateTables":38,"numInserts":568,"numSeconds":0} --------------------------------------------------------------------------------