From 54e23e00c4071308b30ec293f249dafce3795d3b Mon Sep 17 00:00:00 2001 From: Dennis Suitters Date: Thu, 1 Sep 2022 22:04:38 +1000 Subject: [PATCH] Version 0.2.18 - Fix wrong thumbnail reference in YouTube JSON response when adding playlist items. - Adjust date and inventory selection for suggested sale period suggestions. - Change how versioning is done with patch releases, releases and full frozen versions. Consult [CONTRIBUTING.md](https://github.com/DiemenDesign/AuroraCMS/blob/master/CONTRIBUTING.md) for more information. - Reduce file access times and latency by combining icons for Administration and Front End into Separate Font files, and combining them directly into the icons stylesheets. - Improve icons stylesheets, removing unnecessary style declarations. - Fix Author Social Buttons. - Modify Events display in Administration to display order based on Start Date of Event in descending order first, then Created Date if the Start Date isn't set. - Adjust area under footer so it is less obtrusive on the main design. - Remove HTMLPurifer from front end page processing, as we are already sanitising text input for safe output before database insertion. No point in doing it twice, which helps speed up site rendering. - Adjust Administration Favicon to use Favicon from theme. - Restyle Administration area, making it easier to use, and visually improved. Now uses less Styling. - Fix Descending order for widget referrers. - Add ctrl+s SaveAll keyboard shortcut, this override's the browser default, but makes it much more user friendly for user's. - Fix Admin Activity Page not clearing entries. - Fix Admin Side Menu not showing correct active page. - Fix Login not using correct variable name for setting theme. - Replace deprecated filter option "FILTER_SANITIZE_STRING" in favour of "FILTER_UNSAFE_RAW". - Adjust AuroraCMS logo size, Firefox was showing image too large, pushing elements off page. - Improve the Accessibility Widget. - Fix Admin theme switcher displaying both icons if theme not set. - Fix Schema not encoding single or double quotes, causing issues of malformed Schema Data. - Add button to Bookings items to copy booking to Job List. - Fix z-index of elFinder so it opens above Summernote's dialogs. - Fix reference to Share icon on Administration Content list page. - Fix wrong icon references in quickedit dropdown. - Comment out array functions, that look to currently be deprecated or not added to PHP 8.1 - Adjust Administration content dropdowns for status, and stock so they don't appear of the top of elements other than the image. - Adjust Administraion Tabs font size to avoid wrapping when widget's are present. - Add Fill style to correctly change the AuroraCMS logo colour when theme modes are changed. - Fix Administration header menu dropdown styling. - Fix Safari button styling not rendering button elements as expected styling. - Fix missing vars for sales array when checking for sale dates. - Fix typo in escaper function. - Fix escaping that was removing Meta Dscription information if it contained some already escaped characters. - Fix wrong ID value for A11Y Checkbox option. - Remove margin declaration for `section article` styling, due to the margin pushing elements outside of the viewport area on mobile devices. - Fix Page view parser typo causing a 500 error. - Add check for empty thumbnail_url for Playlist parser. - Fix Playlist editing not retrieving thumbnail URL. - Add project links to Administration dropdown account menu. - Add extra variable style for more consistent and customisable form elements. - Improve styling of Login Form. - Fix previous update that added an !important directive to button styling, that was overriding button appearance and interaction. - Improve QuickEdit dropdowns, may require more information added. - Fix Login inputs not being selectable when clicking on them. - Add and reorder SEO Links to Dashboard SEO Links Widget. - Add Downloadable Media, such as eBooks or other files from secure folder. - Adjust Thumbnail display to use generated SM, MD, LG images instead of elFinder's auto thumbnails. - Remove unnecessary comments. - Change AVIF format images to WEBP, due to Safari (and Chrome, which is actually Safari on iOS and Mac) not having AVIF capabilities. - Adjust "Maintenance", and "Coming Soon" pages to check if unavailable background could be AVIF, WEBP, JPG, JPEG, or PNG. - Fix Open Weather Map API Link. Preferences -> Contact. - Remove Cover Image SrcSet extra image size causing some images to not display as intended. - Add option to change available time for file downloads. - Fix Summernote WYSIWYG Styling showing wrong colour when scrolling editable area. - Add removing line breaks /r and /n characters causing unnecessary space between elements. - Fix Inventory items showing options if reference ID happens to match the Inventory Items ID. - Add new Content Type "course". - Add Course Mangement to Administration. - Add ability to change Created Content Date. - Remove the previously missed loading="lazy" attribute when previously adjusting the cover images, the attribute is unnecessary for above the fold content. - Fix missing parsing for State information on contact page. - Adjust cart display parser to not show weight or dimensions if they are zero. - Update PHPMailer and adjust mail sending code. - Fix Stripe and PayPal payment processing. - Adjust Account Menu z-index and active colour. - Add Accounts Information export to .csv - Fix typo in side content menu sort parser. - Add including purchasable Links to Inventory. - Add Purchased Links to Orders. --- CHANGELOG.md | 31 +- README.md | 12 +- VERSION | 2 +- core/add_account.php | 8 +- core/add_adminsuggestion.php | 8 +- core/add_booking.php | 8 +- core/add_cart.php | 2 +- core/add_comment.php | 8 +- core/add_contactus.php | 8 +- core/add_download.php | 95 +- core/add_link.php | 87 + core/add_module.php | 48 + core/add_question.php | 53 + core/add_student.php | 64 + core/add_testimonial.php | 8 +- core/admin.php | 3 +- core/aurora.sql | 1116 ++-- core/chat.php | 10 +- core/core.php | 56 +- core/css/style.css | 2 +- core/css/stylesheet-aurora.css | 4 +- core/css/stylesheet-grid.css | 2 +- core/css/stylesheet-typography.css | 2 +- core/css/stylesheet-xtras-admin.css | 8 +- core/downloads.php | 2 + core/email_booking.php | 8 +- core/email_message.php | 8 +- core/email_order.php | 88 +- core/export_accounts.php | 94 + core/forum_post.php | 8 +- core/forum_reply.php | 8 +- core/images/flags/localhost.png | Bin 20710 -> 13997 bytes core/js/aurora.min.js | 25 +- core/js/js.js | 12 + core/js/service-worker-admin.php | 2 +- core/js/summernote/font/summernote.eot | Bin core/js/summernote/font/summernote.hash | 0 core/js/summernote/font/summernote.ttf | Bin core/js/summernote/font/summernote.woff | Bin core/js/summernote/font/summernote.woff2 | Bin core/js/summernote/summernote.min.css | 0 core/js/summernote/summernote.min.js | 0 core/layout/content.php | 3 +- core/layout/course.php | 207 + core/layout/edit_content.php | 178 +- core/layout/edit_course.php | 719 +++ core/layout/edit_module.php | 173 + core/layout/edit_orders.php | 6 +- core/layout/meta_footer.php | 6 +- core/layout/orders.php | 12 +- core/layout/set_accounts.php | 108 +- core/layout/set_course.php | 307 + core/layout/set_orders.php | 17 +- core/newsletter.php | 8 +- core/parser.php | 4 +- core/parser_item.php | 42 +- core/parser_items.php | 18 +- core/paypalpayment.php | 195 +- core/phpmailer/Exception.php | 40 + core/phpmailer/OAuth.php | 139 + core/phpmailer/OAuthTokenProvider.php | 44 + core/phpmailer/PHPMailer.php | 5077 +++++++++++++++++ core/phpmailer/POP3.php | 462 ++ core/phpmailer/SMTP.php | 1459 +++++ core/phpmailer/class.phpmailer.php | 1 - core/phpmailer/class.phpmaileroauth.php | 1 - core/phpmailer/class.phpmaileroauthgoogle.php | 1 - core/phpmailer/class.pop3.php | 1 - core/phpmailer/class.smtp.php | 1 - core/purge.php | 20 +- core/reordermodules.php | 23 + core/reorderquestions.php | 23 + core/reset_password.php | 8 +- core/rst.php | 8 +- core/stripepayment.php | 161 +- core/update.php | 4 +- core/view/cart.php | 76 +- core/view/checkout.php | 229 +- core/view/contactus.php | 4 +- core/view/courses.php | 268 + core/view/footer.php | 4 +- core/view/header.php | 4 +- core/view/inc-hours.php | 10 +- core/view/orders.php | 28 +- core/view/side_courses.php | 59 + core/view/side_menu.php | 132 +- core/view_certificate.php | 49 + layout/default/aboutus.html | 4 +- layout/default/biography.html | 4 +- layout/default/bookings.html | 2 +- layout/default/cart.html | 200 +- layout/default/checkout.html | 30 +- layout/default/content.html | 59 +- layout/default/courses.html | 124 + layout/default/faq.html | 4 +- layout/default/header.html | 8 +- layout/default/noaccess.html | 2 +- layout/default/orders.html | 28 +- layout/default/page.html | 4 +- layout/default/settings.html | 2 +- layout/default/side_courses.html | 31 + layout/default/side_menu.html | 13 +- layout/default/theme.ini | 10 +- media/certificate/certificate-0.html | 26 + media/certificate/certificate-0.png | Bin 0 -> 45158 bytes media/certificate/certificate-1.html | 26 + media/certificate/certificate-1.png | Bin 0 -> 36896 bytes media/certificate/certificate-2.html | 26 + media/certificate/certificate-2.png | Bin 0 -> 55844 bytes media/certificate/certificate-3.html | 26 + media/certificate/certificate-3.png | Bin 0 -> 27685 bytes media/certificate/certificate-4.html | 26 + media/certificate/certificate-4.png | Bin 0 -> 41864 bytes media/certificate/certificate-5.html | 26 + media/certificate/certificate-5.png | Bin 0 -> 164832 bytes media/certificate/certificate-6.html | 26 + media/certificate/certificate-6.png | Bin 0 -> 44467 bytes media/certificate/certificate-7.html | 26 + media/certificate/certificate-7.png | Bin 0 -> 152301 bytes media/downloads/.htaccess | 0 120 files changed, 11823 insertions(+), 1149 deletions(-) create mode 100644 core/add_link.php create mode 100644 core/add_module.php create mode 100644 core/add_question.php create mode 100644 core/add_student.php mode change 100755 => 100644 core/aurora.sql create mode 100644 core/export_accounts.php mode change 100644 => 100755 core/js/summernote/font/summernote.eot mode change 100644 => 100755 core/js/summernote/font/summernote.hash mode change 100644 => 100755 core/js/summernote/font/summernote.ttf mode change 100644 => 100755 core/js/summernote/font/summernote.woff mode change 100644 => 100755 core/js/summernote/font/summernote.woff2 mode change 100644 => 100755 core/js/summernote/summernote.min.css mode change 100644 => 100755 core/js/summernote/summernote.min.js create mode 100755 core/layout/course.php create mode 100755 core/layout/edit_course.php create mode 100644 core/layout/edit_module.php create mode 100755 core/layout/set_course.php create mode 100644 core/phpmailer/Exception.php create mode 100644 core/phpmailer/OAuth.php create mode 100644 core/phpmailer/OAuthTokenProvider.php create mode 100644 core/phpmailer/PHPMailer.php create mode 100644 core/phpmailer/POP3.php create mode 100644 core/phpmailer/SMTP.php delete mode 100755 core/phpmailer/class.phpmailer.php delete mode 100755 core/phpmailer/class.phpmaileroauth.php delete mode 100755 core/phpmailer/class.phpmaileroauthgoogle.php delete mode 100755 core/phpmailer/class.pop3.php delete mode 100755 core/phpmailer/class.smtp.php create mode 100644 core/reordermodules.php create mode 100644 core/reorderquestions.php create mode 100644 core/view/courses.php create mode 100644 core/view/side_courses.php create mode 100644 core/view_certificate.php create mode 100644 layout/default/courses.html create mode 100644 layout/default/side_courses.html create mode 100644 media/certificate/certificate-0.html create mode 100644 media/certificate/certificate-0.png create mode 100644 media/certificate/certificate-1.html create mode 100644 media/certificate/certificate-1.png create mode 100644 media/certificate/certificate-2.html create mode 100644 media/certificate/certificate-2.png create mode 100644 media/certificate/certificate-3.html create mode 100644 media/certificate/certificate-3.png create mode 100644 media/certificate/certificate-4.html create mode 100644 media/certificate/certificate-4.png create mode 100644 media/certificate/certificate-5.html create mode 100644 media/certificate/certificate-5.png create mode 100644 media/certificate/certificate-6.html create mode 100644 media/certificate/certificate-6.png create mode 100644 media/certificate/certificate-7.html create mode 100644 media/certificate/certificate-7.png mode change 100644 => 100755 media/downloads/.htaccess diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d1f32e..bd5a86c 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,17 +1,11 @@ -### v0.2.9 +### v0.2.18 - Fix wrong thumbnail reference in YouTube JSON response when adding playlist items. - Adjust date and inventory selection for suggested sale period suggestions. - Change how versioning is done with patch releases, releases and full frozen versions. Consult [CONTRIBUTING.md](https://github.com/DiemenDesign/AuroraCMS/blob/master/CONTRIBUTING.md) for more information. - -#### v0.2.10 - Reduce file access times and latency by combining icons for Administration and Front End into Separate Font files, and combining them directly into the icons stylesheets. - Improve icons stylesheets, removing unnecessary style declarations. - -#### v0.2.11 - Fix Author Social Buttons. - Modify Events display in Administration to display order based on Start Date of Event in descending order first, then Created Date if the Start Date isn't set. - -#### v0.2.12 - Adjust area under footer so it is less obtrusive on the main design. - Remove HTMLPurifer from front end page processing, as we are already sanitising text input for safe output before database insertion. No point in doing it twice, which helps speed up site rendering. - Adjust Administration Favicon to use Favicon from theme. @@ -20,8 +14,6 @@ - Add ctrl+s SaveAll keyboard shortcut, this override's the browser default, but makes it much more user friendly for user's. - Fix Admin Activity Page not clearing entries. - Fix Admin Side Menu not showing correct active page. - -#### v0.2.13 - Fix Login not using correct variable name for setting theme. - Replace deprecated filter option "FILTER_SANITIZE_STRING" in favour of "FILTER_UNSAFE_RAW". - Adjust AuroraCMS logo size, Firefox was showing image too large, pushing elements off page. @@ -30,8 +22,6 @@ - Fix Schema not encoding single or double quotes, causing issues of malformed Schema Data. - Add button to Bookings items to copy booking to Job List. - Fix z-index of elFinder so it opens above Summernote's dialogs. - -#### v0.2.14 - Fix reference to Share icon on Administration Content list page. - Fix wrong icon references in quickedit dropdown. - Comment out array functions, that look to currently be deprecated or not added to PHP 8.1 @@ -41,8 +31,6 @@ - Fix Administration header menu dropdown styling. - Fix Safari button styling not rendering button elements as expected styling. - Fix missing vars for sales array when checking for sale dates. - -#### v0.2.15 - Fix typo in escaper function. - Fix escaping that was removing Meta Dscription information if it contained some already escaped characters. - Fix wrong ID value for A11Y Checkbox option. @@ -52,8 +40,6 @@ - Fix Playlist editing not retrieving thumbnail URL. - Add project links to Administration dropdown account menu. - Add extra variable style for more consistent and customisable form elements. - -#### v0.2.16 - Improve styling of Login Form. - Fix previous update that added an !important directive to button styling, that was overriding button appearance and interaction. - Improve QuickEdit dropdowns, may require more information added. @@ -64,11 +50,22 @@ - Remove unnecessary comments. - Change AVIF format images to WEBP, due to Safari (and Chrome, which is actually Safari on iOS and Mac) not having AVIF capabilities. - Adjust "Maintenance", and "Coming Soon" pages to check if unavailable background could be AVIF, WEBP, JPG, JPEG, or PNG. - -#### v0.2.17 - Fix Open Weather Map API Link. Preferences -> Contact. - Remove Cover Image SrcSet extra image size causing some images to not display as intended. - Add option to change available time for file downloads. - Fix Summernote WYSIWYG Styling showing wrong colour when scrolling editable area. - Add removing line breaks /r and /n characters causing unnecessary space between elements. - Fix Inventory items showing options if reference ID happens to match the Inventory Items ID. +- Add new Content Type "course". +- Add Course Mangement to Administration. +- Add ability to change Created Content Date. +- Remove the previously missed loading="lazy" attribute when previously adjusting the cover images, the attribute is unnecessary for above the fold content. +- Fix missing parsing for State information on contact page. +- Adjust cart display parser to not show weight or dimensions if they are zero. +- Update PHPMailer and adjust mail sending code. +- Fix Stripe and PayPal payment processing. +- Adjust Account Menu z-index and active colour. +- Add Accounts Information export to .csv +- Fix typo in side content menu sort parser. +- Add including purchasable Links to Inventory. +- Add Purchased Links to Orders. diff --git a/README.md b/README.md index ca41938..bf2d109 100755 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ![AuroraCMS](core/images/readmelogo.webp) AuroraCMS the **Free** Australian Open Source [MIT](https://github.com/DiemenDesign/AuroraCMS/blob/master/LICENSE) licensed Content Management System, built primarily for Australian Businesses, built utilising [PHP](http://php.net/), PDO, [jQuery](http://jquery.com/) and [iCONS](https://github.com/DiemenDesign/iCONS). Built to take advantage of HTML5 and CSS3, with necessary SEO attributes that fit in with Google's recommendations, Micro-formats, JSON-LD, ARIA (A11Y), and general SEO Markup. -Current version is v0.2.17 +Current version is v0.2.18 ### Features - AuroraCMS is a Quasi-MVC, Front End is completely MVC, with some AJAX Functions for Form Processing. @@ -45,6 +45,9 @@ Current version is v0.2.17 - Download available directly from page when Order required isn't set. - Option that file/s only available via Invoice, and time limit. - Download link sent via Invoice when Invoice is Paid. + - Link/s to other services or content. + - Option that Link/s only available via Invoice, and time limit. + - Link/s sent via Invoice when Invoice is Paid. - Newsletters. - Proofs. - User accessible area. @@ -76,6 +79,13 @@ Current version is v0.2.17 - Post, Reply as per other Forums. - Integrated Help Tickets as Forum Posts. - Upvote or Downvote posts and comments. +- Course Management. + - Add/Edit Courses. + - Add Multiple-Choice Questions. + - Add Multiple Questions, with Answer Entry. + - Track User Progression. + - Display available courses, with online Payments. + - Display Paid Courses when User is logged in, including Current Progression. - Banner Notifications with Entrance Animation choice. Dissmissable with local storage variable. - Media. - Upload and manage various types of files for addition into content using elFinder. diff --git a/VERSION b/VERSION index e73e4a1..28599c8 100755 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.2.17 +v0.2.18 diff --git a/core/add_account.php b/core/add_account.php index 79d843c..d1ea8cb 100755 --- a/core/add_account.php +++ b/core/add_account.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.13 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -96,8 +96,10 @@ ':active'=>0, ':ti'=>time() ]); - require'phpmailer/class.phpmailer.php'; - $mail=new PHPMailer; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $toname=$username; $mail->SetFrom($config['email'],$config['business']); diff --git a/core/add_adminsuggestion.php b/core/add_adminsuggestion.php index 15603ff..6b025ec 100755 --- a/core/add_adminsuggestion.php +++ b/core/add_adminsuggestion.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.1 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -39,8 +39,10 @@ ]); $rf=$fu->fetch(PDO::FETCH_ASSOC); if($rt['email']!=''){ - require'phpmailer/class.phpmailer.php'; - $mail=new PHPMailer; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $toname=$c['name']; $mail->SetFrom($config['email'],$config['business']); diff --git a/core/add_booking.php b/core/add_booking.php index 5d62050..5dd6bd2 100755 --- a/core/add_booking.php +++ b/core/add_booking.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.13 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -200,8 +200,10 @@ $not=['spammer'=>false,'target'=>'booking','element'=>'div','action'=>'replace','class'=>'not alert alert-success','text'=>'A Booking has been created for your attendance. A confirmation email has been sent to the email address you provided with details of how to access the Event.','reason'=>'']; } if($config['email']!=''){ - require'phpmailer/class.phpmailer.php'; - $mail=new PHPMailer; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $mail->SetFrom($email,$name); $toname=$config['email']; diff --git a/core/add_cart.php b/core/add_cart.php index e5a3110..a77e104 100755 --- a/core/add_cart.php +++ b/core/add_cart.php @@ -16,7 +16,7 @@ $iid=filter_input(INPUT_POST,'id',FILTER_SANITIZE_NUMBER_INT); $cid=filter_input(INPUT_POST,'cid',FILTER_SANITIZE_NUMBER_INT); $ti=time(); -$uid=isset($_SESSION['uid'])?$_SESSION['uid']:$_SESSION['uid']; +$uid=isset($_SESSION['uid'])?$_SESSION['uid']:0; $rank=isset($_SESSION['rank'])?$_SESSION['rank']:0; $limit=0; $add=true; diff --git a/core/add_comment.php b/core/add_comment.php index aa4a339..ceb9528 100755 --- a/core/add_comment.php +++ b/core/add_comment.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.13 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -97,8 +97,10 @@ $q=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `id`=:id"); $q->execute([':id'=>$rid]); $r=$q->fetch(PDO::FETCH_ASSOC); - require'phpmailer/class.phpmailer.php'; - $mail=new PHPMailer; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $mail->SetFrom($email,$name); $toname=$config['email']; diff --git a/core/add_contactus.php b/core/add_contactus.php index 08f570c..c14dc64 100755 --- a/core/add_contactus.php +++ b/core/add_contactus.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.13 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -87,8 +87,10 @@ } if($config['email']!=''){ if($not['spammer']==false){ - require'phpmailer/class.phpmailer.php'; - $mail=new PHPMailer; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $mail->SetFrom($email, $name); $toname=$config['email']; diff --git a/core/add_download.php b/core/add_download.php index f6df727..058382b 100755 --- a/core/add_download.php +++ b/core/add_download.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.17 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -22,9 +22,9 @@ if(isset($_FILES['fu'])){ $ft=$_FILES['fu']['type']; if(in_array($ft,[ -'audio/aac','audio/midi','audio/mpeg','audio/ogg','audio/wav','audio/x-midi', -'application/epub+zip','application/gzip','application/java-archive','application/msword','application/ogg','application/pdf','application/rtf','application/vnd.amazon.ebook','application/vnd.ms-excel','application/vnd.ms-powerpoint','application/vnd.oasis.opendocument.presentation','application/vnd.oasis.opendocument.spreadsheet','application/vnd.oasis.opendocument.text','application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','application/vnd.openxmlformats-officedocument.presentationml.presentation','application/vnd.openxmlformats-officedocument.wordprocessingml.document','application/vnd.rar','application/x-7z-compressed','application/x-bzip','application/x-bzip2','application/x-freearc','application/x-tar','application/zip', -'text/plain','video/mp4','video/mpeg','video/ogg' + 'audio/aac','audio/midi','audio/mpeg','audio/ogg','audio/wav','audio/x-midi', + 'application/epub+zip','application/gzip','application/java-archive','application/msword','application/ogg','application/pdf','application/rtf','application/vnd.amazon.ebook','application/vnd.ms-excel','application/vnd.ms-powerpoint','application/vnd.oasis.opendocument.presentation','application/vnd.oasis.opendocument.spreadsheet','application/vnd.oasis.opendocument.text','application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','application/vnd.openxmlformats-officedocument.presentationml.presentation','application/vnd.openxmlformats-officedocument.wordprocessingml.document','application/vnd.rar','application/x-7z-compressed','application/x-bzip','application/x-bzip2','application/x-freearc','application/x-tar','application/zip', + 'text/plain','video/mp4','video/mpeg','video/ogg' ])){ $tp='../media/downloads/'.basename($_FILES['fu']['name']); $file=basename($_FILES['fu']['name']); @@ -45,51 +45,52 @@ ':ord'=>$iid+1 ]); echo''; + 'window.top.window.$("#downloads").append(`
'. + '
'. + '
'. + ''. + '
'. + ''. + '
'; + if($r==1){ + echo'
'. + '
'. + ' '. + '
'. + '
'. + ''. + '
'. + ''. + '
'; + } + echo'
'. + ''. + '
'. + ''. + ''. + ''. + '
'. + '
'. + '
`);'. + ''; }else{ - echo'window.top.window.toastr["error"]("An error occured while uploading the file!");'; + echo''; } }else{ - echo'window.top.window.toastr["error"]("Filetype not allowed!");'; + echo''; } } diff --git a/core/add_link.php b/core/add_link.php new file mode 100644 index 0000000..1dcfaec --- /dev/null +++ b/core/add_link.php @@ -0,0 +1,87 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */ +if(session_status()==PHP_SESSION_NONE)session_start(); +require'db.php'; +$config=$db->query("SELECT * FROM `".$prefix."config` WHERE `id`='1'")->fetch(PDO::FETCH_ASSOC); +$id=filter_input(INPUT_POST,'id',FILTER_SANITIZE_NUMBER_INT); +$t=isset($_POST['t'])?filter_input(INPUT_POST,'t',FILTER_SANITIZE_STRING):''; +$r=isset($_POST['r'])?filter_input(INPUT_POST,'r',FILTER_SANITIZE_NUMBER_INT):0; +$a=isset($_POST['a'])?filter_input(INPUT_POST,'a',FILTER_SANITIZE_NUMBER_INT):0; +$l=isset($_POST['l'])?filter_input(INPUT_POST,'l',FILTER_SANITIZE_STRING):''; +if($l==''){ + echo''; +} +if($t==''){ + echo''; +} +if($t!=''&&$l!=''){ + $q=$db->prepare("INSERT IGNORE INTO `".$prefix."choices` (`rid`,`contentType`,`url`,`title`,`password`,`tie`,`ti`) VALUES (:rid,'link',:file,:title,:p,:tie,:ti)"); + $q->execute([ + ':rid'=>$id, + ':file'=>$l, + ':title'=>$t, + ':p'=>$r, + ':tie'=>$a, + ':ti'=>time() + ]); + $iid=$db->lastInsertId(); + $q=$db->prepare("UPDATE `".$prefix."choices` SET `ord`=:ord WHERE `id`=:id"); + $q->execute([ + ':id'=>$iid, + ':ord'=>$iid+1 + ]); + echo''; +} diff --git a/core/add_module.php b/core/add_module.php new file mode 100644 index 0000000..0406c71 --- /dev/null +++ b/core/add_module.php @@ -0,0 +1,48 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */ +if(session_status()==PHP_SESSION_NONE)session_start(); +require'db.php'; +$config=$db->query("SELECT * FROM `".$prefix."config` WHERE `id`='1'")->fetch(PDO::FETCH_ASSOC); +if((!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')||$_SERVER['SERVER_PORT']==443){ + if(!defined('PROTOCOL'))define('PROTOCOL','https://'); +}else{ + if(!defined('PROTOCOL'))define('PROTOCOL','http://'); +} +define('URL',PROTOCOL.$_SERVER['HTTP_HOST'].$settings['system']['url'].'/'); +$rid=filter_input(INPUT_POST,'rid',FILTER_SANITIZE_NUMBER_INT); +$t=filter_input(INPUT_POST,'t',FILTER_UNSAFE_RAW); +if($t!=''){ + $q=$db->prepare("INSERT IGNORE INTO `".$prefix."modules` (`rid`,`title`,`ti`) VALUES (:rid,:t,:ti)"); + $q->execute([ + ':rid'=>$rid, + ':t'=>$t, + ':ti'=>time() + ]); + $iid=$db->lastInsertId(); + $q=$db->prepare("UPDATE `".$prefix."modules` SET `ord`=:ord WHERE `id`=:id"); + $q->execute([ + ':id'=>$iid, + ':ord'=>$iid+1 + ]); + echo''; +} diff --git a/core/add_question.php b/core/add_question.php new file mode 100644 index 0000000..f1e7ecd --- /dev/null +++ b/core/add_question.php @@ -0,0 +1,53 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */ +if(session_status()==PHP_SESSION_NONE)session_start(); +require'db.php'; +$config=$db->query("SELECT * FROM `".$prefix."config` WHERE `id`='1'")->fetch(PDO::FETCH_ASSOC); +if((!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')||$_SERVER['SERVER_PORT']==443){ + if(!defined('PROTOCOL'))define('PROTOCOL','https://'); +}else{ + if(!defined('PROTOCOL'))define('PROTOCOL','http://'); +} +define('URL',PROTOCOL.$_SERVER['HTTP_HOST'].$settings['system']['url'].'/'); +$rid=filter_input(INPUT_POST,'rid',FILTER_SANITIZE_NUMBER_INT); +$ct=filter_input(INPUT_POST,'ct',FILTER_SANITIZE_STRING); +$a=filter_input(INPUT_POST,'a',FILTER_SANITIZE_NUMBER_INT); +$t=filter_input(INPUT_POST,'t',FILTER_UNSAFE_RAW); +if($t!=''){ + $q=$db->prepare("INSERT IGNORE INTO `".$prefix."module_questions` (`rid`,`type`,`check_answer`,`title`) VALUES (:rid,:ct,:a,:title)"); + $q->execute([ + ':rid'=>$rid, + ':ct'=>$ct, + ':a'=>$a, + ':title'=>$t + ]); + $iid=$db->lastInsertId(); + $q=$db->prepare("UPDATE `".$prefix."module_questions` SET `ord`=:ord WHERE `id`=:id"); + $q->execute([ + ':id'=>$iid, + ':ord'=>$iid+1 + ]); + echo''; +} diff --git a/core/add_student.php b/core/add_student.php new file mode 100644 index 0000000..4a18815 --- /dev/null +++ b/core/add_student.php @@ -0,0 +1,64 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */ +if(session_status()==PHP_SESSION_NONE)session_start(); +require'db.php'; +if((!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')||$_SERVER['SERVER_PORT']==443){ + if(!defined('PROTOCOL'))define('PROTOCOL','https://'); +}else{ + if(!defined('PROTOCOL'))define('PROTOCOL','http://'); +} +define('URL',PROTOCOL.$_SERVER['HTTP_HOST'].$settings['system']['url'].'/'); +$ti=time(); +$cid=filter_input(INPUT_POST,'cid',FILTER_SANITIZE_NUMBER_INT); +$uid=filter_input(INPUT_POST,'uid',FILTER_SANITIZE_NUMBER_INT); +if($uid!=0){ + $sc=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `id`=:id"); + $sc->execute([':id'=>$cid]); + $rc=$sc->fetch(PDO::FETCH_ASSOC); + $su=$db->prepare("SELECT * FROM `".$prefix."login` WHERE `id`=:id"); + $su->execute([':id'=>$uid]); + $ru=$su->fetch(PDO::FETCH_ASSOC); + $s=$db->prepare("INSERT IGNORE INTO `".$prefix."courseTrack` (`rid`,`uid`,`complete`,`progress`,`attempts`,`score`,`ti`) VALUES (:rid,:uid,'',0,:attempts,0,:ti)"); + $s->execute([ + ':rid'=>$cid, + ':uid'=>$uid, + ':attempts'=>$rc['attempts'], + ':ti'=>$ti + ]); + $id=$db->lastInsertId(); + $avatar='core/images/noavatar.jpg'; + if($ru['avatar']!=''&&file_exists('../media/avatar/'.basename($ru['avatar'])))$avatar='media/avatar/'.basename($ru['avatar']); + elseif($ru['gravatar']!='')$avatar=$ru['gravatar']; + echo''; +}else + echo''; diff --git a/core/add_testimonial.php b/core/add_testimonial.php index ebfc218..dbdaa4b 100755 --- a/core/add_testimonial.php +++ b/core/add_testimonial.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.13 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -78,8 +78,10 @@ if(is_null($e[2])){ $not=['spammer'=>false,'target'=>'testimonial','element'=>'div','action'=>'replace','class'=>'not alert alert-success','text'=>'Thank you for your Testimonial, it will be appear once an Administrator Approves it.','reason'=>'']; if($config['email']!=''){ - require'phpmailer/class.phpmailer.php'; - $mail=new PHPMailer; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $toname=$config['business']; $mail->SetFrom($config['email'],$config['business']); diff --git a/core/admin.php b/core/admin.php index 2b488eb..abbe86f 100755 --- a/core/admin.php +++ b/core/admin.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.8 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -58,6 +58,7 @@ require'core/layout/sidebar.php'; if($view=='add'){ if($args[0]=='bookings')require'core/layout/bookings.php'; + elseif($args[0]=='course')require'core/layout/course.php'; else require'core/layout/content.php'; }else require'core/layout/'.$view.'.php'; require'core/layout/meta_footer.php'; diff --git a/core/aurora.sql b/core/aurora.sql old mode 100755 new mode 100644 index a627442..72d0aa9 --- a/core/aurora.sql +++ b/core/aurora.sql @@ -3,14 +3,20 @@ -- https://www.phpmyadmin.net/ -- -- Host: localhost --- Generation Time: Apr 30, 2022 at 02:02 AM --- Server version: 8.0.28-0ubuntu0.20.04.3 --- PHP Version: 8.0.18 +-- Generation Time: Sep 01, 2022 at 10:01 PM +-- Server version: 8.0.30-0ubuntu0.20.04.2 +-- PHP Version: 8.1.9 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + -- -- Database: `aurora` -- @@ -28,11 +34,11 @@ CREATE TABLE `cart` ( `rid` bigint NOT NULL, `quantity` mediumint UNSIGNED NOT NULL, `cost` decimal(10,2) UNSIGNED NOT NULL, - `stockStatus` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `stockStatus` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `points` int NOT NULL, - `si` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `si` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `ti` int UNSIGNED NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -44,16 +50,16 @@ CREATE TABLE `choices` ( `id` bigint UNSIGNED NOT NULL, `uid` bigint UNSIGNED NOT NULL, `rid` bigint UNSIGNED NOT NULL, - `contentType` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `type` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `contentType` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `type` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `username` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `password` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `rank` int UNSIGNED NOT NULL, - `icon` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `port` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `flag` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `title` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `icon` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `port` varchar(8) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `flag` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `title` varchar(60) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `value` int NOT NULL, `f` decimal(10,2) NOT NULL, `t` decimal(10,2) NOT NULL, @@ -62,7 +68,7 @@ CREATE TABLE `choices` ( `tie` int NOT NULL, `ord` bigint NOT NULL, `ti` int UNSIGNED NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -72,21 +78,21 @@ CREATE TABLE `choices` ( CREATE TABLE `comments` ( `id` bigint UNSIGNED NOT NULL, - `contentType` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `contentType` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `rid` bigint UNSIGNED NOT NULL, `uid` bigint UNSIGNED NOT NULL, `cid` bigint UNSIGNED NOT NULL, - `ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `avatar` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `gravatar` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `email` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `notes` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `status` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `ip` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `avatar` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `gravatar` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `email` varchar(60) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `name` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `notes` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `status` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `active` tinyint UNSIGNED NOT NULL, `tie` int NOT NULL, `ti` int UNSIGNED NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -100,131 +106,131 @@ CREATE TABLE `config` ( `maintenance` int NOT NULL, `comingsoon` int NOT NULL, `hoster` tinyint(1) NOT NULL, - `hosterURL` tinytext COLLATE utf8_bin NOT NULL, - `options` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `forumOptions` varchar(32) COLLATE utf8_bin NOT NULL, - `inventoryFallbackStatus` varchar(16) COLLATE utf8_bin NOT NULL, - `defaultPage` varchar(16) COLLATE utf8_bin NOT NULL, - `theme` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoTitle` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoDescription` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoCaption` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoKeywords` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `saleHeadingvalentine` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `saleHeadingeaster` tinytext COLLATE utf8_bin NOT NULL, - `saleHeadingmothersday` tinytext COLLATE utf8_bin NOT NULL, - `saleHeadingfathersday` tinytext COLLATE utf8_bin NOT NULL, - `saleHeadingblackfriday` tinytext COLLATE utf8_bin NOT NULL, - `saleHeadinghalloween` tinytext COLLATE utf8_bin NOT NULL, - `saleHeadingsmallbusinessday` tinytext COLLATE utf8_bin NOT NULL, - `saleHeadingchristmas` tinytext COLLATE utf8_bin NOT NULL, - `metaRobots` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoRSSTitle` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoRSSNotes` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoRSSLink` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoRSSAuthor` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `hosterURL` tinytext COLLATE utf8mb3_bin NOT NULL, + `options` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `forumOptions` varchar(32) COLLATE utf8mb3_bin NOT NULL, + `inventoryFallbackStatus` varchar(16) COLLATE utf8mb3_bin NOT NULL, + `defaultPage` varchar(16) COLLATE utf8mb3_bin NOT NULL, + `theme` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoTitle` varchar(60) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoDescription` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoCaption` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoKeywords` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `saleHeadingvalentine` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `saleHeadingeaster` tinytext COLLATE utf8mb3_bin NOT NULL, + `saleHeadingmothersday` tinytext COLLATE utf8mb3_bin NOT NULL, + `saleHeadingfathersday` tinytext COLLATE utf8mb3_bin NOT NULL, + `saleHeadingblackfriday` tinytext COLLATE utf8mb3_bin NOT NULL, + `saleHeadinghalloween` tinytext COLLATE utf8mb3_bin NOT NULL, + `saleHeadingsmallbusinessday` tinytext COLLATE utf8mb3_bin NOT NULL, + `saleHeadingchristmas` tinytext COLLATE utf8mb3_bin NOT NULL, + `metaRobots` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoRSSTitle` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoRSSNotes` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoRSSLink` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoRSSAuthor` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `seoRSSti` bigint NOT NULL, - `business` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `abn` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `address` varchar(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `suburb` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `city` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `state` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `country` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `business` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `abn` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `address` varchar(80) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `suburb` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `city` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `state` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `country` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `postcode` mediumint UNSIGNED NOT NULL, - `phone` varchar(14) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `mobile` varchar(14) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `email` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phone` varchar(14) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `mobile` varchar(14) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `email` varchar(60) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `vti` int UNSIGNED NOT NULL, `sti` int UNSIGNED NOT NULL, - `dateFormat` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `dateFormat` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `email_check` int NOT NULL, `email_interval` int NOT NULL, - `email_signature` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `email_signature` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `storemessages` int NOT NULL, `message_check_interval` int NOT NULL, `chatAutoRemove` int NOT NULL, - `messengerFBCode` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `messengerFBColor` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `messengerFBGreeting` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `language` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `timezone` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `messengerFBCode` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `messengerFBColor` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `messengerFBGreeting` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `language` varchar(8) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `timezone` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `orderPayti` int UNSIGNED NOT NULL, - `orderEmailSubject` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `orderEmailLayout` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `orderEmailNotes` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `orderEmailSubject` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `orderEmailLayout` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `orderEmailNotes` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `orderEmailReadNotification` tinyint(1) NOT NULL, - `austPostAPIKey` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `gst` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `memberLimit` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `memberLimitSilver` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `memberLimitBronze` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `memberLimitGold` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `memberLimitPlatinum` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `wholesaleLimit` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `wholesaleLimitSilver` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `wholesaleLimitBronze` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `wholesaleLimitGold` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `wholesaleLimitPlatinum` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `austPostAPIKey` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `gst` varchar(4) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `memberLimit` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `memberLimitSilver` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `memberLimitBronze` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `memberLimitGold` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `memberLimitPlatinum` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `wholesaleLimit` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `wholesaleLimitSilver` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `wholesaleLimitBronze` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `wholesaleLimitGold` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `wholesaleLimitPlatinum` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `wholesaleTime` int NOT NULL, `wholesaleTimeSilver` int NOT NULL, `wholesaleTimeBronze` int NOT NULL, `wholesaleTimeGold` int NOT NULL, `wholesaleTimePlatinum` int NOT NULL, - `passwordResetLayout` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `passwordResetSubject` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `accountActivationSubject` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `accountActivationLayout` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `bookingNoteTemplate` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `bookingEmailSubject` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `bookingEmailLayout` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `passwordResetLayout` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `passwordResetSubject` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `accountActivationSubject` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `accountActivationLayout` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `bookingNoteTemplate` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `bookingEmailSubject` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `bookingEmailLayout` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `bookingEmailReadNotification` tinyint(1) NOT NULL, - `bookingAutoReplySubject` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `bookingAutoReplyLayout` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `bookingAttachment` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `bookingAgreement` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `bookingAutoReplySubject` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `bookingAutoReplyLayout` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `bookingAttachment` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `bookingAgreement` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `bookingBuffer` int NOT NULL, - `contactAutoReplySubject` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `contactAutoReplyLayout` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `contactAutoReplySubject` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `contactAutoReplyLayout` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `newslettersEmbedImages` int NOT NULL, `newslettersSendMax` int NOT NULL, `newslettersSendDelay` int NOT NULL, - `newslettersOptOutLayout` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `bank` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `bankAccountName` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `bankAccountNumber` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `bankBSB` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `payPalClientID` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `payPalSecret` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `stripe_publishkey` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `stripe_secretkey` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `defaultOrder` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT 'old', + `newslettersOptOutLayout` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `bank` varchar(60) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `bankAccountName` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `bankAccountNumber` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `bankBSB` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `payPalClientID` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `payPalSecret` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `stripe_publishkey` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `stripe_secretkey` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `defaultOrder` varchar(8) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT 'old', `showItems` int NOT NULL, `searchItems` int NOT NULL, `idleTime` int NOT NULL, - `ga_clientID` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `ga_tracking` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `ga_tagmanager` varchar(32) COLLATE utf8_bin NOT NULL, - `ga_verification` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `gd_api` varchar(64) COLLATE utf8_bin NOT NULL, - `reCaptchaClient` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `reCaptchaServer` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seo_msvalidate` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seo_yandexverification` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seo_alexaverification` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seo_domainverify` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seo_pinterestverify` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `mapapikey` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `geo_region` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `geo_placename` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `geo_position` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `geo_weatherAPI` varchar(255) COLLATE utf8_bin NOT NULL, - `php_options` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `php_APIkey` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `php_honeypot` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `php_quicklink` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `formMinTime` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `formMaxTime` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `ga_clientID` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `ga_tracking` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `ga_tagmanager` varchar(32) COLLATE utf8mb3_bin NOT NULL, + `ga_verification` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `gd_api` varchar(64) COLLATE utf8mb3_bin NOT NULL, + `reCaptchaClient` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `reCaptchaServer` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seo_msvalidate` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seo_yandexverification` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seo_alexaverification` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seo_domainverify` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seo_pinterestverify` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `mapapikey` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `geo_region` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `geo_placename` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `geo_position` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `geo_weatherAPI` varchar(255) COLLATE utf8mb3_bin NOT NULL, + `php_options` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `php_APIkey` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `php_honeypot` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `php_quicklink` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `formMinTime` varchar(8) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `formMaxTime` varchar(8) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `spamfilter` int NOT NULL, `notification_volume` int NOT NULL, `mediaMaxWidth` int NOT NULL, @@ -239,19 +245,19 @@ CREATE TABLE `config` ( `backup_ti` int NOT NULL, `uti` int NOT NULL, `uti_freq` int NOT NULL, - `update_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `update_url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `navstat` int NOT NULL, `iconsColor` int NOT NULL, - `a11yPosition` tinytext COLLATE utf8_bin NOT NULL, + `a11yPosition` tinytext COLLATE utf8mb3_bin NOT NULL, `ti` int UNSIGNED NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -- Dumping data for table `config` -- INSERT INTO `config` (`id`, `development`, `maintenance`, `comingsoon`, `hoster`, `hosterURL`, `options`, `forumOptions`, `inventoryFallbackStatus`, `defaultPage`, `theme`, `seoTitle`, `seoDescription`, `seoCaption`, `seoKeywords`, `saleHeadingvalentine`, `saleHeadingeaster`, `saleHeadingmothersday`, `saleHeadingfathersday`, `saleHeadingblackfriday`, `saleHeadinghalloween`, `saleHeadingsmallbusinessday`, `saleHeadingchristmas`, `metaRobots`, `seoRSSTitle`, `seoRSSNotes`, `seoRSSLink`, `seoRSSAuthor`, `seoRSSti`, `business`, `abn`, `address`, `suburb`, `city`, `state`, `country`, `postcode`, `phone`, `mobile`, `email`, `vti`, `sti`, `dateFormat`, `email_check`, `email_interval`, `email_signature`, `storemessages`, `message_check_interval`, `chatAutoRemove`, `messengerFBCode`, `messengerFBColor`, `messengerFBGreeting`, `language`, `timezone`, `orderPayti`, `orderEmailSubject`, `orderEmailLayout`, `orderEmailNotes`, `orderEmailReadNotification`, `austPostAPIKey`, `gst`, `memberLimit`, `memberLimitSilver`, `memberLimitBronze`, `memberLimitGold`, `memberLimitPlatinum`, `wholesaleLimit`, `wholesaleLimitSilver`, `wholesaleLimitBronze`, `wholesaleLimitGold`, `wholesaleLimitPlatinum`, `wholesaleTime`, `wholesaleTimeSilver`, `wholesaleTimeBronze`, `wholesaleTimeGold`, `wholesaleTimePlatinum`, `passwordResetLayout`, `passwordResetSubject`, `accountActivationSubject`, `accountActivationLayout`, `bookingNoteTemplate`, `bookingEmailSubject`, `bookingEmailLayout`, `bookingEmailReadNotification`, `bookingAutoReplySubject`, `bookingAutoReplyLayout`, `bookingAttachment`, `bookingAgreement`, `bookingBuffer`, `contactAutoReplySubject`, `contactAutoReplyLayout`, `newslettersEmbedImages`, `newslettersSendMax`, `newslettersSendDelay`, `newslettersOptOutLayout`, `bank`, `bankAccountName`, `bankAccountNumber`, `bankBSB`, `payPalClientID`, `payPalSecret`, `stripe_publishkey`, `stripe_secretkey`, `defaultOrder`, `showItems`, `searchItems`, `idleTime`, `ga_clientID`, `ga_tracking`, `ga_tagmanager`, `ga_verification`, `gd_api`, `reCaptchaClient`, `reCaptchaServer`, `seo_msvalidate`, `seo_yandexverification`, `seo_alexaverification`, `seo_domainverify`, `seo_pinterestverify`, `mapapikey`, `geo_region`, `geo_placename`, `geo_position`, `geo_weatherAPI`, `php_options`, `php_APIkey`, `php_honeypot`, `php_quicklink`, `formMinTime`, `formMaxTime`, `spamfilter`, `notification_volume`, `mediaMaxWidth`, `mediaMaxHeight`, `mediaMaxWidthThumb`, `mediaMaxHeightThumb`, `mediaQuality`, `templateID`, `templateQTY`, `suggestions`, `bti`, `backup_ti`, `uti`, `uti_freq`, `update_url`, `navstat`, `iconsColor`, `a11yPosition`, `ti`) VALUES -(1, 0, 0, 0, 0, '', '11111011011100001001101110111101', '0000000000000000000000000000000', 'back order', 'dashboard', 'raycraftcomputerconsultants', '', '', '', 'Clippy', '', '', '', '', '', '', '', '', 'index,follow', '', '', '', '', 0, '', '', '', '', 'Gawler', '', 'Australia', 0, '', '', '', 0, 3600, 'M jS, Y g:i A', 1425893894, 3600, '

Sent using AuroraCMS the Australian Open Source Content Management System.

', 0, 300, 0, '', '#5484ed', '', 'en-AU', 'Australia/Hobart', 1209600, 'Order {order_number}', '

Hello {first},

Please find below Order {order_number} for payment.

To make a payment, refer to the Bank Details, or click the link directly below to pay via a Payment Gateway through our Website.

{order_link}


', '', 1, '', '0', '0', '0', '0', '0', '0', '5', '5', '5', '5', '5', 0, 0, 0, 0, 0, '%3Cp%3EHi%20%7Bname%7D%2C%3C/p%3E%3Cp%3EA%20Password%20Reset%20was%20requested%2C%20it%20is%20now%3A%20%7Bpassword%7D%3C/p%3E%3Cp%3EWe%20recommend%20changing%20the%20above%20password%20after%20logging%20in.%3C/p%3E', 'Password Reset {business}.', 'Account Activation for {username} from {site}.', '

Hi {username},

Below is the Activation Link to enable your Account at {site}.
{activation_link}

The username you signed up with was: {username}

The AutoGenerated password is: {password}


If this email is in error, and you did not sign up for an Account, please take the time to contact us to let us know, or alternatively ignore this email and your email will be purged from our system in a few days.

', '

This is a test template

Backup:

 Music

 Software

 Emails


', '{business} Booking Confirmation on {date}', '

Hi {first},

\r\n\r\n

{details}

\r\n\r\n

Please check the details above, and get in touch if any need correcting.

\r\n\r\n

Kind Regards,
\r\n\r\n{business}

\r\n\r\n\r\n\r\n', 0, '{business} Booking Confirmation on {date}', '

Hi {first},

\r\n\r\n

Thank you for contacting {business}, someone will get back to you ASAP.
Please note, this email is not a confirmed booking - we will contact you to confirm the time and date of your booking.

\r\n\r\n

{externalLink}

\r\n\r\n

Kind Regards,
\r\n\r\n{business}

', '', '

By clicking this checkbox and or signing below, you agree that we are not responsible for any data loss.

', 3600, '{business} Contact Confirmation on {date}', '

Hi {first},

Thank you for contacting {business}, someone will get back to you ASAP.

Kind Regards,

{business}


', 0, 50, 5, '
\r\n
\r\n

If you don\'t wish to continue to receive these Newsletters you can Unsubscribe.

', '', '', '', '', '', '', 'test', 'test', 'new', 10, 0, 30, '', '', '', '', 'AIzaSyD88WkGT3JFrVYo-qL5bKOyIpvvx5yIf_o', '', '', '', '', '', '', '', 'pk.eyJ1IjoiZGllbWVuZGVzaWduIiwiYSI6ImNraXZ2NnR4eDBlMGUyeHF0czRmNTd1cHQifQ.35xKSiAHcPT2L7CsNfSmlw', '', '', '-41.18382187627851,146.16142272949222', '282ab8bfbbcd4fda80958b6d3184ba1d', '1011111000000000', '', '', '', '5', '60', 1, 0, 1280, 1280, 250, 250, 88, 0, 0, 0, 0, 1602516248, 0, 0, '', 1, 1, 'right top', 0); +(1, 0, 0, 0, 0, '', '11101010011100000001101110101101', '0000000000000000000000000000000', 'back order', 'dashboard', 'default', '', '', '', 'Clippy', '', '', '', '', '', '', '', '', 'index,follow', '', '', '', '', 0, 'Example Name', '000 000 000', '92 Cradle Mountain Rd', 'Wilmot', 'Wilmot', 'TAS', 'Australia', 7310, '+61367111092', '', 'diemendesign@gmail.com', 0, 3600, 'M jS, Y g:i A', 1425893894, 3600, '

Sent using AuroraCMS the Australian Open Source Content Management System.

', 0, 300, 0, '', '#5484ed', '', 'en-AU', 'Australia/Hobart', 1209600, 'Order {order_number}', '

Hi {first}!

\r\n

Thank you for your payment, and choosing to support {business}.

\r\n{downloads}\r\n{courses}\r\n

You can view your invoice here: {order_link}

\r\n

Regards,
\r\n{business}

\r\n
\r\n', '', 1, '', '0', '0', '0', '0', '0', '0', '5', '5', '5', '5', '5', 0, 0, 0, 0, 0, '%3Cp%3EHi%20%7Bname%7D%2C%3C/p%3E%3Cp%3EA%20Password%20Reset%20was%20requested%2C%20it%20is%20now%3A%20%7Bpassword%7D%3C/p%3E%3Cp%3EWe%20recommend%20changing%20the%20above%20password%20after%20logging%20in.%3C/p%3E', 'Password Reset {business}.', 'Account Activation for {username} from {site}.', '

Hi {username},

Below is the Activation Link to enable your Account at {site}.
{activation_link}

The username you signed up with was: {username}

The AutoGenerated password is: {password}


If this email is in error, and you did not sign up for an Account, please take the time to contact us to let us know, or alternatively ignore this email and your email will be purged from our system in a few days.

', '

This is a test template

Backup:

 Music

 Software

 Emails


', '{business} Booking Confirmation on {date}', '

Hi {first},

\r\n\r\n

{details}

\r\n\r\n

Please check the details above, and get in touch if any need correcting.

\r\n\r\n

Kind Regards,
\r\n\r\n{business}

\r\n\r\n\r\n\r\n', 0, '{business} Booking Confirmation on {date}', '

Hi {first},

\r\n\r\n

Thank you for contacting {business}, someone will get back to you ASAP.
Please note, this email is not a confirmed booking - we will contact you to confirm the time and date of your booking.

\r\n\r\n

{externalLink}

\r\n\r\n

Kind Regards,
\r\n\r\n{business}

', '', '

By clicking this checkbox and or signing below, you agree that we are not responsible for any data loss.

', 3600, '{business} Contact Confirmation on {date}', '

Hi {first},

Thank you for contacting {business}, someone will get back to you ASAP.

Kind Regards,

{business}


', 0, 50, 5, '
\r\n
\r\n

If you don\'t wish to continue to receive these Newsletters you can Unsubscribe.

', 'Westpac', 'D & A Suitters', '0000 0000 0000', '000000', 'test', '', 'pk_test_51JC3eiEqAm9jcrHKP7oecRmQoIYC0SioG94Nd8kCeXOFPddqfP2QVXc6d7idZU0uxuKkl4RAp3yyEGGDsUfc8GQz00o1PDZ848', 'sk_test_51JC3eiEqAm9jcrHK3o0hVEsXTJUKbfFZ7cPCgEkGLY3bUuz7yR6jXs2Fc64OzoHuOx3ZfSvDMkW2JCoJ9Xiw3cOv004v2JjyE6', 'new', 10, 0, 30, '', '', '', '', 'AIzaSyD88WkGT3JFrVYo-qL5bKOyIpvvx5yIf_o', '', '', '', '', '', '', '', 'pk.eyJ1IjoiZGllbWVuZGVzaWduIiwiYSI6ImNraXZ2NnR4eDBlMGUyeHF0czRmNTd1cHQifQ.35xKSiAHcPT2L7CsNfSmlw', '', '', '-41.18382187627851,146.16142272949222', '282ab8bfbbcd4fda80958b6d3184ba1d', '1011111000000000', '', '', '', '5', '60', 1, 0, 1280, 1280, 250, 250, 88, 0, 0, 0, 0, 1602516248, 0, 0, '', 1, 0, 'right bottom', 0); -- -------------------------------------------------------- @@ -262,101 +268,102 @@ INSERT INTO `config` (`id`, `development`, `maintenance`, `comingsoon`, `hoster` CREATE TABLE `content` ( `id` bigint UNSIGNED NOT NULL, `mid` bigint DEFAULT NULL, - `options` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '0000000000000000', + `options` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '0000000000000000', `rank` int DEFAULT '0', `rid` bigint UNSIGNED DEFAULT NULL, `uid` bigint UNSIGNED NOT NULL, - `login_user` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `login_user` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `cid` bigint UNSIGNED DEFAULT NULL, - `ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `contentType` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `schemaType` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoKeywords` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `barcode` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `fccid` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `code` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `brand` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `title` text CHARACTER SET utf8 COLLATE utf8_bin, - `urlSlug` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `sale` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `category_1` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `category_2` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `category_3` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `category_4` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `url` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exturl` varchar(256) COLLATE utf8_bin NOT NULL, - `email` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `business` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `address` varchar(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `suburb` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `city` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `state` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `country` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `ip` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `contentType` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `schemaType` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoKeywords` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `barcode` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `fccid` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `code` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `brand` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `title` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin, + `urlSlug` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `sale` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `category_1` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `category_2` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `category_3` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `category_4` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `name` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `url` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exturl` varchar(256) COLLATE utf8mb3_bin NOT NULL, + `email` varchar(60) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `business` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `address` varchar(80) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `suburb` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `city` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `state` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `country` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `postcode` mediumint UNSIGNED NOT NULL, - `phone` varchar(14) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `mobile` varchar(14) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `thumb` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `file` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `fileURL` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `fileALT` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `videoURL` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `signature` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phone` varchar(14) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `mobile` varchar(14) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `thumb` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `file` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `fileURL` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `fileALT` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `videoURL` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `signature` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `agreementCheck` int NOT NULL, - `attributionImageTitle` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `attributionImageName` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `attributionImageURL` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifISO` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifAperture` varchar(2) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifFocalLength` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifShutterSpeed` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifCamera` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifLens` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifFilename` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `attributionImageTitle` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `attributionImageName` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `attributionImageURL` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifISO` varchar(4) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifAperture` varchar(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifFocalLength` varchar(8) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifShutterSpeed` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifCamera` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifLens` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifFilename` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `exifti` bigint NOT NULL, `rrp` decimal(10,2) NOT NULL, `cost` decimal(10,2) DEFAULT '0.00', `rCost` decimal(10,2) NOT NULL, `dCost` decimal(10,2) NOT NULL, `sold` bigint NOT NULL, - `weight` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `weightunit` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT 'kg', - `width` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `widthunit` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT 'mm', - `height` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `heightunit` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT 'mm', - `length` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `lengthunit` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT 'mm', - `subject` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `notes` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `notes2` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `attributionContentName` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `attributionContentURL` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `weight` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `weightunit` varchar(8) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT 'kg', + `width` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `widthunit` varchar(8) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT 'mm', + `height` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `heightunit` varchar(8) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT 'mm', + `length` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `lengthunit` varchar(8) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT 'mm', + `subject` varchar(60) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `notes` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `notes2` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `attributionContentName` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `attributionContentURL` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `quantity` mediumint UNSIGNED NOT NULL, `cartonQuantity` mediumint NOT NULL, - `itemCondition` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `tags` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoTitle` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoCaption` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoDescription` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `metaRobots` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `status` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `stockStatus` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `itemCondition` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `tags` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoTitle` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoCaption` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoDescription` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `metaRobots` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `status` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `stockStatus` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `service` bigint UNSIGNED NOT NULL, `internal` tinyint UNSIGNED NOT NULL, `featured` tinyint UNSIGNED NOT NULL, `bookable` tinyint(1) NOT NULL, `fti` bigint UNSIGNED NOT NULL, - `assoc` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `assoc` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `ord` bigint UNSIGNED NOT NULL, `views` bigint UNSIGNED NOT NULL, `points` int NOT NULL, `rating` int NOT NULL, + `attempts` int NOT NULL, `suggestions` int NOT NULL, - `checklist` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '0000000000000000', + `checklist` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '0000000000000000', `active` tinyint UNSIGNED NOT NULL, `coming` tinyint NOT NULL DEFAULT '0', - `geo_position` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `geo_position` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `pin` tinyint(1) NOT NULL, `tis` bigint UNSIGNED NOT NULL, `tie` bigint UNSIGNED NOT NULL, @@ -365,7 +372,24 @@ CREATE TABLE `content` ( `eti` bigint NOT NULL, `pti` bigint NOT NULL, `templatelist` bigint NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `courseTrack` +-- + +CREATE TABLE `courseTrack` ( + `id` bigint NOT NULL, + `rid` bigint NOT NULL, + `uid` bigint NOT NULL, + `complete` varchar(16) COLLATE utf8mb3_bin NOT NULL, + `progress` int NOT NULL, + `attempts` int NOT NULL, + `score` int NOT NULL, + `ti` int NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -376,14 +400,14 @@ CREATE TABLE `content` ( CREATE TABLE `forumCategory` ( `id` bigint NOT NULL, `rank` int NOT NULL, - `title` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `notes` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `title` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `notes` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `is_category` int NOT NULL, `ti` int NOT NULL, `pin` int NOT NULL, `help` int NOT NULL, `ord` bigint NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -398,15 +422,15 @@ CREATE TABLE `forumPosts` ( `tid` bigint NOT NULL, `pid` bigint NOT NULL, `uid` bigint NOT NULL, - `title` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `notes` text COLLATE utf8_bin NOT NULL, + `title` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `notes` text COLLATE utf8mb3_bin NOT NULL, `views` bigint NOT NULL, `vote` bigint NOT NULL, `pin` int NOT NULL, `help` int NOT NULL, - `status` varchar(16) COLLATE utf8_bin NOT NULL, + `status` varchar(16) COLLATE utf8mb3_bin NOT NULL, `ti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -420,8 +444,8 @@ CREATE TABLE `forumPostTrack` ( `tid` bigint NOT NULL, `pid` bigint NOT NULL, `uid` bigint NOT NULL, - `notes` tinytext COLLATE utf8_bin NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; + `notes` tinytext COLLATE utf8mb3_bin NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -432,15 +456,15 @@ CREATE TABLE `forumPostTrack` ( CREATE TABLE `forumTopics` ( `id` bigint NOT NULL, `rank` int NOT NULL, - `title` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `notes` tinytext COLLATE utf8_bin NOT NULL, + `title` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `notes` tinytext COLLATE utf8mb3_bin NOT NULL, `cid` bigint NOT NULL, `uid` bigint NOT NULL, `ti` int NOT NULL, `pin` int NOT NULL, `help` int NOT NULL, `ord` bigint NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -452,8 +476,8 @@ CREATE TABLE `forumVoteTrack` ( `id` bigint NOT NULL, `pid` bigint NOT NULL, `uid` bigint NOT NULL, - `notes` tinytext COLLATE utf8_bin NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; + `notes` tinytext COLLATE utf8mb3_bin NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -463,12 +487,12 @@ CREATE TABLE `forumVoteTrack` ( CREATE TABLE `iplist` ( `id` bigint NOT NULL, - `ip` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `ip` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `oti` int NOT NULL, - `reason` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `reason` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `permanent` tinyint(1) NOT NULL, `ti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -479,17 +503,17 @@ CREATE TABLE `iplist` ( CREATE TABLE `livechat` ( `id` bigint NOT NULL, `aid` bigint NOT NULL, - `sid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `who` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `email` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `notes` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `ip` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `user_agent` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `sid` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `who` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `name` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `email` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `notes` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `ip` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `user_agent` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `phpChecked` int DEFAULT NULL, - `status` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `status` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `ti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -499,72 +523,72 @@ CREATE TABLE `livechat` ( CREATE TABLE `login` ( `id` bigint UNSIGNED NOT NULL, - `options` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '00000000000000000000000000000000', - `theme` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `options` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '00000000000000000000000000000000', + `theme` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `bio` tinyint(1) NOT NULL, - `bio_options` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '00000000000000000000000000000000', - `username` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `password` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `tags` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `cover` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `coverURL` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `attributionImageTitle` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `attributionImageName` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `attributionImageURL` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `avatar` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `gravatar` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `business` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `email` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `www` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `bio_options` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '00000000000000000000000000000000', + `username` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `password` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `tags` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `cover` varchar(60) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `coverURL` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `attributionImageTitle` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `attributionImageName` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `attributionImageURL` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `avatar` varchar(60) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `gravatar` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `business` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `name` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `email` varchar(60) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `www` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `experience` int NOT NULL, - `hash` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `emailPassword` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `hash` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `emailPassword` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `email_check` int NOT NULL, `liveChatNotification` int NOT NULL, - `email_signature` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `url` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `address` varchar(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `suburb` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `city` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `state` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `email_signature` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `url` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `address` varchar(80) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `suburb` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `city` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `state` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `postcode` mediumint UNSIGNED NOT NULL, - `country` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `abn` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `phone` varchar(14) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `mobile` varchar(14) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `caption` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoDescription` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `notes` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `resume_notes` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `status` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `country` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `abn` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `phone` varchar(14) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `mobile` varchar(14) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `caption` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoDescription` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `notes` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `resume_notes` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `status` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `active` tinyint UNSIGNED NOT NULL, `helpResponder` tinyint(1) NOT NULL, - `activate` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `activate` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `newsletter` int NOT NULL DEFAULT '0', - `language` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `timezone` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `language` varchar(8) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `timezone` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `rank` int UNSIGNED NOT NULL, - `discount` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `discount` varchar(4) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `spent` decimal(10,2) NOT NULL, `points` int NOT NULL, - `purchaseLimit` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `purchaseLimit` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `purchaseTime` int NOT NULL, - `infoHash` varchar(32) COLLATE utf8_bin NOT NULL, + `infoHash` varchar(32) COLLATE utf8mb3_bin NOT NULL, `hostCost` decimal(8,2) NOT NULL, `siteCost` decimal(8,2) NOT NULL, - `hostStatus` varchar(16) COLLATE utf8_bin NOT NULL, - `siteStatus` varchar(16) COLLATE utf8_bin NOT NULL, + `hostStatus` varchar(16) COLLATE utf8mb3_bin NOT NULL, + `siteStatus` varchar(16) COLLATE utf8mb3_bin NOT NULL, `lti` int NOT NULL, `hti` int NOT NULL, `sti` int NOT NULL, `accountsContact` tinyint(1) NOT NULL, - `userAgent` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `userIP` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `userAgent` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `userIP` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `pti` int NOT NULL, `ord` bigint NOT NULL, `ti` int UNSIGNED NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -576,17 +600,17 @@ CREATE TABLE `logs` ( `id` bigint NOT NULL, `uid` bigint NOT NULL, `rid` bigint NOT NULL, - `username` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `view` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `contentType` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `refTable` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `refColumn` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `username` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `name` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `view` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `contentType` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `refTable` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `refColumn` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `oldda` longblob, `newda` longblob NOT NULL, - `action` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `action` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `ti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -599,33 +623,33 @@ CREATE TABLE `media` ( `rank` int DEFAULT '0', `pid` bigint NOT NULL, `rid` bigint NOT NULL, - `file` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `fileALT` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `title` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `category_1` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `category_2` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `category_3` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `category_4` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `attributionImageName` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `attributionImageURL` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifISO` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifAperture` varchar(2) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifFocalLength` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifShutterSpeed` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifCamera` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifLens` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `exifFilename` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `file` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `fileALT` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `title` varchar(60) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `category_1` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `category_2` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `category_3` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `category_4` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `attributionImageName` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `attributionImageURL` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifISO` varchar(4) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifAperture` varchar(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifFocalLength` varchar(8) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifShutterSpeed` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifCamera` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifLens` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `exifFilename` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `exifti` int NOT NULL, - `tags` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoTitle` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoCaption` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoDescription` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `status` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `tags` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoTitle` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoCaption` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoDescription` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `status` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `views` bigint NOT NULL, `suggestions` int NOT NULL, `ord` bigint NOT NULL, `ti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -638,80 +662,81 @@ CREATE TABLE `menu` ( `rank` int DEFAULT NULL, `mid` bigint NOT NULL DEFAULT '0', `uid` bigint NOT NULL, - `options` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '00000000', - `login_user` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `title` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `heading` tinytext COLLATE utf8_bin NOT NULL, - `seoTitle` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `metaRobots` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `file` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `fileALT` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `cover` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `coverURL` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `coverVideo` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `sliderOptions` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '0000000000000000', - `sliderDirection` tinytext COLLATE utf8_bin NOT NULL, - `sliderEffect` tinytext COLLATE utf8_bin NOT NULL, + `options` varchar(8) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '00000000', + `login_user` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `title` varchar(60) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `heading` tinytext COLLATE utf8mb3_bin NOT NULL, + `seoTitle` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + `metaRobots` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `file` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `fileALT` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `cover` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `coverURL` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `coverVideo` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `sliderOptions` varchar(16) COLLATE utf8mb3_bin NOT NULL DEFAULT '0000000000000000', + `sliderDirection` tinytext COLLATE utf8mb3_bin NOT NULL, + `sliderEffect` tinytext COLLATE utf8mb3_bin NOT NULL, `sliderSpeed` int NOT NULL DEFAULT '300', `sliderAutoplayDelay` int NOT NULL DEFAULT '3000', - `attributionImageTitle` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `attributionImageName` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `attributionImageURL` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `contentType` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `schemaType` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoKeywords` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoDescription` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `seoCaption` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `menu` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `notes` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `attributionImageTitle` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `attributionImageName` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `attributionImageURL` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `contentType` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `schemaType` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoKeywords` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoDescription` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `seoCaption` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `menu` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `notes` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `ord` bigint UNSIGNED NOT NULL, - `checklist` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '0000000000000000', + `checklist` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '0000000000000000', `active` tinyint UNSIGNED NOT NULL, `views` bigint NOT NULL, `suggestions` int NOT NULL, `tie` int NOT NULL, `eti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -- Dumping data for table `menu` -- INSERT INTO `menu` (`id`, `rank`, `mid`, `uid`, `options`, `login_user`, `title`, `heading`, `seoTitle`, `metaRobots`, `url`, `file`, `fileALT`, `cover`, `coverURL`, `coverVideo`, `sliderOptions`, `sliderDirection`, `sliderEffect`, `sliderSpeed`, `sliderAutoplayDelay`, `attributionImageTitle`, `attributionImageName`, `attributionImageURL`, `contentType`, `schemaType`, `seoKeywords`, `seoDescription`, `seoCaption`, `menu`, `notes`, `ord`, `checklist`, `active`, `views`, `suggestions`, `tie`, `eti`) VALUES -(1, 0, 0, 1, '00000000', 'Dennis Suitters', 'Home', 'Fast friendly reliable skip bin service.', '', '', '', 'index', '', 'http://localhost/AuroraCMS2/media/headslide.jpg', '', '', '0111110000000000', 'horizontal', 'fade', 300, 3000, '', '', '', 'index', '', 'wood,turning,woodturned,timber,open,source,photography,digital,artwork,websit,design,development', '', '', 'head', '

Fast friendly reliable skip bin service.

We are a Perth based family business covering most suburbs. Most of our bins have doors at no extra charge, this means easy access for those heavier items.

All bins are up to 7 days hire as standard, with options for longer hire times if required 

With our smaller truck we can get into some of those harder to get to places, getting your hired skip bin closer to the job and work area.

For bookings and prices please call or message 0422522789 and we will respond ASAP, otherwise try our bookings page.

\r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r ', 0, '0000000000000000', 1, 533, 0, 0, 1650893975), -(2, 0, 0, 1, '00000000', 'Dennis Suitters', 'Blog', 'Blog Heading', '', '', '', 'article', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'article', '', '', '', '', 'head', '

Paddock bottlo ugg boots fair go, mate fossicker. Mickey mouse mate esky ciggy roadie boardies cream stonkered. Icy pole bikie slacker as busy as a give it a burl. Pissed bitzer rort blind outback defo galah fairy floss bradman. Bruce how stickybeak ya cut lunch booze bus how. Chock a block hottie daks sleepout pash pretty spiffy built like a holden skite coppers. Carrying on like a pork chop dero gyno bloody oath ciggies dead horse jumbuck bail up dill. Cockie ridgy-didge cane toad strewth ripper better than a ham sandwich fair crack of the whip bonzer. Ankle biter longneck slab whinge not my bowl of rice booze true blue mad as a gobful up the duff accadacca ironman. Dero what\'s the john dory? lollies struth strides buggered up the duff chokkie. Heaps vinnie\'s joey outback paddock crikey blow in the bag. Shazza skite ropeable lippy freo six of one, half a dozen of the other flick beauty. When amber fluid tucker full blown fly wire head like a dropped pie barrack avo slaps catcus spewin\'. Knickers dead horse put a sock in it buck\'s night shoot through bushie rollie fisho bogan donga.

Roo bundy whinge gobful and holy dooley bodgy root rat. Budgie smugglers lets get some brekkie compo brolly cut lunch commando flanno. Crikey bikie u-ie lizard drinking rello freo. Offsider throw-down jillaroo ciggy bastards skite. Leg it crow eaters rotten to skite ciggies drongo. No worries trackie dacks hottie clacker ocker truckie. Rotten bunyip toads dob fair suck of the sauce bottle stonkered accadacca. Whinge cane toad a few sandwiches short of a picnic christmas as cunning as a gutful of bradman.

He hasn\'t got a rollie bushranger oi she\'ll be right. Bazza turps boardies truckie bonzer. Smokes better than a kick up the backside ambo aerial pingpong. Tell him he\'s dreaming fairy floss dole bludger wouldn\'t piss on them if they\'re on fire. Longneck blowie leg it off chops bingle lets get some tosser avo bloody. Squizz blimey buckley\'s chance thunderbox deadset he\'s dreaming. Dry as as dead dingo\'s donga struth fairy floss stubby oi as stands out like dry as as dead dingo\'s donga fair go, mate. G\'day bushranger donger apples pozzy strides crack the shits built like a squizz good oil better than a kick up the backside reckon. Flake thongs sandgroppers u-ie chuck a spaz ace cockie. Donga bush bash furthy donga brolly beauty barbie tucker-bag as cunning as a.

', 6, '0000000000000000', 1, 29, 0, 0, 1631882095), -(3, 0, 0, 1, '00000000', 'Dennis Suitters', 'Portfolio', '', '', '', '', 'portfolio', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'portfolio', '', '', '', '', 'head', '', 10, '0000000000000000', 0, 2, 0, 0, 1624603960), -(4, 0, 0, 1, '00000000', 'Dennis Suitters', 'Bookings', 'Bookings Page', '', '', '', 'bookings', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'bookings', '', '', '', '', 'head', '

Loose cannon struth ratbag hit the frog and toad no wuckin\' furries dunny deadset carry on like a pork chop. Bottle-o you little ripper she\'ll be right cobber. Rage on better than a kick up the backside garbo boogie board flick and. Better than a ham sandwich no wuckin\' furries bail up prezzy boogie board mates. Dry as as dead dingo\'s donga brass razoo shark biscuit brolly bingle freckle. Ratbag two up avos knackered defo. Skull trackies chook butcher loose cannon blue pash not my cup of tea sheila what\'s crackin\' rage on footy. Ankle biter cut snake sunnies chin wag coppers fair dinkum. Maccas bloody hard yakka fossicker. Dardy bottlo amber fluid porky lippy.

Blow in the bag outback slappa home grown where cracker dill suss it out. Up the duff g\'day dinky-di grab us a catcus lappy. Mullet onya bike tucker-bag a few sandwiches short of a picnic roo bar freo vb. Deadset tucker plonk fairy floss. Tucker-bag bloke servo bloke grouse. Battler flanny a few sandwiches short of a picnic also pozzy jumbuck defo pav.

Compo sandgropper grouse crow eaters. Digger pull the wool over their eyes cark it goon bag. Chock a block parma doovalacky bonza oi heaps stickybeak. Dag ugg boots corker mate\'s rates shoey. Ten clicks away furthy rapt pav fair suck of the sauce bottle chuck a spaz how. Bloody ripper rack off fisho boil-over skull aussie salute milk bar mates eureka as dry as a lippy dardy. Ken oath middy bities spit the dummy shag on a rock bloody oath.

Dero shazza got us some metho brizzie tucker-bag mickey mouse mate rock up offsider carry on like a pork chop. Cobber iffy swag bingle bushman\'s handkerchief bastard chock a block decent nik pull the wool over their eyes. Tradie better than a kick up the backside throw-down laughing gear middy fremantle doctor kindie. Shazza sickie footy slaps as dry as a gutta. Brass razoo ciggies arvo thunderbox gutta dog\'s breakfast furthy. Sick drongo fruit loop accadacca buckley\'s chance offsider nuddy chewie stubby pissed suss it out bradman. Slacker bushranger goon bag barbie chuck a yewy carrying on like a pork chop dead horse bushman\'s handkerchief smokes. Shazza built like a bazza ugg piss up dog\'s eye come a tosser road train taking the piss. Butcher schooner goon whit shazza got us some middy prezzy lollies.

Pozzy leg it chunder mozzie. Throw-down longneck parma going off. Avo brizzie to he\'s got a massive he\'s dreaming. Cark it trackie dacks footy moolah bogged skeg piker shoey. Bush he\'s got a massive thunderbox piss off. Brisvegas like a madwoman\'s shit down under billy. Flamin\' good oil as dry as a sook hottie.

', 1, '0000000000000000', 1, 4, 0, 0, 1648201601), -(5, 0, 0, 1, '00000000', 'Dennis Suitters', 'Events', '', '', '', '', 'events', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'events', '', '', '', '', 'head', '', 11, '0000000000000000', 1, 1, 0, 0, 1649512297), +(1, 0, 0, 1, '00000000', 'Dennis Suitters', 'Home', 'We are Diemen Design, Creators of Beautiful and Iconic Tasmanian Handcrafted and Timber Items from Tasmania.', '', '', '', 'index', 'Live Lightly Centre Reception', '', '', '', '0111110000000000', 'horizontal', 'fade', 300, 3000, '', '', '', 'index', '', 'wood,turning,woodturned,timber,open,source,photography,digital,artwork,websit,design,development', '', '', 'head', '

Diemen Design $100.00 is a # Tasmanian (Lutruwita) based Maker Studio of Handcrafted Wood and Timber Products, producing Office, Kitchen and Home-ware Utensil's and everyday items. We endeavour to produce products that are aesthetically pleasing, easy to use and useful for everyone from all walks of life.

Our Handcrafted Products, mainly consist of Wood Turned Products, using mainly Tasmanian locally sourced timbers, in an ecological and sustainable process. We prefer to use Tree Timber material that has long been felled, taken down for safety reasons, or has fallen without intervention.

Diemen Design is situated within Happy Valley Goat Farm, where we look after Sheep, Goats and Chickens, in an eco-friendly and animal friendly manner, with the help of our Dog "Bella", our cheeky Maremma. We look after our animals better than ourselves.

Have a Listen to what it's like to be a Tasmanian Owned and run Business, presented by Brand Tasmania or follow them on Twitter.

', 0, '0000000000000000', 1, 1542, 0, 0, 1661697975), +(2, 0, 0, 1, '00000000', 'Dennis Suitters', 'Blog', 'Blog Heading', '', '', '', 'article', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'article', '', '', '', '', 'head', '

Paddock bottlo ugg boots fair go, mate fossicker. Mickey mouse mate esky ciggy roadie boardies cream stonkered. Icy pole bikie slacker as busy as a give it a burl. Pissed bitzer rort blind outback defo galah fairy floss bradman. Bruce how stickybeak ya cut lunch booze bus how. Chock a block hottie daks sleepout pash pretty spiffy built like a holden skite coppers. Carrying on like a pork chop dero gyno bloody oath ciggies dead horse jumbuck bail up dill. Cockie ridgy-didge cane toad strewth ripper better than a ham sandwich fair crack of the whip bonzer. Ankle biter longneck slab whinge not my bowl of rice booze true blue mad as a gobful up the duff accadacca ironman. Dero what\'s the john dory? lollies struth strides buggered up the duff chokkie. Heaps vinnie\'s joey outback paddock crikey blow in the bag. Shazza skite ropeable lippy freo six of one, half a dozen of the other flick beauty. When amber fluid tucker full blown fly wire head like a dropped pie barrack avo slaps catcus spewin\'. Knickers dead horse put a sock in it buck\'s night shoot through bushie rollie fisho bogan donga.

Roo bundy whinge gobful and holy dooley bodgy root rat. Budgie smugglers lets get some brekkie compo brolly cut lunch commando flanno. Crikey bikie u-ie lizard drinking rello freo. Offsider throw-down jillaroo ciggy bastards skite. Leg it crow eaters rotten to skite ciggies drongo. No worries trackie dacks hottie clacker ocker truckie. Rotten bunyip toads dob fair suck of the sauce bottle stonkered accadacca. Whinge cane toad a few sandwiches short of a picnic christmas as cunning as a gutful of bradman.

He hasn\'t got a rollie bushranger oi she\'ll be right. Bazza turps boardies truckie bonzer. Smokes better than a kick up the backside ambo aerial pingpong. Tell him he\'s dreaming fairy floss dole bludger wouldn\'t piss on them if they\'re on fire. Longneck blowie leg it off chops bingle lets get some tosser avo bloody. Squizz blimey buckley\'s chance thunderbox deadset he\'s dreaming. Dry as as dead dingo\'s donga struth fairy floss stubby oi as stands out like dry as as dead dingo\'s donga fair go, mate. G\'day bushranger donger apples pozzy strides crack the shits built like a squizz good oil better than a kick up the backside reckon. Flake thongs sandgroppers u-ie chuck a spaz ace cockie. Donga bush bash furthy donga brolly beauty barbie tucker-bag as cunning as a.

', 6, '0000000000000000', 0, 56, 0, 0, 1631882095), +(3, 0, 0, 1, '00000000', 'Dennis Suitters', 'Portfolio', '', '', '', '', 'portfolio', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'portfolio', '', '', '', '', 'head', '', 10, '0000000000000000', 0, 0, 0, 0, 1624603960), +(4, 0, 0, 1, '00000000', 'Dennis Suitters', 'Bookings', 'Bookings Page', '', '', '', 'bookings', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'bookings', '', '', '', '', 'head', '

Loose cannon struth ratbag hit the frog and toad no wuckin' furries dunny deadset carry on like a pork chop. $100.00 Bottle-o you little ripper she'll be right cobber. Rage on better than a kick up the backside garbo boogie board flick and. Better than a ham sandwich no wuckin' furries bail up prezzy boogie board mates. Dry as as dead dingo's donga brass razoo shark biscuit brolly bingle freckle. Ratbag two up avos knackered defo. Skull trackies chook butcher loose cannon blue pash not my cup of tea sheila what's crackin' rage on footy. Ankle biter cut snake sunnies chin wag coppers fair dinkum. Maccas bloody hard yakka fossicker. Dardy bottlo amber fluid porky lippy.

Blow in the bag outback slappa home grown where cracker dill suss it out. Up the duff g'day dinky-di grab us a catcus lappy. Mullet onya bike tucker-bag a few sandwiches short of a picnic roo bar freo vb. Deadset tucker plonk fairy floss. Tucker-bag bloke servo bloke grouse. Battler flanny a few sandwiches short of a picnic also pozzy jumbuck defo pav.

Compo sandgropper grouse crow eaters. Digger pull the wool over their eyes cark it goon bag. Chock a block parma doovalacky bonza oi heaps stickybeak. Dag ugg boots corker mate's rates shoey. Ten clicks away furthy rapt pav fair suck of the sauce bottle chuck a spaz how. Bloody ripper rack off fisho boil-over skull aussie salute milk bar mates eureka as dry as a lippy dardy. Ken oath middy bities spit the dummy shag on a rock bloody oath.

Dero shazza got us some metho brizzie tucker-bag mickey mouse mate rock up offsider carry on like a pork chop. Cobber iffy swag bingle bushman's handkerchief bastard chock a block decent nik pull the wool over their eyes. Tradie better than a kick up the backside throw-down laughing gear middy fremantle doctor kindie. Shazza sickie footy slaps as dry as a gutta. Brass razoo ciggies arvo thunderbox gutta dog's breakfast furthy. Sick drongo fruit loop accadacca buckley's chance offsider nuddy chewie stubby pissed suss it out bradman. Slacker bushranger goon bag barbie chuck a yewy carrying on like a pork chop dead horse bushman's handkerchief smokes. Shazza built like a bazza ugg piss up dog's eye come a tosser road train taking the piss. Butcher schooner goon whit shazza got us some middy prezzy lollies.

Pozzy leg it chunder mozzie. Throw-down longneck parma going off. Avo brizzie to he's got a massive he's dreaming. Cark it trackie dacks footy moolah bogged skeg piker shoey. Bush he's got a massive thunderbox piss off. Brisvegas like a madwoman's shit down under billy. Flamin' good oil as dry as a sook hottie.

', 1, '0000000000000000', 1, 103, 0, 0, 1651895042), +(5, 0, 0, 1, '00000000', 'Dennis Suitters', 'Events', '', '', '', '', 'events', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'events', '', '', '', '', 'head', '', 11, '0000000000000000', 0, 14, 0, 0, 1649512297), (6, 0, 0, 1, '00000000', 'Anonymous', 'News', '', '', 'index,follow', '', 'news', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'news', '', '', '', '', 'head', '', 13, '0000000000000000', 0, 0, 0, 0, 1585466222), -(7, 0, 0, 1, '00000000', 'Dennis Suitters', 'Testimonials', 'Testimonials Heading', '', '', '', 'testimonials', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'testimonials', '', '', '', '', 'head', '

Boardies she\'ll be apples blow in the bag schooner postie dole bludger dunny rat knackered rort. Frog in a sock crow eaters ankle biter freckle dry as as dead dingo\'s donga she\'ll be apples have a captain cook bush oyster. Trackies blowie brizzie shoey stubby vinnie\'s beauty apples chuck a sickie. Beauty snag chokkie better than a kick up the backside squizz piss off. Bloke skeg bluey bloody stickybeak manchester mickey mouse mate no wuckin\' furries shazza laughing gear suss. Bull bar like a madwoman\'s shit muster pelican grouse pozzy and chin wag. Road train gyno thunderbox cark it fossicker. Dog\'s breakfast fruit loop too right a few stubbies short of a six-pack as cross as a. Dipstick beauty straight to the pool room devo ford longneck. Gnarly avo bathers bail up bounce. Kelpie show pony donga bottlo galah.

', 5, '0000000000000000', 1, 1, 0, 0, 1648201613), -(8, 0, 0, 1, '00000000', 'Dennis Suitters', 'Products', 'Products Heading', '', '', '', 'inventory', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'inventory', '', '', '', '', 'head', '

Trackie dacks on the cans divvy van piss off esky as stands out like. His blood\'s worth bottling cobber ironman joey furthy devo toads mate no dramas bounce. Whinge offsider bog standard jackaroo sleepout pelican. Bail offsider bluey middy flick. Sunnies bloody oath thingo postie flanny cleanskin bingle grouse. Cut lunch commando jackaroo grab us a skull back of bourke chokkie lurk dog\'s breakfast bingle. Cranky full boar yobbo stubby holder servo gobsmacked ute. Booze bus billy dunny brisvegas good onya. Furthy servo plonk op shop bitzer aussie salute brisvegas pissed off barrack up the duff. Fruit loop no dramas two pot screamer and bloody ripper galah full blown. She\'ll be apples root rat dero flick ugg.

Amber fluid strewth iffy flat out like a. Brickie dog\'s breakfast my bodgy bail jumbuck. Dipstick heaps knock throw a shrimp on the barbie waratah feral. Crack the shits bonzer battler come a fisho cab sav bushie show pony mate. Your shout oldies rip snorter fair go, mate bloody ripper. Chin wag burk compo trackie dacks.

', 8, '0000000000000000', 1, 36, 0, 0, 1631882174), -(9, 0, 0, 1, '11000000', 'Dennis Suitters', 'Services', '', '', '', '', 'services', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'service', '', '', '', '', 'head', '', 7, '0000000000000000', 1, 4, 0, 0, 1629879786), -(10, 0, 0, 1, '00000000', 'Dennis Suitters', 'Gallery', 'Gallery Heading', '', '', '', 'gallery', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'gallery', '', '', '', '', 'head', '

Gyno off chops no worries buggered bushranger back of bourke. Shark biscuit flick flamin\' feral bush telly good oil sunnies hooroo. Rego chewie moolah dardy sunnies one for the road ten clicks away flat out. Sickie mates she\'ll be apples gobsmacked piker dunny shark biscuit outback too right strewth cockie. Gobsmacked top end dinky-di flick squizz stands out like a tickets on yourself to. Fairy floss donga also and fair suck of the sauce bottle ambo. Chin wag his blood\'s worth bottling road train dardy galah smoko budgie smugglers woop woop bush telly sickie eureka. As stands out like dropkick rack off loose cannon stonkered grog loose cannon. Dill op shop trackies kindie brisvegas.

Burk snag chokkie to chokkie bruce. Battler bundy mates ridgy-didge slab tosser fair go, mate. Beauty when yobbo bushman\'s handkerchief goon bag pissed off. Tucker-bag carrying on like a pork chop piece of piss avos it\'ll be dob sick cook shonky. Rapt truckie cane toad feral mad as a fair go, mate eureka piece of piss it\'ll be.

', 12, '0000000000000000', 1, 0, 0, 0, 1631882769), -(11, 0, 0, 1, '00000000', 'Dennis Suitters', 'Contact', 'Contact Heading', '', '', '', 'contactus', '', '', '', '', '0000000000000000', '', '', 300, 3000, 'Contact Page Attribution', 'Anonymous', 'https://diemen.design/', 'contactus', '', '', '', '', 'head', '

Bastard bruce dunny rat fisho taking the piss accadacca chuck a yewy. Kindie off chops suss what\'s crackin\' gnarly. Fair crack of the whip skeg fair go one for the road snag prezzy maccas. Tinny waggin\' school bush bash plonk. Apples skull lets throw a sunnies as busy as a. Loose cannon two pot screamer as stands out like pint ciggies.

', 9, '0000000000000000', 1, 2, 0, 0, 1648201587), -(12, 0, 0, 1, '00000000', 'Dennis Suitters', 'Cart', 'Cart Heading', '', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'cart', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'cart', '', '', '', '', 'head', '

Leg it pissed flick ford throw-down. Thunderbox garbo fair dinkum two pot screamer. Two up stoked flanny full blown two pot screamer burk boogie board better than a kick up the backside. Rock up hit the turps cut lunch commando nipper yakka. Home grown galah chook bonza ratbag. Ken oath knackered devo waggin\' school and servo. Chunder better than a ham sandwich troppo heaps gutful of. Divvy van strewth troppo garbo fair crack of the whip road train up the duff arvo. Chokkie blue bushranger aerial pingpong shonky sickie. Drongo burk goon two up flanny. Burk frothy smoko gone walkabout billabong defo. Bush bash butcher bodgy paddock two pot screamer.

', 14, '0000000000000000', 1, 0, 0, 0, 1648430722), -(13, 0, 0, 1, '00000000', 'dev', 'Terms of Service', 'Terms of Service', '', 'index,follow', '', 'page', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'page', '', '', '', '', 'footer', '

Please read these Terms of Service (\"Terms\", \"Terms of Service\") carefully before using the {url} website (the \"Service\") operated by {business} (\"us\", \"we\", or \"our\").

\r\n

Your access to and use of the Service is conditioned on your acceptance of and compliance with these Terms. These Terms apply to all visitors, users and others who access or use the Service.

\r\n

By accessing or using the Service you agree to be bound by these Terms. If you disagree with any part of the terms then you may not access the Service.

\r\n

Accounts

\r\n

When you create an account with us, you must provide us information that is accurate, complete, and current at all times. Failure to do so constitutes a breach of the Terms, which may result in immediate termination of your account on our Service.

\r\n

You are responsible for safeguarding the password that you use to access the Service and for any activities or actions under your password, whether your password is with our Service or a third-party service.

\r\n

You agree not to disclose your password to any third party. You must notify us immediately upon becoming aware of any breach of security or unauthorized use of your account.

\r\n

Links To Other Web Sites

\r\n

Our Service may contain links to third-party web sites or services that are not owned or controlled by {business}.

\r\n

{business} has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third party web sites or services. You further acknowledge and agree that {business} shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such web sites or services.

\r\n

We strongly advise you to read the terms and conditions and privacy policies of any third-party web sites or services that you visit.

\r\n

Termination

\r\n

We may terminate or suspend access to our Service immediately, without prior notice or liability, for any reason whatsoever, including without limitation if you breach the Terms.

\r\n

All provisions of the Terms which by their nature should survive termination shall survive termination, including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of liability.

\r\n

We may terminate or suspend your account immediately, without prior notice or liability, for any reason whatsoever, including without limitation if you breach the Terms.

\r\n

Upon termination, your right to use the Service will immediately cease. If you wish to terminate your account, you may simply discontinue using the Service.

\r\n

All provisions of the Terms which by their nature should survive termination shall survive termination, including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of liability.

\r\n

Governing Law

\r\n

These Terms shall be governed and construed in accordance with the laws of Tasmania, Australia, without regard to its conflict of law provisions.

\r\n

Our failure to enforce any right or provision of these Terms will not be considered a waiver of those rights. If any provision of these Terms is held to be invalid or unenforceable by a court, the remaining provisions of these Terms will remain in effect. These Terms constitute the entire agreement between us regarding our Service, and supersede and replace any prior agreements we might have between us regarding the Service.

\r\n

Changes

\r\n

We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is material we will try to provide at least 30 days notice prior to any new terms taking effect. What constitutes a material change will be determined at our sole discretion.

\r\n

By continuing to access or use our Service after those revisions become effective, you agree to be bound by the revised terms. If you do not agree to the new terms, please stop using the Service.

\r\n', 19, '0000000000000000', 1, 1, 0, 0, 1641913095), -(14, 0, 0, 1, '00000000', 'Dennis Suitters', 'Search', '', 'Search Meta title', '', '', 'search', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'search', '', '', '', '', 'other', '', 26, '0000000000000000', 1, 0, 0, 0, 1604631971), -(15, 0, 0, 1, '00000000', 'Dennis Suitters', 'About', '', '', '', '', 'aboutus', '', '', '', '', '0000000000000000', '', '', 300, 3000, 'Contact Cover Attribution', 'Anonymous', 'https://diemen.design/', 'aboutus', '', '', '', '', 'head', '

Kindie struth sleepout bonza donga banana bender. Mate yakka shazza got us some crack the shits mate sandgroppers rubbish. Trackie dacks gyno mullet give it a burl bathers to fossicker chuck a spaz. Fly wire amber fluid watch out for the pozzy ironman up yours roo. Battler pissed lizard drinking slappa. Vee dub cubby house yabber boardies apples. No wucka\'s bizzo she\'ll be apples vee dub pozzy bloody muster.

Reckon ken oath frog in a sock bities galah bazza unit ripper frog in a sock he\'s got a massive rapt. Cream yabber yakka smokes ford road train. Bikie tucker crook going off burk flanno. Trackie dacks bush bash bruce accadacca catcus. Outback lollies mates cut snake mickey mouse mate avo aussie salute feral defo. Ken oath sick shazza got us some bloody ute fair crack of the whip. Boardies mate\'s rates yabber what\'s crackin\' roo. Butcher knackered wrap your laughing gear \'round that better than a kick up the backside suss ankle biter bazza better than a kick up the backside. Footy freo grog mickey mouse mate dinky-di budgie smugglers bizzo two pot screamer. Bush gone walkabout bitzer throw a shrimp on the barbie rollie chuck a spaz ken oath. Roadie brizzie stubby holder she\'ll be right. Footy holy dooley trackies lets throw a.

Fair go, mate sunnies bodgy aerial pingpong built like a lollies vinnie\'s a cold one shoot through. Tell your story walkin\' full boar crow eaters no worries, mate, she\'ll be right. Brizzie grab us a sunnies waggin\' school ratbag vb gutful of few roos loose in the top paddock roo. Suss a few stubbies short of a six-pack christmas put a sock in it lippy. Blow in the bag damper dog\'s eye to dog\'s eye. Brekkie six of one, half a dozen of the other furthy mickey mouse mate no worries. Jillaroo top bloke digger roo bar accadacca fair dinkum burk scratchy also op shop.

', 2, '0000000000000000', 1, 14, 0, 0, 1649339424), -(16, 300, 0, 1, '00000000', 'Dennis Suitters', 'Proofs', '', 'Proofs', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'proofs', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'proofs', '', '', '', '', 'account', '', 22, '0000000000000000', 1, 0, 0, 0, 1624604287), -(17, 0, 0, 1, '00000000', 'Dennis Suitters', 'Newsletters', '', '', '', '', 'newsletters', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'newsletters', '', '', '', '', 'other', '', 24, '0000000000000000', 0, 0, 0, 0, 1646612236), -(19, 0, 0, 1, '00000000', 'Dennis Suitters', 'Distributors', 'Distributors Heading', 'Distributors', '', '', 'distributors', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'distributors', '', '', '', '', 'footer', '', 16, '0000000000000000', 1, 0, 0, 0, 1631883780), -(20, 0, 0, 1, '00000000', 'dev', 'Privacy Policy', 'Privacy Policy', '', '', '', 'page', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'page', 'Article', '', '', '', 'footer', '

{business} (\"us\", \"we\", or \"our\") operates the {url} website (hereinafter referred to as the \"Service\").

\r\n

This page informs you of our policies regarding the collection, use, and disclosure of personal data when you use our Service and the choices you have associated with that data.

\r\n

We use your data to provide and improve the Service. By using the Service, you agree to the collection and use of information in accordance with this policy.

\r\n

Definitions

\r\n
    \r\n
  • \r\n

    Service

    \r\n

    Service is the {url} website operated by {business}

    \r\n
  • \r\n
  • \r\n

    Personal Data

    \r\n

    Personal Data means data about a living individual who can be identified from those data (or from those and other information either in our possession or likely to come into our possession).

    \r\n
  • \r\n
  • \r\n

    Usage Data

    \r\n

    Usage Data is data collected automatically either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit).

    \r\n
  • \r\n
  • \r\n

    Cookies

    \r\n

    Cookies are small files stored on your device (computer or mobile device).

    \r\n
  • \r\n
\r\n

Information Collection and Use

\r\n

We collect several different types of information for various purposes to provide and improve our Service to you.

\r\n

Types of Data Collected

\r\n

Personal Data

\r\n

While using our Service, we may ask you to provide us with certain personally identifiable information that can be used to contact or identify you (\"Personal Data\"). Personally identifiable information may include, but is not limited to:

\r\n
    \r\n
  • Email address
  • \r\n
  • First name and last name
  • \r\n
  • Phone number
  • \r\n
  • Address, State, Province, ZIP/Postal code, City
  • \r\n
  • Cookies and Usage Data
  • \r\n
\r\n

Usage Data

\r\n

We may also collect information how the Service is accessed and used (\"Usage Data\"). This Usage Data may include information such as your computer\'s Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that you visit, the time and date of your visit, the time spent on those pages, unique device identifiers and other diagnostic data.

\r\n

Tracking & Cookies Data

\r\n

We use cookies and similar tracking technologies to track the activity on our Service and we hold certain information.

\r\n

Cookies are files with a small amount of data which may include an anonymous unique identifier. Cookies are sent to your browser from a website and stored on your device. Other tracking technologies are also used such as beacons, tags and scripts to collect and track information and to improve and analyse our Service.

\r\n

You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, if you do not accept cookies, you may not be able to use some portions of our Service.

\r\n

Examples of Cookies we use:

\r\n
    \r\n
  • Session Cookies. We use Session Cookies to operate our Service.
  • \r\n
  • Preference Cookies. We use Preference Cookies to remember your preferences and various settings.
  • \r\n
  • Security Cookies. We use Security Cookies for security purposes.
  • \r\n
\r\n

Use of Data

\r\n

Diemen Design uses the collected data for various purposes:

\r\n
    \r\n
  • To provide and maintain the Service
  • \r\n
  • To notify you about changes to our Service
  • \r\n
  • To allow you to participate in interactive features of our Service when you choose to do so
  • \r\n
  • To provide customer care and support
  • \r\n
  • To provide analysis or valuable information so that we can improve the Service
  • \r\n
  • To monitor the usage of the Service
  • \r\n
  • To detect, prevent and address technical issues
  • \r\n
\r\n

Transfer Of Data

\r\n

Your information, including Personal Data, may be transferred to, and maintained on computers located outside of your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from your jurisdiction.

\r\n

If you are located outside Australia and choose to provide information to us, please note that we transfer the data, including Personal Data, to Australia and process it there.

\r\n

Your consent to this Privacy Policy followed by your submission of such information represents your agreement to that transfer.

\r\n

{business} will take all steps reasonably necessary to ensure that your data is treated securely and in accordance with this Privacy Policy and no transfer of your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of your data and other personal information.

\r\n

Disclosure Of Data

\r\n

Legal Requirements

\r\n

Diemen Design may disclose your Personal Data in the good faith belief that such action is necessary to:

\r\n
    \r\n
  • To comply with a legal obligation
  • \r\n
  • To protect and defend the rights or property of Diemen Design
  • \r\n
  • To prevent or investigate possible wrongdoing in connection with the Service
  • \r\n
  • To protect the personal safety of users of the Service or the public
  • \r\n
  • To protect against legal liability
  • \r\n
\r\n

As an European citizen, under GDPR, you have certain individual rights. You can learn more about these guides in the GDPR Guide.

\r\n

Security of Data

\r\n

The security of your data is important to us but remember that no method of transmission over the Internet or method of electronic storage is 100% secure. While we strive to use commercially acceptable means to protect your Personal Data, we cannot guarantee its absolute security.

\r\n

Service Providers

\r\n

We may employ third party companies and individuals to facilitate our Service (\"Service Providers\"), to provide the Service on our behalf, to perform Service-related services or to assist us in analyzing how our Service is used.

\r\n

These third parties have access to your Personal Data only to perform these tasks on our behalf and are obligated not to disclose or use it for any other purpose.

\r\n

Links to Other Sites

\r\n

Our Service may contain links to other sites that are not operated by us. If you click a third party link, you will be directed to that third party\'s site. We strongly advise you to review the Privacy Policy of every site you visit.

\r\n

We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.

\r\n

Children\'s Privacy

\r\n

Our Service does not address anyone under the age of 18 (\"Children\").

\r\n

We do not knowingly collect personally identifiable information from anyone under the age of 18. If you are a parent or guardian and you are aware that your Child has provided us with Personal Data, please contact us. If we become aware that we have collected Personal Data from children without verification of parental consent, we take steps to remove that information from our servers.

\r\n

Changes to This Privacy Policy

\r\n

We may update our Privacy Policy from time to time.

\r\n

Changes will appear on this URL.

\r\n

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.

\r\n', 18, '0000000000000000', 1, 2, 0, 0, 1641914276), -(21, 0, 0, 1, '00000000', 'Dennis Suitters', 'Login', '', 'Login Meta Title', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'login', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'login', '', '', '', '', 'other', '', 25, '0000000000000000', 1, 12, 0, 0, 1648434730), -(22, 0, 0, 1, '00000000', 'Dennis Suitters', 'Sitemap', 'Sitemap Heading', 'Sitemap Meta Title', '', '', 'sitemap', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'sitemap', '', '', '', '', 'footer', '

Budgie smugglers ute off chops joey rack off. Whinge waggin\' school put a sock in it loose cannon yous troppo ironman stonkered larrikin. Vb flamin\' fairy floss tell him he\'s dreaming throw-down up the duff dill no dramas it\'ll be. Blimey gutful of chrissie dunny skull stands out like a roo bar heaps fly wire. Bruce knock crook sickie coathanger gutta pinga. Counter meal off chops bull bar bonzer. Rego boogie board good oil bushie damper. As cunning as a ratbag have a go, you mug jumbuck barrack slacker cracker.

', 17, '0000000000000000', 1, 0, 0, 0, 1632150630), +(7, 0, 0, 1, '00000000', 'Dennis Suitters', 'Testimonials', 'Testimonials Heading', '', '', '', 'testimonials', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'testimonials', '', '', '', '', 'head', '

Boardies she\'ll be apples blow in the bag schooner postie dole bludger dunny rat knackered rort. Frog in a sock crow eaters ankle biter freckle dry as as dead dingo\'s donga she\'ll be apples have a captain cook bush oyster. Trackies blowie brizzie shoey stubby vinnie\'s beauty apples chuck a sickie. Beauty snag chokkie better than a kick up the backside squizz piss off. Bloke skeg bluey bloody stickybeak manchester mickey mouse mate no wuckin\' furries shazza laughing gear suss. Bull bar like a madwoman\'s shit muster pelican grouse pozzy and chin wag. Road train gyno thunderbox cark it fossicker. Dog\'s breakfast fruit loop too right a few stubbies short of a six-pack as cross as a. Dipstick beauty straight to the pool room devo ford longneck. Gnarly avo bathers bail up bounce. Kelpie show pony donga bottlo galah.

', 5, '0000000000000000', 1, 37, 0, 0, 1648201613), +(8, 0, 0, 1, '00000000', 'Dennis Suitters', 'Products', 'Products Heading', '', '', '', 'inventory', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'inventory', '', '', '', '', 'head', '

Trackie dacks on the cans divvy van piss off esky as stands out like. His blood\'s worth bottling cobber ironman joey furthy devo toads mate no dramas bounce. Whinge offsider bog standard jackaroo sleepout pelican. Bail offsider bluey middy flick. Sunnies bloody oath thingo postie flanny cleanskin bingle grouse. Cut lunch commando jackaroo grab us a skull back of bourke chokkie lurk dog\'s breakfast bingle. Cranky full boar yobbo stubby holder servo gobsmacked ute. Booze bus billy dunny brisvegas good onya. Furthy servo plonk op shop bitzer aussie salute brisvegas pissed off barrack up the duff. Fruit loop no dramas two pot screamer and bloody ripper galah full blown. She\'ll be apples root rat dero flick ugg.

Amber fluid strewth iffy flat out like a. Brickie dog\'s breakfast my bodgy bail jumbuck. Dipstick heaps knock throw a shrimp on the barbie waratah feral. Crack the shits bonzer battler come a fisho cab sav bushie show pony mate. Your shout oldies rip snorter fair go, mate bloody ripper. Chin wag burk compo trackie dacks.

', 8, '0000000000000000', 1, 453, 0, 0, 1631882174), +(9, 0, 0, 1, '11000000', 'Dennis Suitters', 'Services', '', '', '', '', 'services', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'service', '', '', '', '', 'head', '', 7, '0000000000000000', 0, 0, 0, 0, 1629879786), +(10, 0, 0, 1, '00000000', 'Dennis Suitters', 'Gallery', 'Gallery Heading', '', '', '', 'gallery', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'gallery', '', '', '', '', 'head', '

Gyno off chops no worries buggered bushranger back of bourke. Shark biscuit flick flamin\' feral bush telly good oil sunnies hooroo. Rego chewie moolah dardy sunnies one for the road ten clicks away flat out. Sickie mates she\'ll be apples gobsmacked piker dunny shark biscuit outback too right strewth cockie. Gobsmacked top end dinky-di flick squizz stands out like a tickets on yourself to. Fairy floss donga also and fair suck of the sauce bottle ambo. Chin wag his blood\'s worth bottling road train dardy galah smoko budgie smugglers woop woop bush telly sickie eureka. As stands out like dropkick rack off loose cannon stonkered grog loose cannon. Dill op shop trackies kindie brisvegas.

Burk snag chokkie to chokkie bruce. Battler bundy mates ridgy-didge slab tosser fair go, mate. Beauty when yobbo bushman\'s handkerchief goon bag pissed off. Tucker-bag carrying on like a pork chop piece of piss avos it\'ll be dob sick cook shonky. Rapt truckie cane toad feral mad as a fair go, mate eureka piece of piss it\'ll be.

', 12, '0000000000000000', 1, 26, 0, 0, 1631882769), +(11, 0, 0, 1, '00000000', 'Dennis Suitters', 'Contact', 'Contact Heading', '', '', '', 'contactus', '', '', '', '', '0000000000000000', '', '', 300, 3000, 'Contact Page Attribution', 'Anonymous', 'https://diemen.design/', 'contactus', '', '', '', '', 'head', '

Bastard bruce dunny rat fisho taking the piss accadacca chuck a yewy. Kindie off chops suss what\'s crackin\' gnarly. Fair crack of the whip skeg fair go one for the road snag prezzy maccas. Tinny waggin\' school bush bash plonk. Apples skull lets throw a sunnies as busy as a. Loose cannon two pot screamer as stands out like pint ciggies.

', 9, '0000000000000000', 1, 74, 0, 0, 1648201587), +(12, 0, 0, 1, '00000000', 'Dennis Suitters', 'Cart', 'Cart Heading', '', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'cart', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'cart', '', '', '', '', 'head', '

Leg it pissed flick ford throw-down. Thunderbox garbo fair dinkum two pot screamer. Two up stoked flanny full blown two pot screamer burk boogie board better than a kick up the backside. Rock up hit the turps cut lunch commando nipper yakka. Home grown galah chook bonza ratbag. Ken oath knackered devo waggin\' school and servo. Chunder better than a ham sandwich troppo heaps gutful of. Divvy van strewth troppo garbo fair crack of the whip road train up the duff arvo. Chokkie blue bushranger aerial pingpong shonky sickie. Drongo burk goon two up flanny. Burk frothy smoko gone walkabout billabong defo. Bush bash butcher bodgy paddock two pot screamer.

', 14, '0000000000000000', 1, 436, 0, 0, 1648430722), +(13, 0, 0, 1, '00000000', 'dev', 'Terms of Service', 'Terms of Service', '', 'index,follow', '', 'page', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'page', '', '', '', '', 'footer', '

Please read these Terms of Service (\"Terms\", \"Terms of Service\") carefully before using the {url} website (the \"Service\") operated by {business} (\"us\", \"we\", or \"our\").

\r\n

Your access to and use of the Service is conditioned on your acceptance of and compliance with these Terms. These Terms apply to all visitors, users and others who access or use the Service.

\r\n

By accessing or using the Service you agree to be bound by these Terms. If you disagree with any part of the terms then you may not access the Service.

\r\n

Accounts

\r\n

When you create an account with us, you must provide us information that is accurate, complete, and current at all times. Failure to do so constitutes a breach of the Terms, which may result in immediate termination of your account on our Service.

\r\n

You are responsible for safeguarding the password that you use to access the Service and for any activities or actions under your password, whether your password is with our Service or a third-party service.

\r\n

You agree not to disclose your password to any third party. You must notify us immediately upon becoming aware of any breach of security or unauthorized use of your account.

\r\n

Links To Other Web Sites

\r\n

Our Service may contain links to third-party web sites or services that are not owned or controlled by {business}.

\r\n

{business} has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third party web sites or services. You further acknowledge and agree that {business} shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such web sites or services.

\r\n

We strongly advise you to read the terms and conditions and privacy policies of any third-party web sites or services that you visit.

\r\n

Termination

\r\n

We may terminate or suspend access to our Service immediately, without prior notice or liability, for any reason whatsoever, including without limitation if you breach the Terms.

\r\n

All provisions of the Terms which by their nature should survive termination shall survive termination, including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of liability.

\r\n

We may terminate or suspend your account immediately, without prior notice or liability, for any reason whatsoever, including without limitation if you breach the Terms.

\r\n

Upon termination, your right to use the Service will immediately cease. If you wish to terminate your account, you may simply discontinue using the Service.

\r\n

All provisions of the Terms which by their nature should survive termination shall survive termination, including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of liability.

\r\n

Governing Law

\r\n

These Terms shall be governed and construed in accordance with the laws of Tasmania, Australia, without regard to its conflict of law provisions.

\r\n

Our failure to enforce any right or provision of these Terms will not be considered a waiver of those rights. If any provision of these Terms is held to be invalid or unenforceable by a court, the remaining provisions of these Terms will remain in effect. These Terms constitute the entire agreement between us regarding our Service, and supersede and replace any prior agreements we might have between us regarding the Service.

\r\n

Changes

\r\n

We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is material we will try to provide at least 30 days notice prior to any new terms taking effect. What constitutes a material change will be determined at our sole discretion.

\r\n

By continuing to access or use our Service after those revisions become effective, you agree to be bound by the revised terms. If you do not agree to the new terms, please stop using the Service.

\r\n', 20, '0000000000000000', 1, 11, 0, 0, 1641913095), +(14, 0, 0, 1, '00000000', 'Dennis Suitters', 'Search', '', 'Search Meta title', '', '', 'search', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'search', '', '', '', '', 'other', '', 28, '0000000000000000', 1, 19, 0, 0, 1604631971), +(15, 0, 0, 1, '00000000', 'Dennis Suitters', 'About', '', '', '', '', 'aboutus', '', '', '', '', '0000000000000000', '', '', 300, 3000, 'Contact Cover Attribution', 'Anonymous', 'https://diemen.design/', 'aboutus', '', '', '', '', 'head', '

Kindie struth sleepout bonza donga banana bender. Mate yakka shazza got us some crack the shits mate sandgroppers rubbish. Trackie dacks gyno mullet give it a burl bathers to fossicker chuck a spaz. Fly wire amber fluid watch out for the pozzy ironman up yours roo. Battler pissed lizard drinking slappa. Vee dub cubby house yabber boardies apples. No wucka's bizzo she'll be apples vee dub pozzy bloody muster.

Reckon ken oath frog in a sock bities galah bazza unit ripper frog in a sock he's got a massive rapt. Cream yabber yakka smokes ford road train. Bikie tucker crook going off burk flanno. Trackie dacks bush bash bruce accadacca catcus. Outback lollies mates cut snake mickey mouse mate avo aussie salute feral defo. Ken oath sick shazza got us some bloody ute fair crack of the whip. Boardies mate's rates yabber what's crackin' roo. Butcher knackered wrap your laughing gear 'round that better than a kick up the backside suss ankle biter bazza better than a kick up the backside. Footy freo grog mickey mouse mate dinky-di budgie smugglers bizzo two pot screamer. Bush gone walkabout bitzer throw a shrimp on the barbie rollie chuck a spaz ken oath. Roadie brizzie stubby holder she'll be right. Footy holy dooley trackies lets throw a.

Fair go, mate sunnies bodgy aerial pingpong built like a lollies vinnie's a cold one shoot through. Tell your story walkin' full boar crow eaters no worries, mate, she'll be right. Brizzie grab us a sunnies waggin' school ratbag vb gutful of few roos loose in the top paddock roo. Suss a few stubbies short of a six-pack christmas put a sock in it lippy. Blow in the bag damper dog's eye to dog's eye. Brekkie six of one, half a dozen of the other furthy mickey mouse mate no worries. Jillaroo top bloke digger roo bar accadacca fair dinkum burk scratchy also op shop.

', 2, '0000000000000000', 1, 61, 0, 0, 1654933931), +(16, 300, 0, 1, '00000000', 'Dennis Suitters', 'Proofs', '', 'Proofs', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'proofs', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'proofs', '', '', '', '', 'account', '', 24, '0000000000000000', 1, 9, 0, 0, 1624604287), +(17, 0, 0, 1, '00000000', 'Dennis Suitters', 'Newsletters', '', '', '', '', 'newsletters', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'newsletters', '', '', '', '', 'other', '', 26, '0000000000000000', 0, 0, 0, 0, 1646612236), +(19, 0, 0, 1, '00000000', 'Dennis Suitters', 'Distributors', 'Distributors Heading', 'Distributors', '', '', 'distributors', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'distributors', '', '', '', '', 'footer', '', 17, '0000000000000000', 1, 6, 0, 0, 1631883780), +(20, 0, 0, 1, '00000000', 'dev', 'Privacy Policy', 'Privacy Policy', '', '', '', 'page', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'page', 'Article', '', '', '', 'footer', '

{business} (\"us\", \"we\", or \"our\") operates the {url} website (hereinafter referred to as the \"Service\").

\r\n

This page informs you of our policies regarding the collection, use, and disclosure of personal data when you use our Service and the choices you have associated with that data.

\r\n

We use your data to provide and improve the Service. By using the Service, you agree to the collection and use of information in accordance with this policy.

\r\n

Definitions

\r\n
    \r\n
  • \r\n

    Service

    \r\n

    Service is the {url} website operated by {business}

    \r\n
  • \r\n
  • \r\n

    Personal Data

    \r\n

    Personal Data means data about a living individual who can be identified from those data (or from those and other information either in our possession or likely to come into our possession).

    \r\n
  • \r\n
  • \r\n

    Usage Data

    \r\n

    Usage Data is data collected automatically either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit).

    \r\n
  • \r\n
  • \r\n

    Cookies

    \r\n

    Cookies are small files stored on your device (computer or mobile device).

    \r\n
  • \r\n
\r\n

Information Collection and Use

\r\n

We collect several different types of information for various purposes to provide and improve our Service to you.

\r\n

Types of Data Collected

\r\n

Personal Data

\r\n

While using our Service, we may ask you to provide us with certain personally identifiable information that can be used to contact or identify you (\"Personal Data\"). Personally identifiable information may include, but is not limited to:

\r\n
    \r\n
  • Email address
  • \r\n
  • First name and last name
  • \r\n
  • Phone number
  • \r\n
  • Address, State, Province, ZIP/Postal code, City
  • \r\n
  • Cookies and Usage Data
  • \r\n
\r\n

Usage Data

\r\n

We may also collect information how the Service is accessed and used (\"Usage Data\"). This Usage Data may include information such as your computer\'s Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that you visit, the time and date of your visit, the time spent on those pages, unique device identifiers and other diagnostic data.

\r\n

Tracking & Cookies Data

\r\n

We use cookies and similar tracking technologies to track the activity on our Service and we hold certain information.

\r\n

Cookies are files with a small amount of data which may include an anonymous unique identifier. Cookies are sent to your browser from a website and stored on your device. Other tracking technologies are also used such as beacons, tags and scripts to collect and track information and to improve and analyse our Service.

\r\n

You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, if you do not accept cookies, you may not be able to use some portions of our Service.

\r\n

Examples of Cookies we use:

\r\n
    \r\n
  • Session Cookies. We use Session Cookies to operate our Service.
  • \r\n
  • Preference Cookies. We use Preference Cookies to remember your preferences and various settings.
  • \r\n
  • Security Cookies. We use Security Cookies for security purposes.
  • \r\n
\r\n

Use of Data

\r\n

Diemen Design uses the collected data for various purposes:

\r\n
    \r\n
  • To provide and maintain the Service
  • \r\n
  • To notify you about changes to our Service
  • \r\n
  • To allow you to participate in interactive features of our Service when you choose to do so
  • \r\n
  • To provide customer care and support
  • \r\n
  • To provide analysis or valuable information so that we can improve the Service
  • \r\n
  • To monitor the usage of the Service
  • \r\n
  • To detect, prevent and address technical issues
  • \r\n
\r\n

Transfer Of Data

\r\n

Your information, including Personal Data, may be transferred to, and maintained on computers located outside of your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from your jurisdiction.

\r\n

If you are located outside Australia and choose to provide information to us, please note that we transfer the data, including Personal Data, to Australia and process it there.

\r\n

Your consent to this Privacy Policy followed by your submission of such information represents your agreement to that transfer.

\r\n

{business} will take all steps reasonably necessary to ensure that your data is treated securely and in accordance with this Privacy Policy and no transfer of your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of your data and other personal information.

\r\n

Disclosure Of Data

\r\n

Legal Requirements

\r\n

Diemen Design may disclose your Personal Data in the good faith belief that such action is necessary to:

\r\n
    \r\n
  • To comply with a legal obligation
  • \r\n
  • To protect and defend the rights or property of Diemen Design
  • \r\n
  • To prevent or investigate possible wrongdoing in connection with the Service
  • \r\n
  • To protect the personal safety of users of the Service or the public
  • \r\n
  • To protect against legal liability
  • \r\n
\r\n

As an European citizen, under GDPR, you have certain individual rights. You can learn more about these guides in the GDPR Guide.

\r\n

Security of Data

\r\n

The security of your data is important to us but remember that no method of transmission over the Internet or method of electronic storage is 100% secure. While we strive to use commercially acceptable means to protect your Personal Data, we cannot guarantee its absolute security.

\r\n

Service Providers

\r\n

We may employ third party companies and individuals to facilitate our Service (\"Service Providers\"), to provide the Service on our behalf, to perform Service-related services or to assist us in analyzing how our Service is used.

\r\n

These third parties have access to your Personal Data only to perform these tasks on our behalf and are obligated not to disclose or use it for any other purpose.

\r\n

Links to Other Sites

\r\n

Our Service may contain links to other sites that are not operated by us. If you click a third party link, you will be directed to that third party\'s site. We strongly advise you to review the Privacy Policy of every site you visit.

\r\n

We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.

\r\n

Children\'s Privacy

\r\n

Our Service does not address anyone under the age of 18 (\"Children\").

\r\n

We do not knowingly collect personally identifiable information from anyone under the age of 18. If you are a parent or guardian and you are aware that your Child has provided us with Personal Data, please contact us. If we become aware that we have collected Personal Data from children without verification of parental consent, we take steps to remove that information from our servers.

\r\n

Changes to This Privacy Policy

\r\n

We may update our Privacy Policy from time to time.

\r\n

Changes will appear on this URL.

\r\n

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.

\r\n', 19, '0000000000000000', 1, 24, 0, 0, 1641914276), +(21, 0, 0, 1, '00000000', 'Dennis Suitters', 'Login', '', 'Login Meta Title', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'login', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'login', '', '', '', '', 'other', '', 27, '0000000000000000', 1, 40, 0, 0, 1648434730), +(22, 0, 0, 1, '00000000', 'Dennis Suitters', 'Sitemap', 'Sitemap Heading', 'Sitemap Meta Title', '', '', 'sitemap', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'sitemap', '', '', '', '', 'footer', '

Budgie smugglers ute off chops joey rack off. Whinge waggin\' school put a sock in it loose cannon yous troppo ironman stonkered larrikin. Vb flamin\' fairy floss tell him he\'s dreaming throw-down up the duff dill no dramas it\'ll be. Blimey gutful of chrissie dunny skull stands out like a roo bar heaps fly wire. Bruce knock crook sickie coathanger gutta pinga. Counter meal off chops bull bar bonzer. Rego boogie board good oil bushie damper. As cunning as a ratbag have a go, you mug jumbuck barrack slacker cracker.

', 18, '0000000000000000', 1, 8, 0, 0, 1632150630), (23, 0, 0, 1, '00000000', 'Dennis Suitters', 'Coming Soon', 'Coming Soon title', 'Coming Soon Meta Title', '', '', 'comingsoon', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'comingsoon', '', '', '', '', 'none', '

No-hoper roo bar lippy boozer stoked. Mokkies cream gutta op shop galah pretty spiffy cut lunch commando his blood\'s worth bottling. Bodgy leg it ace oi facey rage on. Brass razoo apples cut lunch sandgropper also runners loose cannon bizzo. Dropkick holden whit dipstick two up cane toad cockie damper bitzer as stands out like off chops. Arvo crook brickie when a cold one crow eaters good onya troppo flanny. Thongs on the cans sandgropper donger pinga buggered oi bloody oath icy pole. Bail out middy troppo a cold one piece of piss bizzo roadie paddock. Rort slab eureka brisvegas pissed off.

', 23, '0000000000000000', 1, 0, 0, 0, 1633704557), (24, 0, 0, 1, '00000000', 'Dennis Suitters', 'Maintenance', 'Maintenance', 'Maintenance Meta Title', '', '', 'maintenance', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'maintenance', '', '', '', '', 'none', '

We are currently doing Maintenance.

', 24, '0000000000000000', 1, 0, 0, 0, 1633692252), -(25, 0, 0, 1, '00000000', 'Dennis Suitters', 'FAQ', 'FAQ Heading', NULL, '', '', 'faq', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'faq', '', '', '', '', 'footer', '

Boardies avos avo bottlo snag devo snag bail lappy. Tradie bonza counter meal sleepout his blood\'s worth bottling have a captain cook rego down under. As cross as a no worries schooner donga avo slab pinga. Bog standard bathers holden vb avo as busy as a middy. Tickets on yourself swag blimey blind where bloody shark biscuit pub flamin\'. Pokies dob rego mate\'s rates cobber watch out for the bushie slacker jug. Gutta barbie tosser rock up bail.

', 20, '0000000000000000', 1, 0, 0, 0, 1631882640), -(26, 0, 0, 1, '00000000', 'Dennis Suitters', 'Forum', '', NULL, '', '', 'forum', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'forum', 'Forum', '', '', '', 'head', '', 15, '0000000000000000', 1, 0, 0, 0, 1646815269), -(27, 300, 0, 1, '00000000', 'Dennis Suitters', 'Orders', 'Orders Heading', 'Orders', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'orders', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'orders', '', '', '', '', 'account', '

Doovalacky a cold one two up reckon shark biscuit icy pole slaps chokkie. Fair go, mate mad as a postie jumbuck bities whit. Muster greenie stoked fisho icy pole slacker tell him he\'s dreaming. Straya we\'re going avo ugg boots compo back of bourke jackaroo rello grouse. No dramas shark biscuit tradie as stands out like damper rotten bush oyster. Carry on like a pork chop knock corker brolly. Booze bus rego you little ripper middy dag rotten he hasn\'t got a cubby house.

', 21, '0000000000000000', 1, 0, 0, 0, 1632139675), -(29, 300, 0, 1, '00000000', 'Dennis Suitters', 'Settings', 'Settings Heading', '', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'settings', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'settings', '', '', '', '', 'account', '

Show pony ankle biter put a sock in it ten clicks away thingo shoey offsider. Taking the piss pozzy bastard to dead horse coathanger. Tinny bazza bush oyster frothy gyno boozer stickybeak barbie. Get a dog up ya buggered bush oyster suss it out you little ripper. Veg out gyno manchester bogan blue kelpie nipper. Bradman thongs counter meal you little ripper roadie. Ratbag rapt stubby holder also dinky-di one for the road amber fluid bunyip.

', 23, '0000000000000000', 1, 0, 0, 0, 1648454125), -(30, 0, 0, 1, '00000000', 'Dennis Suitters', 'Checkout', 'Payment Options', 'Checkout', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'checkout', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'checkout', '', '', '', '', 'other', '

To ensure our user\'s privacy, we don\'t store Credit Card details,
only the chosen Payment Method, Name, Email and Date of Payment.

', 27, '0000000000000000', 1, 0, 0, 0, 1632139970), +(25, 0, 0, 1, '00000000', 'Dennis Suitters', 'FAQ', 'FAQ Heading', NULL, '', '', 'faq', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'faq', '', '', '', '', 'footer', '

Boardies avos avo bottlo snag devo snag bail lappy. Tradie bonza counter meal sleepout his blood\'s worth bottling have a captain cook rego down under. As cross as a no worries schooner donga avo slab pinga. Bog standard bathers holden vb avo as busy as a middy. Tickets on yourself swag blimey blind where bloody shark biscuit pub flamin\'. Pokies dob rego mate\'s rates cobber watch out for the bushie slacker jug. Gutta barbie tosser rock up bail.

', 21, '0000000000000000', 1, 33, 0, 0, 1631882640), +(26, 0, 0, 1, '00000000', 'Dennis Suitters', 'Forum', '', NULL, '', '', 'forum', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'forum', 'Forum', '', '', '', 'head', '', 16, '0000000000000000', 0, 0, 0, 0, 1646815269), +(27, 300, 0, 1, '00000000', 'Dennis Suitters', 'Orders', 'Orders Heading', 'Orders', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'orders', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'orders', '', '', '', '', 'account', '

Doovalacky a cold one two up reckon shark biscuit icy pole slaps chokkie. Fair go, mate mad as a postie jumbuck bities whit. Muster greenie stoked fisho icy pole slacker tell him he\'s dreaming. Straya we\'re going avo ugg boots compo back of bourke jackaroo rello grouse. No dramas shark biscuit tradie as stands out like damper rotten bush oyster. Carry on like a pork chop knock corker brolly. Booze bus rego you little ripper middy dag rotten he hasn\'t got a cubby house.

', 23, '0000000000000000', 1, 239, 0, 0, 1632139675), +(29, 300, 0, 1, '00000000', 'Dennis Suitters', 'Settings', 'Settings Heading', '', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'settings', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'settings', '', '', '', '', 'account', '

Show pony ankle biter put a sock in it ten clicks away thingo shoey offsider. Taking the piss pozzy bastard to dead horse coathanger. Tinny bazza bush oyster frothy gyno boozer stickybeak barbie. Get a dog up ya buggered bush oyster suss it out you little ripper. Veg out gyno manchester bogan blue kelpie nipper. Bradman thongs counter meal you little ripper roadie. Ratbag rapt stubby holder also dinky-di one for the road amber fluid bunyip.

', 25, '0000000000000000', 1, 36, 0, 0, 1648454125), +(30, 0, 0, 1, '00000000', 'Dennis Suitters', 'Checkout', 'Payment Options', 'Checkout', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'checkout', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'checkout', '', '', '', '', 'other', '

To ensure our user\'s privacy, we don\'t store Credit Card details,
only the chosen Payment Method, Name, Email and Date of Payment.

', 29, '0000000000000000', 1, 202, 0, 0, 1632139970), (31, 0, 0, 1, '00000000', 'Dennis Suitters', 'Offline', 'Offline Heading', 'Offline', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'offline', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'offline', '', '', '', '', 'none', '

This is some Offline Page information for when the Internet is down, and someone has the PWA installed from this site. This way they can get contact information.

', 31, '0000000000000000', 1, 0, 0, 0, 1634119863), -(40, NULL, 0, 0, '00000000', 'dev', 'Notification 1637937679', 'slide-in-bottom', '', '', '', 'notification', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'notification', 'Article', '', '', '', 'notification', '

This is a test notification.

', 1637937679, '0000000000000000', 1, 0, 0, 0, 1637937709), -(41, 0, 0, 1, '00000000', 'Anonymous', 'Biography', '', 'Biography SEO Title', '', '', 'biography', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'biography', '', '', '', '', 'head', '

Kindie struth sleepout bonza donga banana bender. Mate yakka shazza got us some crack the shits mate sandgroppers rubbish. Trackie dacks gyno mullet give it a burl bathers to fossicker chuck a spaz. Fly wire amber fluid watch out for the pozzy ironman up yours roo. Battler pissed lizard drinking slappa. Vee dub cubby house yabber boardies apples. No wucka\'s bizzo she\'ll be apples vee dub pozzy bloody muster.

Reckon ken oath frog in a sock bities galah bazza unit ripper frog in a sock he\'s got a massive rapt. Cream yabber yakka smokes ford road train. Bikie tucker crook going off burk flanno. Trackie dacks bush bash bruce accadacca catcus. Outback lollies mates cut snake mickey mouse mate avo aussie salute feral defo. Ken oath sick shazza got us some bloody ute fair crack of the whip. Boardies mate\'s rates yabber what\'s crackin\' roo. Butcher knackered wrap your laughing gear \'round that better than a kick up the backside suss ankle biter bazza better than a kick up the backside. Footy freo grog mickey mouse mate dinky-di budgie smugglers bizzo two pot screamer. Bush gone walkabout bitzer throw a shrimp on the barbie rollie chuck a spaz ken oath. Roadie brizzie stubby holder she\'ll be right. Footy holy dooley trackies lets throw a.

Fair go, mate sunnies bodgy aerial pingpong built like a lollies vinnie\'s a cold one shoot through. Tell your story walkin\' full boar crow eaters no worries, mate, she\'ll be right. Brizzie grab us a sunnies waggin\' school ratbag vb gutful of few roos loose in the top paddock roo. Suss a few stubbies short of a six-pack christmas put a sock in it lippy. Blow in the bag damper dog\'s eye to dog\'s eye. Brekkie six of one, half a dozen of the other furthy mickey mouse mate no worries. Jillaroo top bloke digger roo bar accadacca fair dinkum burk scratchy also op shop.

', 4, '0000000000000000', 0, 1, 0, 0, 1638696355), +(41, 0, 0, 1, '00000000', 'Anonymous', 'Biography', '', 'Biography SEO Title', '', '', 'biography', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'biography', '', '', '', '', 'head', '

Kindie struth sleepout bonza donga banana bender. Mate yakka shazza got us some crack the shits mate sandgroppers rubbish. Trackie dacks gyno mullet give it a burl bathers to fossicker chuck a spaz. Fly wire amber fluid watch out for the pozzy ironman up yours roo. Battler pissed lizard drinking slappa. Vee dub cubby house yabber boardies apples. No wucka\'s bizzo she\'ll be apples vee dub pozzy bloody muster.

Reckon ken oath frog in a sock bities galah bazza unit ripper frog in a sock he\'s got a massive rapt. Cream yabber yakka smokes ford road train. Bikie tucker crook going off burk flanno. Trackie dacks bush bash bruce accadacca catcus. Outback lollies mates cut snake mickey mouse mate avo aussie salute feral defo. Ken oath sick shazza got us some bloody ute fair crack of the whip. Boardies mate\'s rates yabber what\'s crackin\' roo. Butcher knackered wrap your laughing gear \'round that better than a kick up the backside suss ankle biter bazza better than a kick up the backside. Footy freo grog mickey mouse mate dinky-di budgie smugglers bizzo two pot screamer. Bush gone walkabout bitzer throw a shrimp on the barbie rollie chuck a spaz ken oath. Roadie brizzie stubby holder she\'ll be right. Footy holy dooley trackies lets throw a.

Fair go, mate sunnies bodgy aerial pingpong built like a lollies vinnie\'s a cold one shoot through. Tell your story walkin\' full boar crow eaters no worries, mate, she\'ll be right. Brizzie grab us a sunnies waggin\' school ratbag vb gutful of few roos loose in the top paddock roo. Suss a few stubbies short of a six-pack christmas put a sock in it lippy. Blow in the bag damper dog\'s eye to dog\'s eye. Brekkie six of one, half a dozen of the other furthy mickey mouse mate no worries. Jillaroo top bloke digger roo bar accadacca fair dinkum burk scratchy also op shop.

', 4, '0000000000000000', 1, 32, 0, 0, 1638696355), (42, 0, 0, 1, '00000000', 'Dennis Suitters', 'Activation', '', NULL, 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'activate', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'activate', 'Page', '', '', '', 'none', '

Please login with the credentials emailed to you when signing up, and update your address details, thank you.

', 27, '0000000000000000', 1, 0, 0, 0, 1642059636), -(43, 0, 0, 1, '00000000', 'Dennis Suitters', 'Activities', 'Activities Heading', '', '', '', 'activities', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'activities', '', '', '', '', 'head', '

Paddock bottlo ugg boots fair go, mate fossicker. Mickey mouse mate esky ciggy roadie boardies cream stonkered. Icy pole bikie slacker as busy as a give it a burl. Pissed bitzer rort blind outback defo galah fairy floss bradman. Bruce how stickybeak ya cut lunch booze bus how. Chock a block hottie daks sleepout pash pretty spiffy built like a holden skite coppers. Carrying on like a pork chop dero gyno bloody oath ciggies dead horse jumbuck bail up dill. Cockie ridgy-didge cane toad strewth ripper better than a ham sandwich fair crack of the whip bonzer. Ankle biter longneck slab whinge not my bowl of rice booze true blue mad as a gobful up the duff accadacca ironman. Dero what\'s the john dory? lollies struth strides buggered up the duff chokkie. Heaps vinnie\'s joey outback paddock crikey blow in the bag. Shazza skite ropeable lippy freo six of one, half a dozen of the other flick beauty. When amber fluid tucker full blown fly wire head like a dropped pie barrack avo slaps catcus spewin\'. Knickers dead horse put a sock in it buck\'s night shoot through bushie rollie fisho bogan donga.

Roo bundy whinge gobful and holy dooley bodgy root rat. Budgie smugglers lets get some brekkie compo brolly cut lunch commando flanno. Crikey bikie u-ie lizard drinking rello freo. Offsider throw-down jillaroo ciggy bastards skite. Leg it crow eaters rotten to skite ciggies drongo. No worries trackie dacks hottie clacker ocker truckie. Rotten bunyip toads dob fair suck of the sauce bottle stonkered accadacca. Whinge cane toad a few sandwiches short of a picnic christmas as cunning as a gutful of bradman.

He hasn\'t got a rollie bushranger oi she\'ll be right. Bazza turps boardies truckie bonzer. Smokes better than a kick up the backside ambo aerial pingpong. Tell him he\'s dreaming fairy floss dole bludger wouldn\'t piss on them if they\'re on fire. Longneck blowie leg it off chops bingle lets get some tosser avo bloody. Squizz blimey buckley\'s chance thunderbox deadset he\'s dreaming. Dry as as dead dingo\'s donga struth fairy floss stubby oi as stands out like dry as as dead dingo\'s donga fair go, mate. G\'day bushranger donger apples pozzy strides crack the shits built like a squizz good oil better than a kick up the backside reckon. Flake thongs sandgroppers u-ie chuck a spaz ace cockie. Donga bush bash furthy donga brolly beauty barbie tucker-bag as cunning as a.

', 3, '0000000000000000', 0, 54, 0, 0, 1631882095); +(43, 0, 0, 1, '00000000', 'Dennis Suitters', 'Activities', 'Activities Heading', '', '', '', 'activities', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'activities', '', '', '', '', 'head', '

Paddock bottlo ugg boots fair go, mate fossicker. Mickey mouse mate esky ciggy roadie boardies cream stonkered. Icy pole bikie slacker as busy as a give it a burl. Pissed bitzer rort blind outback defo galah fairy floss bradman. Bruce how stickybeak ya cut lunch booze bus how. Chock a block hottie daks sleepout pash pretty spiffy built like a holden skite coppers. Carrying on like a pork chop dero gyno bloody oath ciggies dead horse jumbuck bail up dill. Cockie ridgy-didge cane toad strewth ripper better than a ham sandwich fair crack of the whip bonzer. Ankle biter longneck slab whinge not my bowl of rice booze true blue mad as a gobful up the duff accadacca ironman. Dero what\'s the john dory? lollies struth strides buggered up the duff chokkie. Heaps vinnie\'s joey outback paddock crikey blow in the bag. Shazza skite ropeable lippy freo six of one, half a dozen of the other flick beauty. When amber fluid tucker full blown fly wire head like a dropped pie barrack avo slaps catcus spewin\'. Knickers dead horse put a sock in it buck\'s night shoot through bushie rollie fisho bogan donga.

Roo bundy whinge gobful and holy dooley bodgy root rat. Budgie smugglers lets get some brekkie compo brolly cut lunch commando flanno. Crikey bikie u-ie lizard drinking rello freo. Offsider throw-down jillaroo ciggy bastards skite. Leg it crow eaters rotten to skite ciggies drongo. No worries trackie dacks hottie clacker ocker truckie. Rotten bunyip toads dob fair suck of the sauce bottle stonkered accadacca. Whinge cane toad a few sandwiches short of a picnic christmas as cunning as a gutful of bradman.

He hasn\'t got a rollie bushranger oi she\'ll be right. Bazza turps boardies truckie bonzer. Smokes better than a kick up the backside ambo aerial pingpong. Tell him he\'s dreaming fairy floss dole bludger wouldn\'t piss on them if they\'re on fire. Longneck blowie leg it off chops bingle lets get some tosser avo bloody. Squizz blimey buckley\'s chance thunderbox deadset he\'s dreaming. Dry as as dead dingo\'s donga struth fairy floss stubby oi as stands out like dry as as dead dingo\'s donga fair go, mate. G\'day bushranger donger apples pozzy strides crack the shits built like a squizz good oil better than a kick up the backside reckon. Flake thongs sandgroppers u-ie chuck a spaz ace cockie. Donga bush bash furthy donga brolly beauty barbie tucker-bag as cunning as a.

', 3, '0000000000000000', 0, 0, 0, 0, 1631882095), +(44, 0, 0, 1, '00000000', 'Dennis Suitters', 'Courses', '', NULL, '', '', 'content', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'course', 'Course', '', '', '', 'head', '', 15, '0000000000000000', 1, 403, 0, 0, 1656076670), +(45, 300, 0, 1, '00000000', 'Dennis Suitters', 'Courses', '', 'Courses', 'noindex,noimageindex,nofollow,noarchive,nocache,nosnippet,noodp,noydir', '', 'courses', '', '', '', '', '0000000000000000', '', '', 300, 3000, '', '', '', 'courses', '', '', '', '', 'account', '

These are the courses that you've signed up for.

', 22, '0000000000000000', 1, 969, 0, 0, 1658454900); -- -------------------------------------------------------- @@ -722,35 +747,82 @@ INSERT INTO `menu` (`id`, `rank`, `mid`, `uid`, `options`, `login_user`, `title` CREATE TABLE `messages` ( `id` bigint NOT NULL, `uid` bigint NOT NULL, - `ip` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `mid` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `ip` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `mid` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `rmid` bigint NOT NULL, - `folder` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `to_email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `to_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `from_email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `from_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `from_business` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `from_phone` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `from_mobile` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `from_address` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `from_suburb` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `from_city` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `from_state` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `from_postcode` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `subject` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `status` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `folder` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `to_email` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `to_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `from_email` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `from_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `from_business` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `from_phone` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `from_mobile` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `from_address` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `from_suburb` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `from_city` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `from_state` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `from_postcode` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `subject` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `status` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `starred` int NOT NULL, `important` int NOT NULL, - `notes_raw` text CHARACTER SET utf8 COLLATE utf8_bin, - `notes_raw_mime` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `notes_html` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `notes_html_mime` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `attachments` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `notes_raw` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin, + `notes_raw_mime` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `notes_html` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `notes_html_mime` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `attachments` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `email_date` int NOT NULL, `size` bigint NOT NULL, `ti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `moduleQuestions` +-- + +CREATE TABLE `moduleQuestions` ( + `id` bigint NOT NULL, + `rid` bigint NOT NULL, + `type` tinytext COLLATE utf8mb3_bin NOT NULL, + `check_answer` int NOT NULL, + `title` tinytext COLLATE utf8mb3_bin NOT NULL, + `ord` bigint NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `moduleQuestionsTrack` +-- + +CREATE TABLE `moduleQuestionsTrack` ( + `id` bigint NOT NULL, + `uid` bigint NOT NULL, + `cid` bigint NOT NULL, + `mid` bigint NOT NULL, + `qid` bigint NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `modules` +-- + +CREATE TABLE `modules` ( + `id` bigint NOT NULL, + `rid` bigint NOT NULL, + `title` tinytext COLLATE utf8mb3_bin NOT NULL, + `caption` tinytext COLLATE utf8mb3_bin NOT NULL, + `notes` text COLLATE utf8mb3_bin NOT NULL, + `question` tinytext COLLATE utf8mb3_bin NOT NULL, + `ord` bigint NOT NULL, + `tti` int NOT NULL, + `ti` int NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -763,13 +835,13 @@ CREATE TABLE `orderitems` ( `oid` bigint UNSIGNED NOT NULL, `iid` bigint UNSIGNED NOT NULL, `cid` bigint NOT NULL, - `title` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `title` varchar(60) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `quantity` mediumint UNSIGNED NOT NULL, `cost` decimal(10,2) UNSIGNED NOT NULL, - `status` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `status` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `points` int NOT NULL, `ti` int UNSIGNED NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -781,40 +853,40 @@ CREATE TABLE `orders` ( `id` bigint NOT NULL, `cid` bigint UNSIGNED NOT NULL, `uid` bigint UNSIGNED NOT NULL, - `contentType` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `qid` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `contentType` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `qid` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `qid_ti` bigint UNSIGNED NOT NULL, - `iid` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `iid` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `iid_ti` bigint UNSIGNED NOT NULL, - `did` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `did` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `did_ti` bigint UNSIGNED NOT NULL, - `aid` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `aid` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `aid_ti` bigint UNSIGNED NOT NULL, `due_ti` bigint UNSIGNED NOT NULL, `rid` bigint NOT NULL, - `notes` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `status` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `postageCode` varchar(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `postageOption` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `notes` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `status` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `postageCode` varchar(6) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `postageOption` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `postageCost` decimal(6,2) NOT NULL, - `payOption` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `payOption` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `payMethod` int NOT NULL, `payCost` decimal(6,2) NOT NULL, `trackOption` bigint NOT NULL, - `trackNumber` tinytext COLLATE utf8_bin NOT NULL, + `trackNumber` tinytext COLLATE utf8mb3_bin NOT NULL, `recurring` int NOT NULL, `total` decimal(10,2) NOT NULL, `points` int NOT NULL, - `paid_via` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `txn_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `paid_email` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `paid_name` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `paid_amount` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `paid_via` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `txn_id` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `paid_email` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `paid_name` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `paid_amount` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `paid_ti` int NOT NULL, - `payment_status` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `payment_status` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `ti` bigint UNSIGNED NOT NULL, `eti` bigint NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -825,27 +897,27 @@ CREATE TABLE `orders` ( CREATE TABLE `playlist` ( `id` bigint NOT NULL, `rid` bigint NOT NULL, - `width` varchar(6) COLLATE utf8_bin NOT NULL, - `author_name` varchar(64) COLLATE utf8_bin NOT NULL, - `author_url` varchar(256) COLLATE utf8_bin NOT NULL, - `version` varchar(6) COLLATE utf8_bin NOT NULL, - `provider_url` varchar(256) COLLATE utf8_bin NOT NULL, - `provider_name` varchar(32) COLLATE utf8_bin NOT NULL, - `thumbnail_width` varchar(6) COLLATE utf8_bin NOT NULL, - `thumbnail_url` varchar(256) COLLATE utf8_bin NOT NULL, - `height` varchar(6) COLLATE utf8_bin NOT NULL, - `thumbnail_height` varchar(6) COLLATE utf8_bin NOT NULL, - `html` text COLLATE utf8_bin NOT NULL, - `url` varchar(256) COLLATE utf8_bin NOT NULL, - `embed_url` varchar(256) COLLATE utf8_bin NOT NULL, - `type` varchar(16) COLLATE utf8_bin NOT NULL, - `title` tinytext COLLATE utf8_bin NOT NULL, - `notes` text COLLATE utf8_bin NOT NULL, + `width` varchar(6) COLLATE utf8mb3_bin NOT NULL, + `author_name` varchar(64) COLLATE utf8mb3_bin NOT NULL, + `author_url` varchar(256) COLLATE utf8mb3_bin NOT NULL, + `version` varchar(6) COLLATE utf8mb3_bin NOT NULL, + `provider_url` varchar(256) COLLATE utf8mb3_bin NOT NULL, + `provider_name` varchar(32) COLLATE utf8mb3_bin NOT NULL, + `thumbnail_width` varchar(6) COLLATE utf8mb3_bin NOT NULL, + `thumbnail_url` varchar(256) COLLATE utf8mb3_bin NOT NULL, + `height` varchar(6) COLLATE utf8mb3_bin NOT NULL, + `thumbnail_height` varchar(6) COLLATE utf8mb3_bin NOT NULL, + `html` text COLLATE utf8mb3_bin NOT NULL, + `url` varchar(256) COLLATE utf8mb3_bin NOT NULL, + `embed_url` varchar(256) COLLATE utf8mb3_bin NOT NULL, + `type` varchar(16) COLLATE utf8mb3_bin NOT NULL, + `title` tinytext COLLATE utf8mb3_bin NOT NULL, + `notes` text COLLATE utf8mb3_bin NOT NULL, `ord` bigint NOT NULL, `active` tinyint(1) NOT NULL, - `dt` tinytext COLLATE utf8_bin NOT NULL, + `dt` tinytext COLLATE utf8mb3_bin NOT NULL, `ti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -855,15 +927,15 @@ CREATE TABLE `playlist` ( CREATE TABLE `rewards` ( `id` bigint NOT NULL, - `code` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `title` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `code` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `title` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `method` int NOT NULL, `value` int NOT NULL, `quantity` int NOT NULL, `tis` int NOT NULL, `tie` int NOT NULL, `ti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -873,12 +945,12 @@ CREATE TABLE `rewards` ( CREATE TABLE `seo` ( `id` bigint NOT NULL, - `contentType` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `type` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `title` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `notes` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `contentType` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `type` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `title` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `notes` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `ti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -- Dumping data for table `seo` @@ -1020,13 +1092,13 @@ CREATE TABLE `sidebar` ( `id` bigint NOT NULL, `rank` int NOT NULL, `mid` bigint NOT NULL, - `contentType` varchar(16) COLLATE utf8_bin NOT NULL, - `view` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `icon` varchar(16) COLLATE utf8_bin NOT NULL, - `title` tinytext COLLATE utf8_bin NOT NULL, + `contentType` varchar(16) COLLATE utf8mb3_bin NOT NULL, + `view` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `icon` varchar(16) COLLATE utf8mb3_bin NOT NULL, + `title` tinytext COLLATE utf8mb3_bin NOT NULL, `ord` bigint NOT NULL, `active` tinyint(1) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -- Dumping data for table `sidebar` @@ -1034,12 +1106,12 @@ CREATE TABLE `sidebar` ( INSERT INTO `sidebar` (`id`, `rank`, `mid`, `contentType`, `view`, `icon`, `title`, `ord`, `active`) VALUES (1, 400, 0, 'dashboard', 'dashboard', 'dashboard', 'Dashboard', 0, 1), -(2, 400, 0, 'livechat', 'livechat', 'chat', 'Livechat', 11, 1), +(2, 400, 0, 'livechat', 'livechat', 'chat', 'Livechat', 12, 1), (3, 400, 0, 'dropdown', 'content', 'content', 'Content', 3, 1), (4, 400, 3, 'media', 'media', 'picture', 'Media', 12, 1), (5, 400, 0, 'pages', 'pages', 'content', 'Pages', 2, 1), (6, 400, 3, 'faq', 'faq', 'faq', 'FAQ', 4, 1), -(7, 400, 3, 'scheduler', 'scheduler', 'calendar-time', 'Scheduler', 11, 1), +(7, 400, 3, 'scheduler', 'content', 'calendar-time', 'Scheduler', 11, 1), (8, 400, 3, 'article', 'content', 'content', 'Articles', 0, 1), (9, 400, 3, 'portfolio', 'content', 'portfolio', 'Portfolio', 7, 1), (10, 400, 3, 'events', 'content', 'calendar', 'Events', 5, 1), @@ -1049,22 +1121,22 @@ INSERT INTO `sidebar` (`id`, `rank`, `mid`, `contentType`, `view`, `icon`, `titl (14, 400, 3, 'rewards', 'rewards', 'credit-card', 'Rewards', 10, 1), (15, 400, 3, 'service', 'content', 'service', 'Services', 3, 1), (16, 400, 3, 'proofs', 'content', 'proof', 'Proofs', 9, 1), -(17, 400, 0, 'messages', 'messages', 'inbox', 'Messages', 10, 1), -(18, 400, 0, 'forum', 'forum', 'forum', 'Forum', 5, 1), -(19, 400, 0, 'newsletters', 'newsletters', 'newspaper', 'Newsletters', 9, 1), -(20, 400, 0, 'bookings', 'bookings', 'calendar', 'Bookings', 6, 1), +(17, 400, 0, 'messages', 'messages', 'inbox', 'Messages', 11, 1), +(18, 400, 0, 'forum', 'forum', 'forum', 'Forum', 6, 1), +(19, 400, 0, 'newsletters', 'newsletters', 'newspaper', 'Newsletters', 10, 1), +(20, 400, 0, 'bookings', 'bookings', 'calendar', 'Bookings', 7, 1), (21, 400, 0, 'dropdown', 'orders', 'order', 'Orders', 4, 1), (22, 400, 21, 'all', 'orders', 'order-quote', 'All', 0, 1), (23, 400, 21, 'quotes', 'orders', 'order-quote', 'Quotes', 1, 1), (24, 400, 21, 'invoices', 'orders', 'order-invoice', 'Invoices', 2, 1), (25, 400, 21, 'pending', 'orders', 'order-pending', 'Pending', 3, 1), (26, 400, 21, 'recurring', 'orders', 'order-recurring', 'Recurring', 4, 1), -(27, 400, 21, 'orderdue', 'overd', 'order-pending', 'Overdue', 5, 1), +(27, 400, 21, 'orderdue', 'orders', 'order-pending', 'Overdue', 5, 1), (28, 400, 21, 'archived', 'orders', 'order-archived', 'Archived', 6, 1), (29, 400, 0, 'accounts', 'accounts', 'users', 'Accounts', 1, 1), -(30, 400, 0, 'comments', 'comments', 'comments', 'Comments', 7, 1), -(31, 400, 0, 'reviews', 'reviews', 'review', 'Reviews', 8, 1), -(32, 400, 0, 'dropdown', 'settings', 'settings', 'Settings', 13, 1), +(30, 400, 0, 'comments', 'comments', 'comments', 'Comments', 8, 1), +(31, 400, 0, 'reviews', 'reviews', 'review', 'Reviews', 9, 1), +(32, 400, 0, 'dropdown', 'settings', 'settings', 'Settings', 14, 1), (33, 400, 32, 'livechat', 'settings', 'chat', 'Livechat', 8, 1), (34, 400, 32, 'media', 'settings', 'picture', 'Media', 1, 1), (35, 400, 32, 'pages', 'settings', 'content', 'Pages', 3, 1), @@ -1075,7 +1147,7 @@ INSERT INTO `sidebar` (`id`, `rank`, `mid`, `contentType`, `view`, `icon`, `titl (40, 400, 32, 'bookings', 'settings', 'calendar', 'Bookings', 4, 1), (41, 400, 32, 'orders', 'settings', 'order', 'Orders', 9, 1), (42, 400, 32, 'accounts', 'settings', 'users', 'Accounts', 0, 1), -(43, 400, 0, 'dropdown', 'preferences', 'settings', 'Preferences', 12, 1), +(43, 400, 0, 'dropdown', 'preferences', 'settings', 'Preferences', 13, 1), (44, 400, 43, 'theme', 'preferences', 'theme', 'Theme', 2, 1), (45, 400, 43, 'contact', 'preferences', 'address-card', 'Contact', 3, 1), (46, 400, 43, 'social', 'preferences', 'user-group', 'Social', 4, 1), @@ -1087,12 +1159,13 @@ INSERT INTO `sidebar` (`id`, `rank`, `mid`, `contentType`, `view`, `icon`, `titl (52, 400, 43, 'database', 'preferences', 'database', 'Database', 11, 1), (53, 400, 43, 'suggestion', 'preferences', 'idea', 'Suggestions', 7, 1), (54, 400, 43, 'security', 'preferences', 'security', 'Security', 9, 1), -(55, 1000, 0, 'payments', 'payments', 'hosting', 'Payments', 15, 1), -(56, 400, 0, 'notification', 'notification', 'notification', 'Notifications', 14, 1), -(57, 400, 0, 'joblist', 'joblist', 'joblist', 'Job List', 16, 1), -(58, 900, 0, 'templates', 'templates', 'templates', 'Templates', 17, 1), +(55, 1000, 0, 'payments', 'payments', 'hosting', 'Payments', 16, 1), +(56, 400, 0, 'notification', 'notification', 'notification', 'Notifications', 15, 1), +(57, 400, 0, 'joblist', 'joblist', 'joblist', 'Job List', 17, 1), +(58, 900, 0, 'templates', 'templates', 'templates', 'Templates', 18, 1), (59, 400, 43, 'a11y', 'preferences', 'a11y', 'Accessibility', 1, 1), -(60, 400, 3, 'activities', 'content', 'activities', 'Activities', 2, 1); +(60, 400, 3, 'activities', 'content', 'activities', 'Activities', 2, 1), +(61, 400, 0, 'course', 'course', 'education-cap', 'Courses', 5, 1); -- -------------------------------------------------------- @@ -1102,12 +1175,12 @@ INSERT INTO `sidebar` (`id`, `rank`, `mid`, `contentType`, `view`, `icon`, `titl CREATE TABLE `subscribers` ( `id` bigint NOT NULL, - `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` tinytext COLLATE utf8_bin NOT NULL, - `hash` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `tags` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `email` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `name` tinytext COLLATE utf8mb3_bin NOT NULL, + `hash` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `tags` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `ti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -1119,15 +1192,15 @@ CREATE TABLE `suggestions` ( `id` bigint NOT NULL, `rid` bigint NOT NULL, `uid` bigint NOT NULL, - `t` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `c` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `notes` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `reason` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `t` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `c` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `notes` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `reason` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `popup` int NOT NULL, `seen` int NOT NULL, `sti` int NOT NULL, `ti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -1137,13 +1210,13 @@ CREATE TABLE `suggestions` ( CREATE TABLE `templates` ( `id` bigint NOT NULL, - `contentType` varchar(16) COLLATE utf8_bin NOT NULL, - `section` varchar(16) COLLATE utf8_bin NOT NULL, - `title` tinytext COLLATE utf8_bin NOT NULL, - `html` text COLLATE utf8_bin NOT NULL, - `notes` text COLLATE utf8_bin NOT NULL, - `image` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; + `contentType` varchar(16) COLLATE utf8mb3_bin NOT NULL, + `section` varchar(16) COLLATE utf8mb3_bin NOT NULL, + `title` tinytext COLLATE utf8mb3_bin NOT NULL, + `html` text COLLATE utf8mb3_bin NOT NULL, + `notes` text COLLATE utf8mb3_bin NOT NULL, + `image` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -- Dumping data for table `templates` @@ -1164,27 +1237,27 @@ INSERT INTO `templates` (`id`, `contentType`, `section`, `title`, `html`, `notes CREATE TABLE `tracker` ( `id` bigint NOT NULL, `pid` bigint NOT NULL, - `status` varchar(32) COLLATE utf8_bin NOT NULL, - `urlDest` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `urlFrom` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `userAgent` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `keywords` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `ip` varchar(15) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `host` varchar(255) COLLATE utf8_bin NOT NULL, - `isp` varchar(255) COLLATE utf8_bin NOT NULL, - `action` varchar(16) COLLATE utf8_bin NOT NULL, - `countryName` varchar(128) COLLATE utf8_bin NOT NULL, - `countryCode` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `city` varchar(128) COLLATE utf8_bin NOT NULL, - `region` varchar(32) COLLATE utf8_bin NOT NULL, - `regionCode` varchar(8) COLLATE utf8_bin NOT NULL, - `browser` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `device` varchar(32) COLLATE utf8_bin NOT NULL, - `viewportwidth` varchar(6) COLLATE utf8_bin NOT NULL, - `os` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `sid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `status` varchar(32) COLLATE utf8mb3_bin NOT NULL, + `urlDest` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `urlFrom` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `userAgent` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `keywords` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `ip` varchar(15) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `host` varchar(255) COLLATE utf8mb3_bin NOT NULL, + `isp` varchar(255) COLLATE utf8mb3_bin NOT NULL, + `action` varchar(16) COLLATE utf8mb3_bin NOT NULL, + `countryName` varchar(128) COLLATE utf8mb3_bin NOT NULL, + `countryCode` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `city` varchar(128) COLLATE utf8mb3_bin NOT NULL, + `region` varchar(32) COLLATE utf8mb3_bin NOT NULL, + `regionCode` varchar(8) COLLATE utf8mb3_bin NOT NULL, + `browser` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `device` varchar(32) COLLATE utf8mb3_bin NOT NULL, + `viewportwidth` varchar(6) COLLATE utf8mb3_bin NOT NULL, + `os` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `sid` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `ti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -1194,10 +1267,10 @@ CREATE TABLE `tracker` ( CREATE TABLE `whitelist` ( `id` bigint NOT NULL, - `ip` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `email` tinytext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `ip` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `email` tinytext CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, `ti` int NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -------------------------------------------------------- @@ -1207,14 +1280,14 @@ CREATE TABLE `whitelist` ( CREATE TABLE `widgets` ( `id` bigint NOT NULL, - `ref` varchar(16) COLLATE utf8_bin NOT NULL, - `title` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `file` varchar(64) COLLATE utf8_bin NOT NULL, - `layout` text COLLATE utf8_bin NOT NULL, - `width` varchar(3) COLLATE utf8_bin NOT NULL, + `ref` varchar(16) COLLATE utf8mb3_bin NOT NULL, + `title` varchar(256) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL, + `file` varchar(64) COLLATE utf8mb3_bin NOT NULL, + `layout` text COLLATE utf8mb3_bin NOT NULL, + `width` varchar(3) COLLATE utf8mb3_bin NOT NULL, `ord` bigint NOT NULL, `active` tinyint(1) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin; -- -- Dumping data for table `widgets` @@ -1227,7 +1300,7 @@ INSERT INTO `widgets` (`id`, `ref`, `title`, `file`, `layout`, `width`, `ord`, ` (4, 'dashboard', 'Top Ten Highest Viewed Pages', 'viewedpages.php', '', '6', 9, 1), (8, 'dashboard', 'Top Ten Search Keywords This Month', 'topkeywords.php', '', '6', 8, 1), (9, 'dashboard', 'Recent Admin Activity', 'recentadminactivity.php', '', '6', 10, 1), -(10, 'dashboard', 'Latest AuroraCMS Updates', 'auroracmsupdates.php', '', '12', 11, 1), +(10, 'dashboard', 'Latest AuroraCMS Updates', 'auroracmsupdates.php', '', '6', 11, 1), (11, 'content', 'SEO Content Help', 'seocontenthelp.php', '', '', 2, 1), (12, 'content', 'Text Analysis', 'hemmingway.php', '', '', 1, 1), (13, 'dashboard', 'Devices', 'devices.php', '', '3', 5, 1), @@ -1271,6 +1344,12 @@ ALTER TABLE `config` ALTER TABLE `content` ADD PRIMARY KEY (`id`); +-- +-- Indexes for table `courseTrack` +-- +ALTER TABLE `courseTrack` + ADD PRIMARY KEY (`id`); + -- -- Indexes for table `forumCategory` -- @@ -1343,6 +1422,24 @@ ALTER TABLE `menu` ALTER TABLE `messages` ADD PRIMARY KEY (`id`); +-- +-- Indexes for table `moduleQuestions` +-- +ALTER TABLE `moduleQuestions` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `moduleQuestionsTrack` +-- +ALTER TABLE `moduleQuestionsTrack` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `modules` +-- +ALTER TABLE `modules` + ADD PRIMARY KEY (`id`); + -- -- Indexes for table `orderitems` -- @@ -1449,6 +1546,12 @@ ALTER TABLE `config` ALTER TABLE `content` MODIFY `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT; +-- +-- AUTO_INCREMENT for table `courseTrack` +-- +ALTER TABLE `courseTrack` + MODIFY `id` bigint NOT NULL AUTO_INCREMENT; + -- -- AUTO_INCREMENT for table `forumCategory` -- @@ -1513,7 +1616,7 @@ ALTER TABLE `media` -- AUTO_INCREMENT for table `menu` -- ALTER TABLE `menu` - MODIFY `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=44; + MODIFY `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=46; -- -- AUTO_INCREMENT for table `messages` @@ -1521,6 +1624,24 @@ ALTER TABLE `menu` ALTER TABLE `messages` MODIFY `id` bigint NOT NULL AUTO_INCREMENT; +-- +-- AUTO_INCREMENT for table `moduleQuestions` +-- +ALTER TABLE `moduleQuestions` + MODIFY `id` bigint NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `moduleQuestionsTrack` +-- +ALTER TABLE `moduleQuestionsTrack` + MODIFY `id` bigint NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `modules` +-- +ALTER TABLE `modules` + MODIFY `id` bigint NOT NULL AUTO_INCREMENT; + -- -- AUTO_INCREMENT for table `orderitems` -- @@ -1555,7 +1676,7 @@ ALTER TABLE `seo` -- AUTO_INCREMENT for table `sidebar` -- ALTER TABLE `sidebar` - MODIFY `id` bigint NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=61; + MODIFY `id` bigint NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=62; -- -- AUTO_INCREMENT for table `subscribers` @@ -1594,3 +1715,6 @@ ALTER TABLE `widgets` MODIFY `id` bigint NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=20; COMMIT; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/core/chat.php b/core/chat.php index 574e3e2..c8f7f85 100755 --- a/core/chat.php +++ b/core/chat.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.10 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -129,14 +129,16 @@ $cua=$db->prepare("SELECT `id` FROM `".$prefix."login` WHERE `rank`>699 AND `active`=1 AND `lti`>:lti"); $cua->execute([':lti'=>$cuati]); if($cua->rowCount()<1){ - require'phpmailer/class.phpmailer.php'; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; $sa=$db->prepare("SELECT `id`,`username`,`name`,`email` FROM `".$prefix."login` WHERE `rank`>699 AND `active`=1 AND liveChatNotification=1"); $sa->execute(); echo''; if($sa->rowCount()>0){ $cfgsent=0; while($ra=$sa->fetch(PDO::FETCH_ASSOC)){ - $mail=new PHPMailer; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $mail->SetFrom($email,$name); $mail->AddAddress($ra['email']); @@ -152,7 +154,7 @@ if($mail->Send())echo'
Nominated Operators have been notified!'; } }else{ - $mail=new PHPMailer; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $mail->SetFrom($email,$name); $mail->AddAddress($config['email'],$config['business']); diff --git a/core/core.php b/core/core.php index 0342f38..c0e030b 100755 --- a/core/core.php +++ b/core/core.php @@ -7,10 +7,16 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.16 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ +require'db.php'; +$config=$db->query("SELECT * FROM `".$prefix."config` WHERE `id`=1")->fetch(PDO::FETCH_ASSOC); +if($config['php_options'][6]==1){ + $s=$db->prepare("DELETE FROM `".$prefix."iplist` WHERE `permanent`!=1 AND `ti`<:ti"); + $s->execute([':ti'=>time()-2592000]); +} if(stristr($_SERVER['REQUEST_URI'],'security.txt')||stristr($_SERVER['REQUEST_URI'],'sellers.json')){ echo'# Report Security Issues at the AuroraCMS GitHub Repository: https://github.com/DiemenDesign/AuroraCMS'; die(); @@ -75,12 +81,6 @@ die(); } } -require'db.php'; -$config=$db->query("SELECT * FROM `".$prefix."config` WHERE `id`=1")->fetch(PDO::FETCH_ASSOC); -if($config['php_options'][6]==1){ - $s=$db->prepare("DELETE FROM `".$prefix."iplist` WHERE `permanent`!=1 AND `ti`<:ti"); - $s->execute([':ti'=>time()-2592000]); -} define('THEME','layout'.DS.$config['theme']); define('URL',PROTOCOL.$_SERVER['HTTP_HOST'].$settings['system']['url'].'/'); $ti=time(); @@ -251,6 +251,34 @@ function elapsed_time($b=0,$e=0){ }else$b=number_format($td,3).'s'; return trim($b); } +function secondsToWords($inputSeconds) { + $secondsInAMinute = 60; + $secondsInAnHour = 3600; + $secondsInADay = 86400; + $secondsInAMonth = 2592000; + $months = floor($inputSeconds / $secondsInAMonth); + $days = floor($inputSeconds / $secondsInADay); + $hourSeconds = $inputSeconds % $secondsInADay; + $hours = floor($hourSeconds / $secondsInAnHour); + $minuteSeconds = $hourSeconds % $secondsInAnHour; + $minutes = floor($minuteSeconds / $secondsInAMinute); + $remainingSeconds = $minuteSeconds % $secondsInAMinute; + $seconds = ceil($remainingSeconds); + $timeParts = []; + $sections = [ + 'month'=>(int)$months, + 'day'=>(int)$days, + 'hour'=>(int)$hours, + 'minute'=>(int)$minutes, + 'second'=>(int)$seconds, + ]; + foreach ($sections as $name => $value){ + if ($value > 0){ + $timeParts[] = $value. ' '.$name.($value == 1 ? '' : 's'); + } + } + return implode(', ', $timeParts); +} function getSaleTime(){ $chkti=time(); $sale=[ @@ -379,6 +407,10 @@ function content($args=false){ $view='content'; require'admin.php'; } + function course($args=false){ + $view='course'; + require'admin.php'; + } function dashboard($args=false){ $view='dashboard'; require'admin.php'; @@ -518,6 +550,14 @@ function contactus($args=false){ $view='contactus'; require'process.php'; } + function course($args=false){ + $view='course'; + require'process.php'; + } + function courses($args=false){ + $view='courses'; + require'process.php'; + } function distributors($args=false){ $view='distributors'; require'process.php'; @@ -638,6 +678,7 @@ function page($args=false){ $settings['system']['admin'].'/livechat'=>['admin','livechat'], $settings['system']['admin'].'/comments'=>['admin','comments'], $settings['system']['admin'].'/content'=>['admin','content'], + $settings['system']['admin'].'/course'=>['admin','course'], $settings['system']['admin'].'/dashboard'=>['admin','dashboard'], $settings['system']['admin'].'/faq'=>['admin','faq'], $settings['system']['admin'].'/forum'=>['admin','forum'], @@ -675,6 +716,7 @@ function page($args=false){ 'sitemap'=>['front','sitemap'], 'orders'=>['front','orders'], 'checkout'=>['front','checkout'], + 'courses'=>['front','courses'], 'proofs'=>['front','proofs'], 'login'=>['front','login'], 'settings'=>['front','settings'], diff --git a/core/css/style.css b/core/css/style.css index e5b1e07..ddc4dac 100755 --- a/core/css/style.css +++ b/core/css/style.css @@ -29,7 +29,7 @@ header.aurora{ color:var(--header-color); width:100%; height:80px} -.bg-aurora{background-color:var(--body-background-color)!important}.text-white{color:var(--text-white)}.dot-pulse{position:relative;margin-top:6px;margin-left:30px;left:-9999px;width:10px;height:10px;border-radius:5px;background-color:#000;color:#000;box-shadow:9999px 0 0 -5px #000;animation:dot-pulse 1.5s infinite linear;animation-delay:.25s}.dot-pulse.select{position:absolute;z-index:1;top:8px}.dot-pulse::before,.dot-pulse::after{content:'';display:inline-block;position:absolute;top:0;width:10px;height:10px;border-radius:5px;background-color:#000;color:#000}.dot-pulse::before{box-shadow:9984px 0 0 -5px #000;animation:dot-pulse-before 1.5s infinite linear;animation-delay:0s}.dot-pulse::after{box-shadow:10014px 0 0 -5px #000;animation:dot-pulse-after 1.5s infinite linear;animation-delay:.5s}@keyframes dot-pulse-before{0%{box-shadow:9984px 0 0 -5px #000}30%{box-shadow:9984px 0 0 2px #000}60%,100%{box-shadow:9984px 0 0 -5px #000}}@keyframes dot-pulse{0%{box-shadow:9999px 0 0 -5px #000}30%{box-shadow:9999px 0 0 2px #000}60%,100%{box-shadow:9999px 0 0 -5px #000}}@keyframes dot-pulse-after{0%{box-shadow:10014px 0 0 -5px #000}30%{box-shadow:10014px 0 0 2px #000}60%,100%{box-shadow:10014px 0 0 -5px #000}}.highlighterror{position:relative!important;overflow:visible}.highlighterror:after{content:'';position:absolute!important;width:140%;height:150%;top:-8px!important;right:0!important;bottom:0!important;left:-11px!important;background-color:transparent;background-image:url(../images/highlighterror.png);background-repeat:no-repeat;background-position:center;background-size:100% 100%}.labeldate{font-weight:400;font-size:80%;color:#888}.row,.form-row,label,legend{position:relative}.permalink{position:absolute;color:#ccc;font-size:12px;top:2px;left:-22px;width:20px;height:20px}.permalink:hover{color:#000;text-decoration:none}.tagline{text-align:center;color:#fff;font-size:.6em}@media (max-width:361px){.tagline{font-size:.45em}}.logindate{position:absolute;bottom:10px;right:50%;font-size:24px;color:#fff!important;text-shadow:0 0 20px #000,0 0 15px #000,1px 2px 10px #000}.btn-ghost{color:#000!important;background-color:transparent!important;border-width:0!important;border-color:transparent!important;box-shadow:none!important;outline:0!important}.btn-ghost:hover{color:#000!important;background-color:transparent!important;border-width:0!important;border-color:transparent!important;box-shadow:none!important;outline:0!important}.btn-ghost:focus{color:#000!important;background-color:transparent!important;border-width:0!important;border-color:transparent!important;box-shadow:none!important;outline:0!important}.btn-ghost:active{color:#000!important;background-color:transparent!important;border-width:0!important;border-color:transparent!important;box-shadow:none!important;outline:0!important}.btn-success{color:var(--success-color-contrast)!important;fill:var(--success-color-contrast)!important;background-color:var(--success-background-color)!important;border-color:var(--success-border-color)!important;-webkit-box-shadow:var(--success-shadow)!important;box-shadow:var(--success-shadow)!important}.add:hover,.btn-success:hover{color:var(--success-color-contrast)!important;fill:var(--success-color-contrast)!important;background-color:var(--success-background-color-hover)!important;border-color:var(--success-border-color-hover)!important;-webkit-box-shadow:var(--success-shadow)!important;box-shadow:var(--success-shadow)!important}.add:focus,.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 0 rgba(88,205,145,.5)!important}.addedtrash,.btn-danger{color:var(--danger-color-contrast)!important;background-color:var(--danger-background-color)!important;border-color:var(--danger-border-color)!important;-webkit-box-shadow:var(--danger-shadow)!important;box-shadow:var(--danger-shadow)!important}.addedtrash:hover,.trash:hover,.btn-danger:hover{color:var(--danger-color-contrast)!important;background-color:var(--danger-background-color-hover)!important;border-color:var(--danger-border-color-hover)!important;-webkit-box-shadow:var(--danger-shadow)!important;box-shadow:var(--danger-shadow)!important}.addedtrash:focus,.trash:focus,.btn-danger:focus,.btn-danger.focus{box-shadow:0 0 0 0 rgba(223,70,106,.5)!important}.btn-dark{color:var(--dark-color-contrast)!important;fill:var(--dark-color-contrast)!important;background-color:var(--dark-background-color)!important;border-color:var(--dark-border-color)!important;-webkit-box-shadow:var(--dark-shadow)!important;box-shadow:var(--dark-shadow)!important}.btn-dark:hover{color:var(--dark-color-contrast)!important;fill:var(--dark-color-contrast)!important;background-color:var(--dark-background-color-hover)!important;border-color:var(--dark-border-color-hover)!important}.btn-dark:focus,.btn-dark.focus{box-shadow:0 0 0 0 rgba(88,205,145,.5)!important}.theme{border-width:2px!important}.theme .image-toolbar{top:-2px!important;right:-2px!important}.theme-chooser .enable{display:none}.theme-selected{transition:transform .3s,-webkit-transform .3s!important;box-shadow:0 .3px .4px rgba(0,0,0,.025),0 .9px 1.5px rgba(0,0,0,.05),0 3.5px 6px rgba(0,0,0,.1),0 0 0 2px var(--success-border-color)!important}.theme-selected .enable{display:block!important;position:absolute;top:0;right:0;-webkit-transform:translate(1px,-1px);transform:translate(1px,-1px);background-color:var(--success-border-color);width:100px;height:100px;-webkit-clip-path:polygon(15% 0,100% 0,100% 85%);clip-path:polygon(15% 0,100% 0,100% 85%);pointer-events:none;opacity:1}.theme-selected .icon .enable{display:inline-block!important}.theme .icon .enable{display:none!important;color:inherit;fill:#fff!important;line-height:1;flex-shrink:0;max-width:initial;opacity:0}.theme .card-image{overflow:visible!important;height:auto!important}.theme .card-image img{height:100%;object-position:top!important}.theme-editor{position:absolute;display:none;top:auto;right:0;bottom:0;left:0;height:0;background-color:rgba(0,0,0,.75);padding:20px}.theme-editor.enabled{display:block;height:auto}.vert-shadow{height:100vh;box-shadow:10px 0 20px rgba(92,92,92,.35)}header{position:absolute;top:0;left:0;width:100%;height:330px;color:var(--header-logo-color)!important}header .i{color:var(--header-logo-color)!important}.brand svg{width:175px;color:var(--header-logo-color)}@media (max-width:360px){.brand img{margin-top:-10px;width:80px}}.nav-toggle .line{background-color:var(--nav-toggle-color);height:2px;margin-bottom:4px;display:block;transition:.3s ease-in}.nav-toggle .line.line-1,.nav-toggle .line.line-3{width:11px;margin-left:7px}.nav-toggle .line.line-2{width:18px}.nav-toggle:hover .line.line-1,.nav-toggle:hover .line.line-3{width:18px;margin-left:0}header nav{height:50px}header nav ul.nav-left{margin-top:44px}header nav ul.ml-auto{margin-top:40px;margin-right:5px}header nav ul li{margin:0!important}header nav ul li a{width:100%;background-color:var(--menu-dropdown-background-color)!important;color:var(--menu-dropdown-color)!important}header nav ul li ul li a:hover{background-color:var(--menu-dropdown-background-color-hover)!important;color:var(--menu-dropdown-color-hover)!important;text-decoration:none!important}#notifications ul li{width:auto;height:auto;line-height:1em}#notifications ul li ul,#notifications input[type=checkbox]{display:none}#notifications input:checked ~ #nav-stat-list{display:block;-webkit-animation:swing-in-top-fwd .5s cubic-bezier(.175,.885,.320,1.275) both;animation:swing-in-top-fwd .5s cubic-bezier(.175,.885,.320,1.275) both}.swing-in-top-fwd{-webkit-animation:swing-in-top-fwd .5s cubic-bezier(.175,.885,.320,1.275) both;animation:swing-in-top-fwd .5s cubic-bezier(.175,.885,.320,1.275) both}@-webkit-keyframes swing-in-top-fwd{0%{-webkit-transform:rotateX(-100deg);transform:rotateX(-100deg);-webkit-transform-origin:top;transform-origin:top;opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);-webkit-transform-origin:top;transform-origin:top;opacity:1}}@keyframes swing-in-top-fwd{0%{-webkit-transform:rotateX(-100deg);transform:rotateX(-100deg);-webkit-transform-origin:top;transform-origin:top;opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);-webkit-transform-origin:top;transform-origin:top;opacity:1}}.zoom-in{-webkit-animation:zoom-in .5s cubic-bezier(.250,.460,.450,.940) both;animation:zoom-in .5s cubic-bezier(.250,.460,.450,.940) both}@-webkit-keyframes zoom-in{0%{-webkit-transform:scale(0);transform:scale(0);opacity:1}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes zoom-in{0%{-webkit-transform:scale(0);transform:scale(0);opacity:1}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.zoom-out{-webkit-animation:zoom-out .5s cubic-bezier(.550,.085,.680,.530) both;animation:zoom-out .5s cubic-bezier(.550,.085,.680,.530) both}@-webkit-keyframes zoom-out{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(0);transform:scale(0);opacity:1}}@keyframes zoom-out{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(0);transform:scale(0);opacity:1}}#notifications ul li ul{background-color:var(--menu-dropdown-background-color)!important;border-bottom:1px solid var(--menu-dropdown-border-color)!important;top:45px!important;left:-21px!important;right:auto!important;color:var(--menu-color)!important;width:240px!important;margin:0!important;padding:0!important}#notifications ul li ul li{margin:0!important;padding:0!important}#notifications ul li ul li:focus,#notifications ul li ul li:hover{color:var(--menu-dropdown-color-hover)!important;background-color:var(--menu-dropdown-background-color-hover)!important}#notifications ul li ul li a{color:var(--menu-dropdown-color)!important;margin:0!important;padding:0 1rem!important;line-height:1.75!important}#notifications ul li ul li a .badger{margin-right:10px!important}#notifications ul li ul li a:hover{color:var(--menu-dropdown-color-hover)!important;text-decoration:none!important}#nav-stat-list .dropdown-heading,#nav-account-list .dropdown-heading{background-color:var(--menu-dropdown-background-color)!important;font-size:1.2rem!important;font-weight:900!important;width:240px!important;text-align:center!important;border-bottom:1px solid var(--menu-dropdown-border-color)}#nav-stat-list li{display:block!important;position:relative!important;width:240px!important;text-align:left!important;margin:0!important}#nav-stat-list li span.badger{margin-left:5px}#nav-stat-list li a{display:inline-block!important;line-height:1.75!important}#google-title{position:relative}#google-title,#google-title a,#google-title a:hover{color:#1a0dab!important;font-family:"Arial";font-size:18px}#google-title a:hover{text-decoration:underline}#google-title.contentType:before{position:absolute;top:0;right:auto;bottom:auto;left:-95px;width:90px;color:#888;font-size:10px;text-align:right;content:attr(data-contentType)}#google-link{color:#066921!important;font-family:"Arial";font-size:14px}#google-description{color:#545454!important;font-family:"Arial";font-size:13px}.btn-xs{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;padding:1px 5px;height:20px;font-size:12px;line-height:1.2em}.fc-event{color:#000!important}.events-layer{z-index:100;position:relative;font-size:1em;top:-1px;right:-1px;width:100%;height:auto}[data-contentType]:before{content:attr(data-contentType);position:absolute;top:-5px;left:0;color:#000;font-size:.5em;font-weight:700}.events-layer:hover .events-buttons{display:block}.events-buttons{display:none;z-index:100;position:absolute;top:0;right:0}.events-buttons .btn{padding:.15rem .25rem;line-height:1em}.eventEnd{background-color:#f28888}.eventEndConfirmed{background-color:#88f288}[data-rank]:before{z-index:1;position:absolute;top:-5px;right:0;left:0;margin-top:-10px;width:68px;font-size:9px;color:#000;text-align:center;content:'Visitor'}[data-rank="0"]:before{content:'Visitor'}[data-rank="100"]:before{content:'Subscriber'}[data-rank="200"]:before{content:'Member'}[data-rank="300"]:before{content:'Client'}[data-rank="400"]:before{content:'Contributor'}[data-rank="500"]:before{content:'Author'}[data-rank="600"]:before{content:'Editor'}[data-rank="700"]:before{content:'Moderator'}[data-rank="800"]:before{content:'Manager'}[data-rank="900"]:before{content:'Administrator'}[data-rank="1000"]:before{content:'Developer'}.quickedit{width:100%!important;margin:0 9px!important;border:1px solid var(--border-color)!important;border-top:0!important}.quickedit-border{border-bottom:0!important}.quickedit *,.quickedit .input-text{font-size:.95em!important}.quickedit label{margin:0!important}.quickedit input,.quickedit .input-text,.quickedit select{padding:2px 3px 2px 3px!important}.quickedit .input-text,.quickedit [readonly]{border:0!important}.quickedit [role=button],.quickedit .btn,.quickedit button{padding:6px 8px 3px 6px!important}td img.avatar{max-width:32px;height:32px;border-radius:0}.img-avatar{width:28px;height:28px;border-radius:50%}.nav-header .img-avatar{width:42px;height:42px;border-radius:50%}.img-avatar+span{height:28px;vertical-align:middle}#sidebar{position:absolute;top:90px;left:0;width:260px;margin:20px!important;background-color:var(--sidebar-background-color)!important}.waves{position:relative}.waves::before{content:''!important;display:block!important;position:absolute!important;top:0!important;right:0!important;left:3rem!important;width:100%!important;height:80px!important;background-image:url(../images/waves.png)!important;background-repeat:no-repeat!important;background-position:top right!important;background-size:contain!important}#space{z-index:1;top:0;left:0;width:100%;height:60vh}#sidebar .nav-header{width:100%;height:120px;background-image:url(../images/waves.png);background-repeat:no-repeat;background-position:top left;background-size:100% contain}#sidebar nav ul li{display:inline-block;color:var(--sidebar-color)!important;list-style:none;margin:0}#sidebar nav a{color:var(--sidebar-color)!important}#sidebar nav a:hover,#sidebar nav a:focus{color:var(--sidebar-color-hover)!important}#sidebar nav ul li.active{color:var(--sidebar-color-active)!important;font-weight:700;opacity:1}#sidebar nav ul li.active a{width:260px;color:var(--sidebar-color-active)!important}#sidebar nav .active a{width:260px;color:#000!important}#sidebar nav a{width:260px;background-color:transparent!important;color:#818181;font-weight:400;font-size:16px;padding:0 15px;display:flex;white-space:nowrap;align-items:center;line-height:27px;opacity:.7;margin-left:0;margin-right:0}#sidebar nav a i{line-height:1.5}#sidebar nav a:hover{color:#212121;text-decoration:none}#sidebar .arrow{position:absolute;top:5px;right:12px;color:#ccc;transform:rotate(90deg);transition-duration:.25s;transition-property:transform}#sidebar .arrow.open{transform:rotate(180deg)}#sidebar nav ul li ul{display:none;top:0!important;padding-left:0!important;position:relative;width:260px;height:auto}#sidebar nav ul li.open ul{width:260px;z-index:0;display:inline-grid;background-color:var(--sidebar-open)!important;border:0;box-shadow:none;-webkit-animation:swing-in-top-fwd .5s cubic-bezier(.175,.885,.320,1.275) both;animation:swing-in-top-fwd .5s cubic-bezier(.175,.885,.320,1.275) both}#content{margin:80px 0 0 0;background-color:var(--body-background-color)!important;overflow:visible!important;transition: margin-left .3s ease-in}#content.navsmall{margin-left:260px}@media (max-width:577px){#sidebar{margin-left:-260px;margin-right:0;transition:left .3s ease-in}#sidebar.navsmall{background-color:var(--sidebar-background-color)!important;left:-270px;width:260px!important;height:auto!important;margin-left:0;margin-right:260px;transition:left .3s ease-in}#sidebar nav a{width:260px!important}#sidebar nav ul li ul{width:260px!important;height:auto}}@media (min-width:768px){#content{display:block;margin:80px 0 0 300px;background-color:transparent!important;border-top-left-radius:.5rem;border-top-right-radius:.5rem;overflow:visible!important;transition:margin-left .3s ease-in}#sidebar{margin-left:0;transition:left .3s ease-in}#content.navsmall{margin-left:0;margin-right:0;transition:margin-left .3s ease-in}#sidebar.navsmall{background-color:var(--sidebar-background-color)!important;left:-270px;height:0;margin-left:-260px;transition:left .3s ease-in}}.messages-menu .btn{width:100%}.messages-menu a.link{display:inline-block;width:100%;padding:3px 7px;border-radius:var(--button-radius)}.messages-menu a.link:hover{background-color:var(--button-background-color);color:var(--button-color-hover);text-decoration:none;border-radius:var(--button-border-radius)}.messages-menu a.link.active{color:var(--menu-link-color);background-color:var(--menu-dropdown-border-color);border-radius:var(--button-border-radius)}@-webkit-keyframes swing-in-top-fwd{0%{-webkit-transform:rotateX(-100deg);transform:rotateX(-100deg);-webkit-transform-origin:top;transform-origin:top;opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);-webkit-transform-origin:top;transform-origin:top;opacity:1}}@keyframes swing-in-top-fwd{0%{-webkit-transform:rotateX(-100deg);transform:rotateX(-100deg);-webkit-transform-origin:top;transform-origin:top;opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);-webkit-transform-origin:top;transform-origin:top;opacity:1}}.card{overflow:none!important}.card-actions{margin-left:auto}.card .card-image{display:block;height:12rem;overflow:hidden}.card .card-image img{object-fit:cover;object-position:center}.card-actions{text-align:center;margin:.5rem 0}.card.stats{color:var(--color);box-shadow: 2px 4px 12px 0 var(--shadow-sm-color)}.card.stats:hover{color:var(--color)}.card.stats:hover{text-decoration:none}.card.stats.danger{background-color:var(--alert-danger-background-color)!important;border-color:var(--alert-danger-border-color)!important;color:var(--alert-danger-color)!important}.card.stats.danger .icon{color:var(--alert-danger-color)!important}.card.stats.warning{background-color:var(--alert-warning-background-color)!important;border-color:var(--alert-warning-border-color)!important;color:var(--alert-warning-color)!important}.card.stats.warning .icon{color:var(--alert-warning-color)!important}.card.stats .icon{position:absolute;right:0;bottom:0;color:#000;opacity:.1!important}.no-image{display:none}.form-row{display:flex;flex:1 0 100%;flex-wrap:nowrap}.row>input[type=checkbox]{display:flex;margin-right:10px;border-radius:var(--border-radius)!important}.row>label{display:contents!important}.form-row label{display:contents!important}.form-row .form-text{display:inline-block!important;color:var(--color-muted)!important;width:100%}.form-row .img-avatar,.form-row img{display:inline-block!important;max-width:38px;height:38px}.input-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:var(--form-color-disabled);text-align:center;white-space:nowrap;background-color:var(--form-background-disabled);border:1px solid var(--form-border-color);border-radius:.25rem}.input-text input[type=checkbox],.input-text input[type=radio]{margin-top:0}input[type=text] ~ button,input[type=text] ~ .input-text{border-top-left-radius:0;border-bottom-left-radius:0}.form-row>button:not(:last-child),.form-row>.btn:not(:last-child),.form-row>button>button:not(:last-child),.form-row>.btn>.btn:not(:last-child),.form-row>input:not(:last-child),.form-row>select:not(:last-child),.form-row>.input-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.form-row>button:not(:first-child),.form-row>.btn:not(:first-child),.form-row>button>button:not(:first-child),.form-row>.btn>.btn:not(:first-child),.form-row>input:not(:first-child),.form-row>select:not(:first-child),.form-row>.input-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-row>.btn,.btn-row>button{display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;justify-content:flex-start}.btn-group{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group>.btn:hover{z-index:1}.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.form-row>.custom-file .custom-file-input:focus ~ .custom-file-label,.form-row>.custom-select:focus,.form-row>.form-control:focus{z-index:3}.form-row>.custom-file .custom-file-input:focus{z-index:4}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus ~ .custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled ~ .custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.custom-file-input ~ .custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem+2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.tabs2{margin-right:auto;width:100%}.tabs2 input.tab2-control{display:none!important}[role=tabpanel]{display:none}.tabs2 #tab2-1:checked ~ .tab2-1,.tabs2 #tab2-2:checked ~ .tab2-2,.tabs2 #tab2-3:checked ~ .tab2-3,.tabs2 #tab2-4:checked ~ .tab2-4,.tabs2 #tab2-5:checked ~ .tab2-5,.tabs2 #tab2-6:checked ~ .tab2-6,.tabs2 #tab2-7:checked ~ .tab2-7,.tabs2 #tab2-8:checked ~ .tab2-8,.tabs2 #tab2-9:checked ~ .tab2-9,.tabs2 #tab2-10:checked ~ .tab2-10,.tabs2 #tab2-11:checked ~ .tab2-11,.tabs2 #tab2-12:checked ~ .tab2-12,.tabs2 #tab2-13:checked ~ .tab2-13,.tabs2 #tab2-14:checked ~ .tab2-14,.tabs2 #tab2-15:checked ~ .tab2-15,.tabs2 #tab2-16:checked ~ .tab2-16,.tabs2 #tab2-17:checked ~ .tab2-17,.tabs2 #tab2-18:checked ~ .tab2-18,.tabs2 #tab2-19:checked ~ .tab2-19,.tabs2 #tab2-20:checked ~ .tab2-20{display:block}.tabs2 input.tab2-control+label{display:inline-block;position:relative;top:1px;margin:0;border:var(--border-width) var(--border-style) var(--tab-border-color);border-radius:var(--border-radius) var(--border-radius) 0 0;background:transparent;padding:4px 12px}.tabs2 input.tab2-control+label:hover{cursor:pointer;background-color:var(--tab-background-color-hover)}.tabs2 input.tab2-control:checked+label{border-bottom:var(--border-width) var(--border-style) transparent;background-color:var(--tab-background-color-active)!important;color:var(--tab-color-active)!important}.tabs2 input.tab2-control:checked+label:hover{background-color:var(--tab-background-color-hover)!important}.tabs2 input.tab2-control ~ .tab2{display:none;border-top:var(--border-width) var(--border-style) var(--tab-border-color);padding:12px;width:100%}.border-radius-0{-webkit-border-radius:0;border-radius:0}.wysiwyg-toolbar{background-color:var(--note-toolbar-background-color);border:var(--note-toolbar-border-width) var(--note-toolbar-border-style) var(--note-toolbar-border-color);border-bottom:0;color:var(--note-toolbar-color);padding:var(--note-toolbar-padding-x) var(--note-toolbar-padding-y);border-radius:var(--note-toolbar-border-radius)}.wysiwyg-toolbar input{background-color:#fff}.wysiwyg-toolbar .btn,.wysiwyg-toolbar button,.wysiwyg-toolbar [role=button]{background-color:var(--note-btn-background-color);font-weight:var(--note-btn-font-weight);color:var(--note-btn-color);border:var(--note-btn-border-width) var(--note-btn-border-style) var(--note-btn-border-color);border-radius:var(--note-btn-border-radius)}.wysiwyg-toolbar .btn:hover,.wysiwyg-toolbar button:hover,.wysiwyg-toolbar [role=button]:hover{background-color:var(--note-btn-background-color-hover);color:var(--note-btn-color-hover);border-color var(--note-btn-border-color-hover)}.starRating:not(old){display:block!important;vertical-align:bottom!important;width:12.5em!important;height:2.5em!important;overflow:hidden!important}.starRating:not(old)>input{opacity:0!important;margin-right:-100%!important;background:none!important}.starRating:not(old)>label{display:block!important;margin:0!important;position:relative!important;float:right!important}.starRating:not(old)>label:before{content:'\2605'!important;display:block!important;opacity:.25!important;font-size:2em!important;-webkit-text-stroke-width:1px!important;-webkit-text-stroke-color:#888!important;color:var(--starRating-color)!important;transition:opacity .2s linear!important;width:1.25em!important;height:2.25em!important}.starRating:not(old)>label:hover:before,.starRating:not(old)>label:hover ~ label:before,.starRating:not(:hover)>:checked ~ label:before{opacity:1!important}.rating{display:inline-block!important}.rating span{display:inline-block!important;width:1em!important;height:1em!important}.rating span:before{content:'\2606'!important;display:block!important;color:#888!important}.rating span.set{display:inline-block!important;width:1em!important;height:1em!important}.rating span.set:before{content:'\2605'!important;display:block!important;color:var(--starRating-color)!important;-webkit-text-stroke-width:var(--starRating-outline-width)!important;-webkit-text-stroke-color:var(--starRating-outline-color)!important}.chat .chatList{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.chat .chatBody{border-top-left-radius:0;border-bottom-left-radius:0}#chatScreen{position:relative;height:auto;min-height:calc(100% - 93px);max-height:calc(100% - 93px);overflow-x:hidden;overflow-y:scroll}#chatScreen:empty:after{position:absolute;top:100px;width:100%;color:#888;font-family:Arial;font-size:30px;text-align:center;content:attr(data-empty)}#chatScreen::-webkit-scrollbar{background:transparent;width:8px}#chatScreen::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3)}#chatScreen ul li{display:inline-block;float:left;clear:both;margin:10px 10px 5px 0;width:calc(100% - 25px);font-size:.9em}#chatScreen ul li:nth-last-child(1){margin-bottom:5px}#chatScreen ul li.page img{margin:6px 8px 0 0}#chatScreen ul li.page p{background:#c8ced3;color:#000}#chatScreen ul li.admin img{float:right;margin:6px 0 0 8px}#chatScreen ul li.admin p{float:right;background:#e4e7ea;color:#000}#chatScreen ul li img{float:left;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;width:32px}#chatScreen ul li p{display:inline-block;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px;padding:10px 15px;max-width:80%;line-height:130%}.footer{color:var(--color-muted);background-color:transparent!important}.footer a{color:var(--color-muted)}.footer a:hover{color:var(--color-muted);text-decoration:underline}#toast-container>div{overflow:hidden}.toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;top:-.3em;right:-.3em;float:right;-ms-filter:alpha(opacity=80);filter:alpha(opacity=80);opacity:.8;color:#fff;font-size:20px;font-weight:700;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff}.toast-top-center,.toast-top-full-width{top:0;right:0;width:100%}.toast-close-button:focus,.toast-close-button:hover{-ms-filter:alpha(opacity=40);filter:alpha(opacity=40);opacity:.4;cursor:pointer;color:#000;text-decoration:none}button.toast-close-button{-webkit-appearance:none;cursor:pointer;border:0;background:0;padding:0}.toast-bottom-center,.toast-bottom-full-width{right:0;bottom:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999;pointer-events:none}#toast-container *{-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;-ms-filter:alpha(opacity=80);filter:alpha(opacity=80);opacity:.8;margin:0 0 6px;-webkit-box-shadow:0 0 12px #999;-moz-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background-repeat:no-repeat;background-position:15px center;padding:15px 15px 15px 50px;width:300px;pointer-events:auto;color:#fff}#toast-container>:hover{-ms-filter:alpha(opacity=100);filter:alpha(opacity=100);opacity:1;cursor:pointer;-webkit-box-shadow:0 0 12px #000;-moz-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{margin-right:auto;margin-left:auto;width:300px}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{margin-right:auto;margin-left:auto;width:96%}.toast{background-color:var(--default-color)}.toast-success{background-color:var(--success-color)}.toast-error{background-color:var(--danger-color)}.toast-info{background-color:var(--info-color)}.toast-warning{background-color:var(--warning-color)}.toast-progress{position:absolute;bottom:0;left:0;-ms-filter:alpha(opacity=40);filter:alpha(opacity=40);opacity:.4;background-color:#000;height:4px}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{top:-.2em;right:-.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{top:-.2em;right:-.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.ladda-button{position:relative}.ladda-button .ladda-spinner{display:inline-block;position:absolute;top:0;opacity:0;z-index:2;margin-top:0;width:32px;pointer-events:none}.ladda-button[data-style=expand-down][data-loading] .ladda-spinner,.ladda-button[data-style=expand-left][data-loading] .ladda-spinner,.ladda-button[data-style=expand-right][data-loading] .ladda-spinner{opacity:1}.ladda-button .ladda-label{position:relative;z-index:3}.ladda-button .ladda-progress{display:none;position:absolute;top:0;left:0;-webkit-transition:.1s linear all!important;-moz-transition:.1s linear all!important;-ms-transition:.1s linear all!important;-o-transition:.1s linear all!important;transition:.1s linear all!important;background:rgba(0,0,0,.2);width:0;height:100%}.ladda-button[data-loading] .ladda-progress{display:block}.ladda-button[data-style=zoom-in] .ladda-label,.ladda-button[data-style=zoom-out] .ladda-label{display:inline-block;position:relative}.ladda-button,.ladda-button .ladda-label,.ladda-button .ladda-spinner{-webkit-transition:.3s cubic-bezier(.175,.885,.32,1.275) all!important;transition:.3s cubic-bezier(.175,.885,.32,1.275) all!important}.ladda-button[data-style=zoom-in],.ladda-button[data-style=zoom-in] .ladda-label,.ladda-button[data-style=zoom-in] .ladda-spinner,.ladda-button[data-style=zoom-out],.ladda-button[data-style=zoom-out] .ladda-label,.ladda-button[data-style=zoom-out] .ladda-spinner{-webkit-transition:.3s ease all!important;transition:.3s ease all!important}.ladda-button[data-style=expand-right] .ladda-spinner{right:-6px}.ladda-button[data-style=expand-right][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-right][data-size=xs] .ladda-spinner{right:-12px}.ladda-button[data-style=expand-right][data-loading]{padding-right:56px}.ladda-button[data-style=expand-right][data-loading][data-size="s"],.ladda-button[data-style=expand-right][data-loading][data-size=xs]{padding-right:40px}.ladda-button[data-style=expand-left] .ladda-spinner{left:26px}.ladda-button[data-style=expand-left][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-left][data-size=xs] .ladda-spinner{left:4px}.ladda-button[data-style=expand-left][data-loading]{padding-left:56px}.ladda-button[data-style=expand-left][data-loading][data-size="s"],.ladda-button[data-style=expand-left][data-loading][data-size=xs]{padding-left:40px}.ladda-button[data-style=expand-up] .ladda-spinner{top:-32px;left:50%;margin-left:0}.ladda-button[data-style=expand-up][data-loading]{padding-top:54px}.ladda-button[data-style=expand-up][data-loading] .ladda-spinner{top:26px;opacity:1;margin-top:0}.ladda-button[data-style=expand-up][data-loading][data-size="s"],.ladda-button[data-style=expand-up][data-loading][data-size=xs]{padding-top:32px}.ladda-button[data-style=expand-up][data-loading][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-up][data-loading][data-size=xs] .ladda-spinner{top:4px}.ladda-button[data-style=expand-down] .ladda-spinner{top:62px;left:50%;margin-left:0}.ladda-button[data-style=expand-down][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-down][data-size=xs] .ladda-spinner{top:40px}.ladda-button[data-style=expand-down][data-loading]{padding-bottom:54px}.ladda-button[data-style=expand-down][data-loading][data-size="s"],.ladda-button[data-style=expand-down][data-loading][data-size=xs]{padding-bottom:32px}.ladda-button[data-style=slide-left] .ladda-label{position:relative}.ladda-button[data-style=slide-left] .ladda-spinner{left:100%;margin-left:0}.ladda-button[data-style=slide-left][data-loading] .ladda-label{left:-100%;opacity:0}.ladda-button[data-style=slide-left][data-loading] .ladda-spinner{left:50%;opacity:1}.ladda-button[data-style=slide-right] .ladda-label{position:relative}.ladda-button[data-style=slide-right] .ladda-spinner{right:100%;left:16px;margin-left:0}[dir=rtl] .ladda-button[data-style=slide-right] .ladda-spinner{right:auto}.ladda-button[data-style=slide-right][data-loading] .ladda-label{left:100%;opacity:0}.ladda-button[data-style=slide-right][data-loading] .ladda-spinner{left:50%;opacity:1}.ladda-button[data-style=slide-up] .ladda-label{position:relative}.ladda-button[data-style=slide-up] .ladda-spinner{left:50%;margin-top:1em;margin-left:0}.ladda-button[data-style=slide-up][data-loading] .ladda-label{top:-1em;opacity:0}.ladda-button[data-style=slide-up][data-loading] .ladda-spinner{opacity:1;margin-top:0}.ladda-button[data-style=slide-down]{overflow:hidden}.ladda-button[data-style=slide-down] .ladda-label{position:relative}.ladda-button[data-style=slide-down] .ladda-spinner{left:50%;margin-top:-2em;margin-left:0}.ladda-button[data-style=slide-down][data-loading] .ladda-label{top:1em;opacity:0}.ladda-button[data-style=slide-down][data-loading] .ladda-spinner{opacity:1;margin-top:0}.ladda-button[data-style=zoom-out] .ladda-spinner{left:50%;-webkit-transform:scale(2.5);-moz-transform:scale(2.5);-ms-transform:scale(2.5);-o-transform:scale(2.5);transform:scale(2.5);margin-left:32px}.ladda-button[data-style=zoom-out][data-loading] .ladda-label{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}.ladda-button[data-style=zoom-out][data-loading] .ladda-spinner{-webkit-transform:none;transform:none;opacity:1;margin-left:0}.ladda-button[data-style=zoom-in] .ladda-spinner{left:50%;-webkit-transform:scale(.2);-moz-transform:scale(.2);-ms-transform:scale(.2);-o-transform:scale(.2);transform:scale(.2);margin-left:-16px}.ladda-button[data-style=zoom-in][data-loading] .ladda-label{-webkit-transform:scale(2.2);transform:scale(2.2);opacity:0}.ladda-button[data-style=zoom-in][data-loading] .ladda-spinner{-webkit-transform:none;transform:none;opacity:1;margin-left:0}.ladda-button[data-style=contract]{width:100px}.ladda-button[data-style=contract] .ladda-spinner{left:50%;margin-left:0}.ladda-button[data-style=contract][data-loading]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;width:52px}.ladda-button[data-style=contract][data-loading] .ladda-label{opacity:0}.ladda-button[data-style=contract][data-loading] .ladda-spinner{opacity:1}.ladda-button[data-style=contract-overlay]{-webkit-box-shadow:0 0 0 2000px transparent;box-shadow:0 0 0 2000px transparent;width:100px}.ladda-button[data-style=contract-overlay] .ladda-spinner{left:50%;margin-left:0}.ladda-button[data-style=contract-overlay][data-loading]{-webkit-box-shadow:0 0 0 2000px rgba(0,0,0,.8);box-shadow:0 0 0 2000px rgba(0,0,0,.8);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;width:52px}.ladda-button[data-style=contract-overlay][data-loading] .ladda-label{opacity:0}.ladda-button[data-style=contract-overlay][data-loading] .ladda-spinner{opacity:1}[dir=rtl] .ladda-spinner>div{left:25%!important}.page-block{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background-color:var(--dialog-backdrop-color)}.page-block .spinner{width:60px;height:60px;position:absolute;top:0;left:0;bottom:60px;right:0;margin:auto;user-select:none}.sk-chase{display:flex;width:40px;height:40px;position:relative;animation:sk-chase 2.5s infinite linear both;align-content:center}.sk-chase-dot{width:100%;height:100%;position:absolute;left:0;top:0;animation:sk-chase-dot 2s infinite ease-in-out both}.sk-chase-dot:before{content:'';display:block;width:25%;height:25%;background-color:#fff;border-radius:100%;animation:sk-chase-dot-before 2s infinite ease-in-out both}.sk-chase.black .sk-chase-dot:before{background-color:#000}.sk-chase-dot:nth-child(1){animation-delay:-1.1s}.sk-chase-dot:nth-child(2){animation-delay:-1.0s}.sk-chase-dot:nth-child(3){animation-delay:-.9s}.sk-chase-dot:nth-child(4){animation-delay:-.8s}.sk-chase-dot:nth-child(5){animation-delay:-.7s}.sk-chase-dot:nth-child(6){animation-delay:-.6s}.sk-chase-dot:nth-child(1):before{animation-delay:-1.1s}.sk-chase-dot:nth-child(2):before{animation-delay:-1s}.sk-chase-dot:nth-child(3):before{animation-delay:-.9s}.sk-chase-dot:nth-child(4):before{animation-delay:-.8s}.sk-chase-dot:nth-child(5):before{animation-delay:-.7s}.sk-chase-dot:nth-child(6):before{animation-delay:-.6s}@keyframes sk-chase{100%{transform:rotate(360deg)}}@keyframes sk-chase-dot{80%,100%{transform:rotate(360deg)}}@keyframes sk-chase-dot-before{50%{transform:scale(.4)}100%,0%{transform:scale(1.0)}} +.bg-aurora{background-color:var(--body-background-color)!important}.text-white{color:var(--text-white)}.dot-pulse{position:relative;margin-top:6px;margin-left:30px;left:-9999px;width:10px;height:10px;border-radius:5px;background-color:#000;color:#000;box-shadow:9999px 0 0 -5px #000;animation:dot-pulse 1.5s infinite linear;animation-delay:.25s}.dot-pulse.select{position:absolute;z-index:1;top:8px}.dot-pulse::before,.dot-pulse::after{content:'';display:inline-block;position:absolute;top:0;width:10px;height:10px;border-radius:5px;background-color:#000;color:#000}.dot-pulse::before{box-shadow:9984px 0 0 -5px #000;animation:dot-pulse-before 1.5s infinite linear;animation-delay:0s}.dot-pulse::after{box-shadow:10014px 0 0 -5px #000;animation:dot-pulse-after 1.5s infinite linear;animation-delay:.5s}@keyframes dot-pulse-before{0%{box-shadow:9984px 0 0 -5px #000}30%{box-shadow:9984px 0 0 2px #000}60%,100%{box-shadow:9984px 0 0 -5px #000}}@keyframes dot-pulse{0%{box-shadow:9999px 0 0 -5px #000}30%{box-shadow:9999px 0 0 2px #000}60%,100%{box-shadow:9999px 0 0 -5px #000}}@keyframes dot-pulse-after{0%{box-shadow:10014px 0 0 -5px #000}30%{box-shadow:10014px 0 0 2px #000}60%,100%{box-shadow:10014px 0 0 -5px #000}}.highlighterror{position:relative!important;overflow:visible}.highlighterror:after{content:'';position:absolute!important;width:140%;height:150%;top:-8px!important;right:0!important;bottom:0!important;left:-11px!important;background-color:transparent;background-image:url(../images/highlighterror.png);background-repeat:no-repeat;background-position:center;background-size:100% 100%}.labeldate{font-weight:400;font-size:80%;color:#888}.row,.form-row,label,legend{position:relative}.permalink{position:absolute;color:#ccc;font-size:12px;top:2px;left:-22px;width:20px;height:20px}.permalink:hover{color:#000;text-decoration:none}.tagline{text-align:center;color:#fff;font-size:.6em}@media (max-width:361px){.tagline{font-size:.45em}}.logindate{position:absolute;bottom:10px;right:50%;font-size:24px;color:#fff!important;text-shadow:0 0 20px #000,0 0 15px #000,1px 2px 10px #000}.btn-ghost{color:#000!important;background-color:transparent!important;border-width:0!important;border-color:transparent!important;box-shadow:none!important;outline:0!important}.btn-ghost:hover{color:#000!important;background-color:transparent!important;border-width:0!important;border-color:transparent!important;box-shadow:none!important;outline:0!important}.btn-ghost:focus{color:#000!important;background-color:transparent!important;border-width:0!important;border-color:transparent!important;box-shadow:none!important;outline:0!important}.btn-ghost:active{color:#000!important;background-color:transparent!important;border-width:0!important;border-color:transparent!important;box-shadow:none!important;outline:0!important}.btn-success{color:var(--success-color-contrast)!important;fill:var(--success-color-contrast)!important;background-color:var(--success-background-color)!important;border-color:var(--success-border-color)!important;-webkit-box-shadow:var(--success-shadow)!important;box-shadow:var(--success-shadow)!important}.add:hover,.btn-success:hover{color:var(--success-color-contrast)!important;fill:var(--success-color-contrast)!important;background-color:var(--success-background-color-hover)!important;border-color:var(--success-border-color-hover)!important;-webkit-box-shadow:var(--success-shadow)!important;box-shadow:var(--success-shadow)!important}.add:focus,.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 0 rgba(88,205,145,.5)!important}.addedtrash,.btn-danger{color:var(--danger-color-contrast)!important;background-color:var(--danger-background-color)!important;border-color:var(--danger-border-color)!important;-webkit-box-shadow:var(--danger-shadow)!important;box-shadow:var(--danger-shadow)!important}.addedtrash:hover,.trash:hover,.btn-danger:hover{color:var(--danger-color-contrast)!important;background-color:var(--danger-background-color-hover)!important;border-color:var(--danger-border-color-hover)!important;-webkit-box-shadow:var(--danger-shadow)!important;box-shadow:var(--danger-shadow)!important}.addedtrash:focus,.trash:focus,.btn-danger:focus,.btn-danger.focus{box-shadow:0 0 0 0 rgba(223,70,106,.5)!important}.btn-dark{color:var(--dark-color-contrast)!important;fill:var(--dark-color-contrast)!important;background-color:var(--dark-background-color)!important;border-color:var(--dark-border-color)!important;-webkit-box-shadow:var(--dark-shadow)!important;box-shadow:var(--dark-shadow)!important}.btn-dark:hover{color:var(--dark-color-contrast)!important;fill:var(--dark-color-contrast)!important;background-color:var(--dark-background-color-hover)!important;border-color:var(--dark-border-color-hover)!important}.btn-dark:focus,.btn-dark.focus{box-shadow:0 0 0 0 rgba(88,205,145,.5)!important}.theme,.certificate{border-width:2px!important}.theme .image-toolbar{top:-2px!important;right:-2px!important}.theme-chooser .enable{display:none}.theme-selected,.certificate-selected{transition:transform .3s,-webkit-transform .3s!important;box-shadow:0 .3px .4px rgba(0,0,0,.025),0 .9px 1.5px rgba(0,0,0,.05),0 3.5px 6px rgba(0,0,0,.1),0 0 0 2px var(--success-border-color)!important}.theme-selected .enable{display:block!important;position:absolute;top:0;right:0;-webkit-transform:translate(1px,-1px);transform:translate(1px,-1px);background-color:var(--success-border-color);width:100px;height:100px;-webkit-clip-path:polygon(15% 0,100% 0,100% 85%);clip-path:polygon(15% 0,100% 0,100% 85%);pointer-events:none;opacity:1}.theme-selected .icon .enable{display:inline-block!important}.theme .icon .enable{display:none!important;color:inherit;fill:#fff!important;line-height:1;flex-shrink:0;max-width:initial;opacity:0}.theme .card-image{overflow:visible!important;height:auto!important}.certificate .card-image{overflow:visible!important;height:auto!important}.theme .card-image img{height:100%;object-position:top!important}.certificate .card-image img{height:100%;object-position:top!important;margin-bottom:0!important}.theme-editor{position:absolute;display:none;top:auto;right:0;bottom:0;left:0;height:0;background-color:rgba(0,0,0,.75);padding:20px}.theme-editor.enabled{display:block;height:auto}.vert-shadow{height:100vh;box-shadow:10px 0 20px rgba(92,92,92,.35)}header{position:absolute;top:0;left:0;width:100%;height:330px;color:var(--header-logo-color)!important}header .i{color:var(--header-logo-color)!important}.brand svg{width:175px;color:var(--header-logo-color)}@media (max-width:360px){.brand img{margin-top:-10px;width:80px}}.nav-toggle .line{background-color:var(--nav-toggle-color);height:2px;margin-bottom:4px;display:block;transition:.3s ease-in}.nav-toggle .line.line-1,.nav-toggle .line.line-3{width:11px;margin-left:7px}.nav-toggle .line.line-2{width:18px}.nav-toggle:hover .line.line-1,.nav-toggle:hover .line.line-3{width:18px;margin-left:0}header nav{height:50px}header nav ul.nav-left{margin-top:44px}header nav ul.ml-auto{margin-top:40px;margin-right:5px}header nav ul li{margin:0!important}header nav ul li a{width:100%;background-color:var(--menu-dropdown-background-color)!important;color:var(--menu-dropdown-color)!important}header nav ul li ul li a:hover{background-color:var(--menu-dropdown-background-color-hover)!important;color:var(--menu-dropdown-color-hover)!important;text-decoration:none!important}#notifications ul li{width:auto;height:auto;line-height:1em}#notifications ul li ul,#notifications input[type=checkbox]{display:none}#notifications input:checked ~ #nav-stat-list{display:block;-webkit-animation:swing-in-top-fwd .5s cubic-bezier(.175,.885,.320,1.275) both;animation:swing-in-top-fwd .5s cubic-bezier(.175,.885,.320,1.275) both}.swing-in-top-fwd{-webkit-animation:swing-in-top-fwd .5s cubic-bezier(.175,.885,.320,1.275) both;animation:swing-in-top-fwd .5s cubic-bezier(.175,.885,.320,1.275) both}@-webkit-keyframes swing-in-top-fwd{0%{-webkit-transform:rotateX(-100deg);transform:rotateX(-100deg);-webkit-transform-origin:top;transform-origin:top;opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);-webkit-transform-origin:top;transform-origin:top;opacity:1}}@keyframes swing-in-top-fwd{0%{-webkit-transform:rotateX(-100deg);transform:rotateX(-100deg);-webkit-transform-origin:top;transform-origin:top;opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);-webkit-transform-origin:top;transform-origin:top;opacity:1}}.zoom-in{-webkit-animation:zoom-in .5s cubic-bezier(.250,.460,.450,.940) both;animation:zoom-in .5s cubic-bezier(.250,.460,.450,.940) both}@-webkit-keyframes zoom-in{0%{-webkit-transform:scale(0);transform:scale(0);opacity:1}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes zoom-in{0%{-webkit-transform:scale(0);transform:scale(0);opacity:1}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.zoom-out{-webkit-animation:zoom-out .5s cubic-bezier(.550,.085,.680,.530) both;animation:zoom-out .5s cubic-bezier(.550,.085,.680,.530) both}@-webkit-keyframes zoom-out{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(0);transform:scale(0);opacity:1}}@keyframes zoom-out{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(0);transform:scale(0);opacity:1}}#notifications ul li ul{background-color:var(--menu-dropdown-background-color)!important;border-bottom:1px solid var(--menu-dropdown-border-color)!important;top:45px!important;left:-21px!important;right:auto!important;color:var(--menu-color)!important;width:240px!important;margin:0!important;padding:0!important}#notifications ul li ul li{margin:0!important;padding:0!important}#notifications ul li ul li:focus,#notifications ul li ul li:hover{color:var(--menu-dropdown-color-hover)!important;background-color:var(--menu-dropdown-background-color-hover)!important}#notifications ul li ul li a{color:var(--menu-dropdown-color)!important;margin:0!important;padding:0 1rem!important;line-height:1.75!important}#notifications ul li ul li a .badger{margin-right:10px!important}#notifications ul li ul li a:hover{color:var(--menu-dropdown-color-hover)!important;text-decoration:none!important}#nav-stat-list .dropdown-heading,#nav-account-list .dropdown-heading{background-color:var(--menu-dropdown-background-color)!important;font-size:1.2rem!important;font-weight:900!important;width:240px!important;text-align:center!important;border-bottom:1px solid var(--menu-dropdown-border-color)}#nav-stat-list li{display:block!important;position:relative!important;width:240px!important;text-align:left!important;margin:0!important}#nav-stat-list li span.badger{margin-left:5px}#nav-stat-list li a{display:inline-block!important;line-height:1.75!important}#google-title{position:relative}#google-title,#google-title a,#google-title a:hover{color:#1a0dab!important;font-family:"Arial";font-size:18px}#google-title a:hover{text-decoration:underline}#google-title.contentType:before{position:absolute;top:0;right:auto;bottom:auto;left:-95px;width:90px;color:#888;font-size:10px;text-align:right;content:attr(data-contentType)}#google-link{color:#066921!important;font-family:"Arial";font-size:14px}#google-description{color:#545454!important;font-family:"Arial";font-size:13px}.btn-xs{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;padding:1px 5px;height:20px;font-size:12px;line-height:1.2em}.fc-event{color:#000!important}.events-layer{z-index:100;position:relative;font-size:1em;top:-1px;right:-1px;width:100%;height:auto}[data-contentType]:before{content:attr(data-contentType);position:absolute;top:-5px;left:0;color:#000;font-size:.5em;font-weight:700}.events-layer:hover .events-buttons{display:block}.events-buttons{display:none;z-index:100;position:absolute;top:0;right:0}.events-buttons .btn{padding:.15rem .25rem;line-height:1em}.eventEnd{background-color:#f28888}.eventEndConfirmed{background-color:#88f288}[data-rank]:before{z-index:1;position:absolute;top:-5px;right:0;left:0;margin-top:-10px;width:68px;font-size:9px;color:#000;text-align:center;content:'Visitor'}[data-rank="0"]:before{content:'Visitor'}[data-rank="100"]:before{content:'Subscriber'}[data-rank="200"]:before{content:'Member'}[data-rank="300"]:before{content:'Client'}[data-rank="400"]:before{content:'Contributor'}[data-rank="500"]:before{content:'Author'}[data-rank="600"]:before{content:'Editor'}[data-rank="700"]:before{content:'Moderator'}[data-rank="800"]:before{content:'Manager'}[data-rank="900"]:before{content:'Administrator'}[data-rank="1000"]:before{content:'Developer'}.quickedit{width:100%!important;margin:0 9px!important;border:1px solid var(--border-color)!important;border-top:0!important}.quickedit-border{border-bottom:0!important}.quickedit *,.quickedit .input-text{font-size:.95em!important}.quickedit label{margin:0!important}.quickedit input,.quickedit .input-text,.quickedit select{padding:2px 3px 2px 3px!important}.quickedit .input-text,.quickedit [readonly]{border:0!important}.quickedit [role=button],.quickedit .btn,.quickedit button{padding:6px 8px 3px 6px!important}td img.avatar{max-width:32px;height:32px;border-radius:0}.img-avatar{width:28px;height:28px;border-radius:50%}.nav-header .img-avatar{width:42px;height:42px;border-radius:50%}.img-avatar+span{height:28px;vertical-align:middle}#sidebar{position:absolute;top:90px;left:0;width:260px;margin:20px!important;background-color:var(--sidebar-background-color)!important}.waves{position:relative}.waves::before{content:''!important;display:block!important;position:absolute!important;top:0!important;right:0!important;left:3rem!important;width:100%!important;height:80px!important;background-image:url(../images/waves.png)!important;background-repeat:no-repeat!important;background-position:top right!important;background-size:contain!important}#space{z-index:1;top:0;left:0;width:100%;height:60vh}#sidebar .nav-header{width:100%;height:120px;background-image:url(../images/waves.png);background-repeat:no-repeat;background-position:top left;background-size:100% contain}#sidebar nav ul li{display:inline-block;color:var(--sidebar-color)!important;list-style:none;margin:0}#sidebar nav a{color:var(--sidebar-color)!important}#sidebar nav a:hover,#sidebar nav a:focus{color:var(--sidebar-color-hover)!important}#sidebar nav ul li.active{color:var(--sidebar-color-active)!important;font-weight:700;opacity:1}#sidebar nav ul li.active a{width:260px;color:var(--sidebar-color-active)!important}#sidebar nav .active a{width:260px;color:#000!important}#sidebar nav a{width:260px;background-color:transparent!important;color:#818181;font-weight:400;font-size:16px;padding:0 15px;display:flex;white-space:nowrap;align-items:center;line-height:27px;opacity:.7;margin-left:0;margin-right:0}#sidebar nav a i{line-height:1.5}#sidebar nav a:hover{color:#212121;text-decoration:none}#sidebar .arrow{position:absolute;top:5px;right:12px;color:#ccc;transform:rotate(90deg);transition-duration:.25s;transition-property:transform}#sidebar .arrow.open{transform:rotate(180deg)}#sidebar nav ul li ul{display:none;top:0!important;padding-left:0!important;position:relative;width:260px;height:auto}#sidebar nav ul li.open ul{width:260px;z-index:0;display:inline-grid;background-color:var(--sidebar-open)!important;border:0;box-shadow:none;-webkit-animation:swing-in-top-fwd .5s cubic-bezier(.175,.885,.320,1.275) both;animation:swing-in-top-fwd .5s cubic-bezier(.175,.885,.320,1.275) both}#content{margin:80px 0 0 0;background-color:var(--body-background-color)!important;overflow:visible!important;transition: margin-left .3s ease-in}#content.navsmall{margin-left:260px}@media (max-width:577px){#sidebar{margin-left:-260px;margin-right:0;transition:left .3s ease-in}#sidebar.navsmall{background-color:var(--sidebar-background-color)!important;left:-270px;width:260px!important;height:auto!important;margin-left:0;margin-right:260px;transition:left .3s ease-in}#sidebar nav a{width:260px!important}#sidebar nav ul li ul{width:260px!important;height:auto}}@media (min-width:768px){#content{display:block;margin:80px 0 0 300px;background-color:transparent!important;border-top-left-radius:.5rem;border-top-right-radius:.5rem;overflow:visible!important;transition:margin-left .3s ease-in}#sidebar{margin-left:0;transition:left .3s ease-in}#content.navsmall{margin-left:0;margin-right:0;transition:margin-left .3s ease-in}#sidebar.navsmall{background-color:var(--sidebar-background-color)!important;left:-270px;height:0;margin-left:-260px;transition:left .3s ease-in}}.messages-menu .btn{width:100%}.messages-menu a.link{display:inline-block;width:100%;padding:3px 7px;border-radius:var(--button-radius)}.messages-menu a.link:hover{background-color:var(--button-background-color);color:var(--button-color-hover);text-decoration:none;border-radius:var(--button-border-radius)}.messages-menu a.link.active{color:var(--menu-link-color);background-color:var(--menu-dropdown-border-color);border-radius:var(--button-border-radius)}@-webkit-keyframes swing-in-top-fwd{0%{-webkit-transform:rotateX(-100deg);transform:rotateX(-100deg);-webkit-transform-origin:top;transform-origin:top;opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);-webkit-transform-origin:top;transform-origin:top;opacity:1}}@keyframes swing-in-top-fwd{0%{-webkit-transform:rotateX(-100deg);transform:rotateX(-100deg);-webkit-transform-origin:top;transform-origin:top;opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);-webkit-transform-origin:top;transform-origin:top;opacity:1}}.card{overflow:none!important}.card-actions{margin-left:auto}.card .card-image{display:block;height:12rem;overflow:hidden}.card .card-image img{object-fit:cover;object-position:center}.card-actions{text-align:center;margin:.5rem 0}.card.stats{color:var(--color);box-shadow: 2px 4px 12px 0 var(--shadow-sm-color)}.card.stats:hover{color:var(--color)}.card.stats:hover{text-decoration:none}.card.stats.danger{background-color:var(--alert-danger-background-color)!important;border-color:var(--alert-danger-border-color)!important;color:var(--alert-danger-color)!important}.card.stats.danger .icon{color:var(--alert-danger-color)!important}.card.stats.warning{background-color:var(--alert-warning-background-color)!important;border-color:var(--alert-warning-border-color)!important;color:var(--alert-warning-color)!important}.card.stats.warning .icon{color:var(--alert-warning-color)!important}.card.stats .icon{position:absolute;right:0;bottom:0;color:#000;opacity:.1!important}.no-image{display:none}.form-row{display:flex;flex:1 0 100%;flex-wrap:nowrap}.row>input[type=checkbox]{display:flex;margin-right:10px;border-radius:var(--border-radius)!important}.row>label{display:contents!important}.form-row label{display:contents!important}.form-row .form-text{display:inline-block!important;color:var(--color-muted)!important;width:100%}.form-row .img-avatar,.form-row img{display:inline-block!important;max-width:38px;height:38px}.input-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:var(--form-color-disabled);text-align:center;white-space:nowrap;background-color:var(--form-background-disabled);border:1px solid var(--form-border-color);border-radius:.25rem}.input-text input[type=checkbox],.input-text input[type=radio]{margin-top:0}input[type=text] ~ button,input[type=text] ~ .input-text{border-top-left-radius:0;border-bottom-left-radius:0}.form-row>button:not(:last-child),.form-row>.btn:not(:last-child),.form-row>button>button:not(:last-child),.form-row>.btn>.btn:not(:last-child),.form-row>input:not(:last-child),.form-row>select:not(:last-child),.form-row>.input-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.form-row>button:not(:first-child),.form-row>.btn:not(:first-child),.form-row>button>button:not(:first-child),.form-row>.btn>.btn:not(:first-child),.form-row>input:not(:first-child),.form-row>select:not(:first-child),.form-row>.input-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-row>.btn,.btn-row>button{display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;justify-content:flex-start}.btn-group{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group>.btn:hover{z-index:1}.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.form-row>.custom-file .custom-file-input:focus ~ .custom-file-label,.form-row>.custom-select:focus,.form-row>.form-control:focus{z-index:3}.form-row>.custom-file .custom-file-input:focus{z-index:4}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus ~ .custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled ~ .custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.custom-file-input ~ .custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem+2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.tabs2{margin-right:auto;width:100%}.tabs2 input.tab2-control{display:none!important}[role=tabpanel]{display:none}.tabs2 #tab2-1:checked ~ .tab2-1,.tabs2 #tab2-2:checked ~ .tab2-2,.tabs2 #tab2-3:checked ~ .tab2-3,.tabs2 #tab2-4:checked ~ .tab2-4,.tabs2 #tab2-5:checked ~ .tab2-5,.tabs2 #tab2-6:checked ~ .tab2-6,.tabs2 #tab2-7:checked ~ .tab2-7,.tabs2 #tab2-8:checked ~ .tab2-8,.tabs2 #tab2-9:checked ~ .tab2-9,.tabs2 #tab2-10:checked ~ .tab2-10,.tabs2 #tab2-11:checked ~ .tab2-11,.tabs2 #tab2-12:checked ~ .tab2-12,.tabs2 #tab2-13:checked ~ .tab2-13,.tabs2 #tab2-14:checked ~ .tab2-14,.tabs2 #tab2-15:checked ~ .tab2-15,.tabs2 #tab2-16:checked ~ .tab2-16,.tabs2 #tab2-17:checked ~ .tab2-17,.tabs2 #tab2-18:checked ~ .tab2-18,.tabs2 #tab2-19:checked ~ .tab2-19,.tabs2 #tab2-20:checked ~ .tab2-20{display:block}.tabs2 input.tab2-control+label{display:inline-block;position:relative;top:1px;margin:0;border:var(--border-width) var(--border-style) var(--tab-border-color);border-radius:var(--border-radius) var(--border-radius) 0 0;background:transparent;padding:4px 12px}.tabs2 input.tab2-control+label:hover{cursor:pointer;background-color:var(--tab-background-color-hover)}.tabs2 input.tab2-control:checked+label{border-bottom:var(--border-width) var(--border-style) transparent;background-color:var(--tab-background-color-active)!important;color:var(--tab-color-active)!important}.tabs2 input.tab2-control:checked+label:hover{background-color:var(--tab-background-color-hover)!important}.tabs2 input.tab2-control ~ .tab2{display:none;border-top:var(--border-width) var(--border-style) var(--tab-border-color);padding:12px;width:100%}.border-radius-0{-webkit-border-radius:0;border-radius:0}.wysiwyg-toolbar{background-color:var(--note-toolbar-background-color);border:var(--note-toolbar-border-width) var(--note-toolbar-border-style) var(--note-toolbar-border-color);border-bottom:0;color:var(--note-toolbar-color);padding:var(--note-toolbar-padding-x) var(--note-toolbar-padding-y);border-radius:var(--note-toolbar-border-radius)}.wysiwyg-toolbar input{background-color:#fff}.wysiwyg-toolbar .btn,.wysiwyg-toolbar button,.wysiwyg-toolbar [role=button]{background-color:var(--note-btn-background-color);font-weight:var(--note-btn-font-weight);color:var(--note-btn-color);border:var(--note-btn-border-width) var(--note-btn-border-style) var(--note-btn-border-color);border-radius:var(--note-btn-border-radius)}.wysiwyg-toolbar .btn:hover,.wysiwyg-toolbar button:hover,.wysiwyg-toolbar [role=button]:hover{background-color:var(--note-btn-background-color-hover);color:var(--note-btn-color-hover);border-color var(--note-btn-border-color-hover)}.starRating:not(old){display:block!important;vertical-align:bottom!important;width:12.5em!important;height:2.5em!important;overflow:hidden!important}.starRating:not(old)>input{opacity:0!important;margin-right:-100%!important;background:none!important}.starRating:not(old)>label{display:block!important;margin:0!important;position:relative!important;float:right!important}.starRating:not(old)>label:before{content:'\2605'!important;display:block!important;opacity:.25!important;font-size:2em!important;-webkit-text-stroke-width:1px!important;-webkit-text-stroke-color:#888!important;color:var(--starRating-color)!important;transition:opacity .2s linear!important;width:1.25em!important;height:2.25em!important}.starRating:not(old)>label:hover:before,.starRating:not(old)>label:hover ~ label:before,.starRating:not(:hover)>:checked ~ label:before{opacity:1!important}.rating{display:inline-block!important}.rating span{display:inline-block!important;width:1em!important;height:1em!important}.rating span:before{content:'\2606'!important;display:block!important;color:#888!important}.rating span.set{display:inline-block!important;width:1em!important;height:1em!important}.rating span.set:before{content:'\2605'!important;display:block!important;color:var(--starRating-color)!important;-webkit-text-stroke-width:var(--starRating-outline-width)!important;-webkit-text-stroke-color:var(--starRating-outline-color)!important}.chat .chatList{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.chat .chatBody{border-top-left-radius:0;border-bottom-left-radius:0}#chatScreen{position:relative;height:auto;min-height:calc(100% - 93px);max-height:calc(100% - 93px);overflow-x:hidden;overflow-y:scroll}#chatScreen:empty:after{position:absolute;top:100px;width:100%;color:#888;font-family:Arial;font-size:30px;text-align:center;content:attr(data-empty)}#chatScreen::-webkit-scrollbar{background:transparent;width:8px}#chatScreen::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3)}#chatScreen ul li{display:inline-block;float:left;clear:both;margin:10px 10px 5px 0;width:calc(100% - 25px);font-size:.9em}#chatScreen ul li:nth-last-child(1){margin-bottom:5px}#chatScreen ul li.page img{margin:6px 8px 0 0}#chatScreen ul li.page p{background:#c8ced3;color:#000}#chatScreen ul li.admin img{float:right;margin:6px 0 0 8px}#chatScreen ul li.admin p{float:right;background:#e4e7ea;color:#000}#chatScreen ul li img{float:left;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;width:32px}#chatScreen ul li p{display:inline-block;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px;padding:10px 15px;max-width:80%;line-height:130%}.footer{color:var(--color-muted);background-color:transparent!important}.footer a{color:var(--color-muted)}.footer a:hover{color:var(--color-muted);text-decoration:underline}#toast-container>div{overflow:hidden}.toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;top:-.3em;right:-.3em;float:right;-ms-filter:alpha(opacity=80);filter:alpha(opacity=80);opacity:.8;color:#fff;font-size:20px;font-weight:700;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff}.toast-top-center,.toast-top-full-width{top:0;right:0;width:100%}.toast-close-button:focus,.toast-close-button:hover{-ms-filter:alpha(opacity=40);filter:alpha(opacity=40);opacity:.4;cursor:pointer;color:#000;text-decoration:none}button.toast-close-button{-webkit-appearance:none;cursor:pointer;border:0;background:0;padding:0}.toast-bottom-center,.toast-bottom-full-width{right:0;bottom:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999;pointer-events:none}#toast-container *{-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;-ms-filter:alpha(opacity=95);filter:alpha(opacity=95);opacity:.95;margin:0 0 6px;-webkit-box-shadow:0 0 12px #999;-moz-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background-repeat:no-repeat;background-position:15px center;padding:15px 15px 15px 50px;width:300px;pointer-events:auto;color:#fff}#toast-container>:hover{-ms-filter:alpha(opacity=100);filter:alpha(opacity=100);opacity:1;cursor:pointer;-webkit-box-shadow:0 0 12px #000;-moz-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{margin-right:auto;margin-left:auto;width:300px}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{margin-right:auto;margin-left:auto;width:96%}.toast{background-color:var(--default-color)}.toast-success{background-color:var(--success-color)}.toast-error{background-color:var(--danger-color)}.toast-info{background-color:var(--info-color)}.toast-warning{background-color:var(--warning-color)}.toast-progress{position:absolute;bottom:0;left:0;-ms-filter:alpha(opacity=40);filter:alpha(opacity=40);opacity:.4;background-color:#000;height:4px}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{top:-.2em;right:-.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{top:-.2em;right:-.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.ladda-button{position:relative}.ladda-button .ladda-spinner{display:inline-block;position:absolute;top:0;opacity:0;z-index:2;margin-top:0;width:32px;pointer-events:none}.ladda-button[data-style=expand-down][data-loading] .ladda-spinner,.ladda-button[data-style=expand-left][data-loading] .ladda-spinner,.ladda-button[data-style=expand-right][data-loading] .ladda-spinner{opacity:1}.ladda-button .ladda-label{position:relative;z-index:3}.ladda-button .ladda-progress{display:none;position:absolute;top:0;left:0;-webkit-transition:.1s linear all!important;-moz-transition:.1s linear all!important;-ms-transition:.1s linear all!important;-o-transition:.1s linear all!important;transition:.1s linear all!important;background:rgba(0,0,0,.2);width:0;height:100%}.ladda-button[data-loading] .ladda-progress{display:block}.ladda-button[data-style=zoom-in] .ladda-label,.ladda-button[data-style=zoom-out] .ladda-label{display:inline-block;position:relative}.ladda-button,.ladda-button .ladda-label,.ladda-button .ladda-spinner{-webkit-transition:.3s cubic-bezier(.175,.885,.32,1.275) all!important;transition:.3s cubic-bezier(.175,.885,.32,1.275) all!important}.ladda-button[data-style=zoom-in],.ladda-button[data-style=zoom-in] .ladda-label,.ladda-button[data-style=zoom-in] .ladda-spinner,.ladda-button[data-style=zoom-out],.ladda-button[data-style=zoom-out] .ladda-label,.ladda-button[data-style=zoom-out] .ladda-spinner{-webkit-transition:.3s ease all!important;transition:.3s ease all!important}.ladda-button[data-style=expand-right] .ladda-spinner{right:-6px}.ladda-button[data-style=expand-right][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-right][data-size=xs] .ladda-spinner{right:-12px}.ladda-button[data-style=expand-right][data-loading]{padding-right:56px}.ladda-button[data-style=expand-right][data-loading][data-size="s"],.ladda-button[data-style=expand-right][data-loading][data-size=xs]{padding-right:40px}.ladda-button[data-style=expand-left] .ladda-spinner{left:26px}.ladda-button[data-style=expand-left][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-left][data-size=xs] .ladda-spinner{left:4px}.ladda-button[data-style=expand-left][data-loading]{padding-left:56px}.ladda-button[data-style=expand-left][data-loading][data-size="s"],.ladda-button[data-style=expand-left][data-loading][data-size=xs]{padding-left:40px}.ladda-button[data-style=expand-up] .ladda-spinner{top:-32px;left:50%;margin-left:0}.ladda-button[data-style=expand-up][data-loading]{padding-top:54px}.ladda-button[data-style=expand-up][data-loading] .ladda-spinner{top:26px;opacity:1;margin-top:0}.ladda-button[data-style=expand-up][data-loading][data-size="s"],.ladda-button[data-style=expand-up][data-loading][data-size=xs]{padding-top:32px}.ladda-button[data-style=expand-up][data-loading][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-up][data-loading][data-size=xs] .ladda-spinner{top:4px}.ladda-button[data-style=expand-down] .ladda-spinner{top:62px;left:50%;margin-left:0}.ladda-button[data-style=expand-down][data-size="s"] .ladda-spinner,.ladda-button[data-style=expand-down][data-size=xs] .ladda-spinner{top:40px}.ladda-button[data-style=expand-down][data-loading]{padding-bottom:54px}.ladda-button[data-style=expand-down][data-loading][data-size="s"],.ladda-button[data-style=expand-down][data-loading][data-size=xs]{padding-bottom:32px}.ladda-button[data-style=slide-left] .ladda-label{position:relative}.ladda-button[data-style=slide-left] .ladda-spinner{left:100%;margin-left:0}.ladda-button[data-style=slide-left][data-loading] .ladda-label{left:-100%;opacity:0}.ladda-button[data-style=slide-left][data-loading] .ladda-spinner{left:50%;opacity:1}.ladda-button[data-style=slide-right] .ladda-label{position:relative}.ladda-button[data-style=slide-right] .ladda-spinner{right:100%;left:16px;margin-left:0}[dir=rtl] .ladda-button[data-style=slide-right] .ladda-spinner{right:auto}.ladda-button[data-style=slide-right][data-loading] .ladda-label{left:100%;opacity:0}.ladda-button[data-style=slide-right][data-loading] .ladda-spinner{left:50%;opacity:1}.ladda-button[data-style=slide-up] .ladda-label{position:relative}.ladda-button[data-style=slide-up] .ladda-spinner{left:50%;margin-top:1em;margin-left:0}.ladda-button[data-style=slide-up][data-loading] .ladda-label{top:-1em;opacity:0}.ladda-button[data-style=slide-up][data-loading] .ladda-spinner{opacity:1;margin-top:0}.ladda-button[data-style=slide-down]{overflow:hidden}.ladda-button[data-style=slide-down] .ladda-label{position:relative}.ladda-button[data-style=slide-down] .ladda-spinner{left:50%;margin-top:-2em;margin-left:0}.ladda-button[data-style=slide-down][data-loading] .ladda-label{top:1em;opacity:0}.ladda-button[data-style=slide-down][data-loading] .ladda-spinner{opacity:1;margin-top:0}.ladda-button[data-style=zoom-out] .ladda-spinner{left:50%;-webkit-transform:scale(2.5);-moz-transform:scale(2.5);-ms-transform:scale(2.5);-o-transform:scale(2.5);transform:scale(2.5);margin-left:32px}.ladda-button[data-style=zoom-out][data-loading] .ladda-label{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}.ladda-button[data-style=zoom-out][data-loading] .ladda-spinner{-webkit-transform:none;transform:none;opacity:1;margin-left:0}.ladda-button[data-style=zoom-in] .ladda-spinner{left:50%;-webkit-transform:scale(.2);-moz-transform:scale(.2);-ms-transform:scale(.2);-o-transform:scale(.2);transform:scale(.2);margin-left:-16px}.ladda-button[data-style=zoom-in][data-loading] .ladda-label{-webkit-transform:scale(2.2);transform:scale(2.2);opacity:0}.ladda-button[data-style=zoom-in][data-loading] .ladda-spinner{-webkit-transform:none;transform:none;opacity:1;margin-left:0}.ladda-button[data-style=contract]{width:100px}.ladda-button[data-style=contract] .ladda-spinner{left:50%;margin-left:0}.ladda-button[data-style=contract][data-loading]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;width:52px}.ladda-button[data-style=contract][data-loading] .ladda-label{opacity:0}.ladda-button[data-style=contract][data-loading] .ladda-spinner{opacity:1}.ladda-button[data-style=contract-overlay]{-webkit-box-shadow:0 0 0 2000px transparent;box-shadow:0 0 0 2000px transparent;width:100px}.ladda-button[data-style=contract-overlay] .ladda-spinner{left:50%;margin-left:0}.ladda-button[data-style=contract-overlay][data-loading]{-webkit-box-shadow:0 0 0 2000px rgba(0,0,0,.8);box-shadow:0 0 0 2000px rgba(0,0,0,.8);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;width:52px}.ladda-button[data-style=contract-overlay][data-loading] .ladda-label{opacity:0}.ladda-button[data-style=contract-overlay][data-loading] .ladda-spinner{opacity:1}[dir=rtl] .ladda-spinner>div{left:25%!important}.page-block{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background-color:var(--dialog-backdrop-color)}.page-block .spinner{width:60px;height:60px;position:absolute;top:0;left:0;bottom:60px;right:0;margin:auto;user-select:none}.sk-chase{display:flex;width:40px;height:40px;position:relative;animation:sk-chase 2.5s infinite linear both;align-content:center}.sk-chase-dot{width:100%;height:100%;position:absolute;left:0;top:0;animation:sk-chase-dot 2s infinite ease-in-out both}.sk-chase-dot:before{content:'';display:block;width:25%;height:25%;background-color:#fff;border-radius:100%;animation:sk-chase-dot-before 2s infinite ease-in-out both}.sk-chase.black .sk-chase-dot:before{background-color:#000}.sk-chase-dot:nth-child(1){animation-delay:-1.1s}.sk-chase-dot:nth-child(2){animation-delay:-1.0s}.sk-chase-dot:nth-child(3){animation-delay:-.9s}.sk-chase-dot:nth-child(4){animation-delay:-.8s}.sk-chase-dot:nth-child(5){animation-delay:-.7s}.sk-chase-dot:nth-child(6){animation-delay:-.6s}.sk-chase-dot:nth-child(1):before{animation-delay:-1.1s}.sk-chase-dot:nth-child(2):before{animation-delay:-1s}.sk-chase-dot:nth-child(3):before{animation-delay:-.9s}.sk-chase-dot:nth-child(4):before{animation-delay:-.8s}.sk-chase-dot:nth-child(5):before{animation-delay:-.7s}.sk-chase-dot:nth-child(6):before{animation-delay:-.6s}@keyframes sk-chase{100%{transform:rotate(360deg)}}@keyframes sk-chase-dot{80%,100%{transform:rotate(360deg)}}@keyframes sk-chase-dot-before{50%{transform:scale(.4)}100%,0%{transform:scale(1.0)}} .resize{position:relative;overflow:hidden;overflow-x:hidden;overflow-y:hidden;resize:both} .resize::-webkit-resizer{background-color:transparent} .resize::after{position:absolute;content:'';right:0;bottom:0;background-color:transparent;background-image:url('data:image/svg+xml;utf8,');width:18px;height:18px;opacity:0;-webkit-transition:opacity .5s ease-in-out;-moz-transition:opacity .5s ease-in-out;transition:opacity .5s ease-in-out} diff --git a/core/css/stylesheet-aurora.css b/core/css/stylesheet-aurora.css index ed43867..7a19ee8 100755 --- a/core/css/stylesheet-aurora.css +++ b/core/css/stylesheet-aurora.css @@ -1 +1,3 @@ -footer a{color:var(--footer-link-color)!important}footer a:hover,footer a:focus{color:var(--footer-link-color-hover)!important}footer input{color:#000!important}footer [role="menu"] li.active a{color:var(--footer-link-color-active)!important}.designby{position:relative!important;width:100%!important;background-color:#000!important;color:#fff!important;font-family:sans-serif!important;font-weight:400!important;font-size:14px!important;text-align:center!important;border:0 solid #000!important}.designby a{color:#fff!important}.designby a:hover{color:#ccc!important;text-decoration:none!important}[for="fullname"],[for="resetfullname"],[for="signupfullname"]{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;outline:none!important}#fullname,#resetfullname,#signupfullname{display:none}.countdown-content{font-size:3rem;text-align:center}.countdown-content p{display:inline-block;margin:0 20px}.countdown-content small{display:block;clear:both;font-size:10px;line-height:10px;font-weight:700;text-transform:uppercase;text-align:center;margin:0;padding:0}.g-recaptcha{display:table;margin:0 auto}.orderstheme{background-color:#fff!important;color:#000!important;font-family:Arial!important;font-size:1em!important;font-weight:400!important;border-color:#ccc!important}.order-list *,.orderstheme *{border-color:#f5f5f5!important}.order-list{border-radius:0!important;border-color:#ccc!important}.order-list thead{background-color:#000!important}.order-list thead tr th{background-color:#000!important;font-family:Arial!important;font-size:1em!important;font-weight:700!important;color:#fff!important}.order-list tbody tr td{background-color:#fff!important;font-family:Arial!important;font-size:1em!important;font-weight:400!important;color:#000!important;text-shadow:none!important}.order-list tbody tr td a{font-family:Arial!important;font-size:1em!important;font-weight:400!important;color:#000!important;text-shadow:none!important}.order-list tbody tr td a:hover{color:#000!important;text-decoration:underline!important}.order-list tbody tr td a.btn{color:var(--button-color)!important}.order-list tbody tr td a.btn:hover{color:var(--button-color-hover)!important;text-decoration:none!important}#cart *{background:#fff!important;color:#000!important;font-family:Arial!important;text-shadow:none!important}#cart thead *{background:#000!important;color:#fff!important}.cart{display:inline-block;position:absolute;top:-5px;right:0;transform:translate(-.05rem,-.5rem);box-shadow:0 0 0 .1rem var(--box-shadow-color);border-radius:50%;background:var(--badge-background-color);background-clip:padding-box;padding:0 .4rem;color:var(--badge-color);white-space:nowrap}.cart:empty{display:none}.navbar-cart{position:relative;display:inline}.navbar-cart svg{color:#000!important}.navbar-cart .cart{position:absolute;top:-1px;right:3px;width:37px;background-color:transparent;font-size:14px;text-align:center;color:#fff;border:0;border-radius:0;box-shadow:0}.price{display:block}.price .rrp{display:block;font-size:1rem}.price .cost{display:block;font-size:2.5rem}.price .cost.strike{font-size:1.5rem;text-decoration:line-through wavy red}.price .reduced{font-size:2.5rem}.quantity{display:block;font-size:1.5rem}.corner-ribbon .quantity{font-size:inherit}.content-quantity,.content-condition,.content-weight,.content-size{vertical-align:top;font-size:1rem;text-transform:capitalize}.content-brand img{width:25%;max-height:25%}.attribution{display:none}input.service[type=radio]:checked+label .service{outline:none!important;box-shadow:0 0 0 .2rem var(--form-focus-shadow);border-width:var(--border-width)!important;border-color:var(--form-focus-border-color)}.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::selection{background:transparent}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg,.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none!important;max-height:none!important}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom;touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;-moz-box-sizing:border-box;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-tile{will-change:opacity}.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}.leaflet-zoom-anim .leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1);-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{-webkit-transition:none;-moz-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline:0}.leaflet-container a{color:#0078a8}.leaflet-container a.leaflet-active{outline:2px solid #f40}.leaflet-zoom-box{border:2px dotted #38f;background:rgba(255,255,255,.5)}.leaflet-container{font:12px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif}.leaflet-bar{box-shadow:0 1px 5px rgba(0,0,0,.65);border-radius:4px}.leaflet-bar a,.leaflet-bar a:hover{background-color:var(--button-background-color);border-bottom:1px solid var(--button-border-color);width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:var(--button-color)}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover{background-color:var(--button-background-color-hover);color:var(--button-color-hover)}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:0}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:var(--button-background-color-disabled);color:var(--button-color-disabled)}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:9px}.leaflet-touch .leaflet-bar a:first-child{border-bottom-left-radius:0;border-bottom-right-radius:0}.leaflet-touch .leaflet-bar a:last-child{border-top-left-radius:0;border-top-right-radius:0}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:bold 18px 'Lucida Console',Monaco,monospace;text-indent:-4px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px rgba(0,0,0,.4);background:transparent;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(../images/layers.png);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(../images/layers-2x.png);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(../images/marker-icon.png)}.leaflet-container .leaflet-control-attribution{background:var(--card-figcaption-background-color);margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:var(--card-figcaption-color)}.leaflet-control-attribution a{color:var(--card-figcaption-color);text-decoration:none}.leaflet-control-attribution a:hover{text-decoration:underline}.leaflet-container .leaflet-control-attribution,.leaflet-container .leaflet-control-scale{font-size:11px}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:0;line-height:1.1;padding:2px 5px 1px;font-size:11px;white-space:nowrap;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;background:rgba(255,255,255,.5)}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:0;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 19px;line-height:1.4}.leaflet-popup-content p{margin:18px 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px rgba(0,0,0,.4)}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;padding:4px 4px 0 0;border:0;text-align:center;width:18px;height:14px;font:16px/14px Tahoma,Verdana,sans-serif;color:#c3c3c3;text-decoration:none;font-weight:700;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover{color:#999}.leaflet-popup-scrolled{overflow:auto;border-bottom:1px solid #ddd;border-top:1px solid #ddd}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678,M12=0.70710678,M21=-0.70710678,M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678,M12=0.70710678,M21=-0.70710678,M22=0.70710678)}.leaflet-oldie .leaflet-popup-tip-container{margin-top:-1px}.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px rgba(0,0,0,.4)}.leaflet-tooltip.leaflet-clickable{cursor:pointer;pointer-events:auto}.leaflet-tooltip-top:before,.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}#gl{width:auto;height:500px}#map{height:400px}.testimonials{flex-grow:2;margin:1rem .5rem!important;border-left:0;text-align:center}@media (max-width:361px){.testimonial-block .testimonials:nth-child(n+2){display:none}}@media (max-width:577px){.testimonial-block .testimonials:nth-child(n+3){display:none}}.testimonials img{border-radius:50%;width:128px;max-height:128px}.testimonials p{font-size:1rem;line-height:1.2em}.testimonials p:before{padding-right:.2rem;font-size:4em;content:"\201C "}.testimonials footer{display:block!important;background-color:transparent;margin:0;padding:1rem 0 0 0}.testimonials h2,.testimonials h3,.testimonials h4,.testimonials h5,.testimonials h6{margin:0;text-align:center}.card-image{position:relative;overflow:hidden}.quickview-image{height:calc(100vh - 280px);overflow:hidden}.quickview-choices select{background-color:var(--form-background-color)!important;color:var(--form-color)!important}.quickview-choices select:focus{outline:0;-webkit-box-shadow:none;box-shadow:none;border-color:var(--form-border-color)}@-webkit-keyframes fade-in{0%{opacity:0}100%{opacity:1}}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fade-out{0%{opacity:1}100%{opacity:0}}@keyframes fade-out{0%{opacity:1}100%{opacity:0}}.card-image .quickview .btn{object-position:center}h1.quickview-header,h2.quickview-header,h3.quickview-header,h4.quickview-header,h5.quickview-header,h6.quickview-header,.quickview-footer h3{font-family:var(--font)!important;color:#fff!important;text-shadow:none!important}.quickview-footer{background-color:#000!important;background-image:none!important}.quickview-body{width:100%;height:180px;overflow-x:none;overflow-y:auto}.quickview-image img{height:100%!important;object-fit:scale-down;object-position:top}.quickview-thumbs{height:100%;max-height:100%;overflow:none;overflow-y:auto}.quickview-thumbs img{border:2px solid transparent}.quickview-thumbs img.active{border:2px solid #f00}.jello{-webkit-animation:jello .9s both;animation:jello .9s both}@-webkit-keyframes jello{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes jello{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}nav.navigation.account-menu{z-index:1201!important;position:relative!important;width:100%!important;height:40px!important;background:#000!important;border:0!important;margin:0!important;padding:0!important;font-family:Arial!important;font-size:16px!important;line-height:1.7!important}nav.navigation.account-menu .right{display:block!important;position:absolute!important;top:10px!important;right:10px!important}nav.navigation.account-menu ul{border:0!important;right:0!important;margin:0 0 0 auto!important;background:#000!important}nav.navigation.account-menu ul li{border:0!important;margin:0!important;background:#000!important;color:#aaa!important;margin:0!important;padding:0!important;line-height:1.7!important;vertical-align:middle!important;text-align:center!important}nav.navigation.account-menu ul li a,nav.navigation.account-menu button[role="link"]{border:0!important;font-family:Arial!important;font-size:16px!important;font-weight:700!important;width:100%!important;background:#000!important;color:#aaa!important;margin:0!important;padding:.5em 1em!important;line-height:1.5!important;text-transform:none!important;text-shadow:none!important;-webkit-text-stroke:0!important;border-radius:0!important}nav.navigation.account-menu ul li a:hover,nav.navigation.account-menu button[role="link"]:hover{border:0!important;color:#fff!important;text-decoration:none!important;text-shadow:none!important}nav.navigation.account-menu ul li.active,nav.navigation.account-menu ul li.active a{border:0!important;background:#000!important;color:#fff!important;border-radius:0!important}nav.navigation.account-menu label{font-family:Arial!important;font-size:1.2rem!important;font-weight:700!important;background:#000!important;border-color:#000!important;color:#aaa!important}nav.navigation.account-menu label:hover{color:#ddd!important}nav.navigation.account-menu #accountavatar{width:32px!important;max-height:32px!important;border-radius:5px!important}.popup-payment{font-family:sans-serif!important;font-size:1em!important;color:#0a2540!important}.popup-payment input,.popup-payment select{font-size:1.1em!important;width:100%!important}.popup-payment a{color:#635bff!important;font-weight:900!important}#addreply,#newpost{position:relative!important}.forum-header{background-color:var(--forum-head-background-color)!important;color:var(--forum-head-color)!important;border:var(--card-border-width) var(--card-border-style) var(--card-border-color)!important;border-bottom:0!important;border-top-left-radius:var(--border-radius)!important;border-top-right-radius:var(--border-radius)!important}.forum-header+.card{border-top-left-radius:0!important;border-top-right-radius:0!important}.forum-topic-avatar{max-width:48px;height:48px}.forum-read{color:var(--forum-read)!important;fill:var(--forum-read)!important}.forum-topic-avatar.forum-read{border:var(--forum-read-border-width) solid var(--forum-read-border-color)!important}.forum-unread{color:var(--forum-unread)!important;fill:var(--forum-unread)!important}.forum-topic-avatar.forum-unread{border:var(--forum-unread-border-width) solid var(--forum-unread-border-color)!important}.forum-pin{fill:var(--forum-pin-color)}.forum-avatar{max-width:128px;height:128px}.forum-toolbar{text-align:right}.forum-item-unread{background-color:var(--success-background-color)!important}.forum-item:hover{background-color:#fafafa}.forum-vote{display:inline-block;text-align:center}.forum-vote-number{font-size:18px;color:#888;font-weight:700}.btn-forum-vote{background:none!important;border:0!important;color:#ccc!important;font-size:20px!important;margin:0!important}.btn-forum-vote:hover,.btn-forum-vote:focus{background:none!important;border:0!important;color:#000!important}.forum-post blockquote,.note-editable blockquote{background:var(--forum-blockquote-background-color,#ebebeb) url(../images/quote.gif) 6px 8px no-repeat!important;border:1px solid var(--forum-blockquote-border-color,#dbdbdb)!important;font-size:.95em!important;color:var(--forum-blockquote-color,#000)!important;margin:.1em 0 0 0!important;overflow:hidden!important;padding:5px!important}.forum-post blockquote cite,.note-editable blockquote cite{font-style:normal!important;font-weight:700!important;margin-left:20px!important;display:block!important;font-size:.9em!important}.status{display:inline-block!important;width:100%!important;text-align:center!important;border-radius:var(--border-radius)}.status.urgent,.status .urgent{color:#fff!important;background-color:#dc3545!important}.status.in-progress,.status .in-progress{color:#fff!important;background-color:#007bff!important}.status.closed,.status .closed{color:#fff!important;background-color:#343a40!important}.note-emoji-list{width:180px;height:200px;overflow:auto;padding-left:5px;white-space:normal}.note-emoji-list button,.note-emoji-list button:hover,.note-emoji-list button:focus{background:none!important;border:0!important;margin-top:5px;margin-right:5px;padding:0}.note-emoji-list button:hover{background-color:#f5f5f5!important}.note-emoji-list .note-emoji-btn img{width:20px}img.emoji-img-inline{display:inline-block;margin-top:-0.3em;height:1.2em;width:auto}.note-emoji-search{margin-right:5px;margin-left:5px;margin-bottom:5px}.unavailable{background-color:transparent!important;background-repeat:no-repeat!important;background-position:center!important;-webkit-background-size:cover!important;-moz-background-size:cover!important;-o-background-size:cover!important;background-size:cover!important;width:100%!important;height:100%!important;-webkit-text-size-adjust:100%!important;-ms-text-size-adjust:100%!important;-webkit-font-smoothing:antialiased!important;font-smoothing:antialiased!important}.unavailable .card{position:relative!important;border:1px solid #e9e9e9!important;background-color:rgba(255,255,255,.95)!important;color:#000!important;border-radius:.25rem!important;overflow:visible!important}.unavailable .card h1,.unavailable .card .h1,.unavailable .card h2,.unavailable .card .h2,.unavailable .card h3,.unavailable .card .h3,.unavailable .card h4,.unavailable .card .h4,.unavailable .card h5,.unavailable .card .h5,.unavailable .card h6,.unavailable .card .h6,.unavailable .card div,.unavailable .card p{font-family:var(--font)!important;color:#000!important;text-shadow:none!important}.unavailable .card a{color:#04f!important;text-decoration:none}.unavailable .card a:focus,.unavailable .card a:hover{color:#0056c4!important;text-decoration:none} +footer a{color:var(--footer-link-color)!important}footer a:hover,footer a:focus{color:var(--footer-link-color-hover)!important}footer input{color:#000!important}footer [role="menu"] li.active a{color:var(--footer-link-color-active)!important}.designby{position:relative!important;width:100%!important;background-color:#000!important;color:#fff!important;font-family:sans-serif!important;font-weight:400!important;font-size:14px!important;text-align:center!important;border:0 solid #000!important}.designby a{color:#fff!important}.designby a:hover{color:#ccc!important;text-decoration:none!important}[for="fullname"],[for="resetfullname"],[for="signupfullname"]{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;outline:none!important}#fullname,#resetfullname,#signupfullname{display:none}.countdown-content{font-size:3rem;text-align:center}.countdown-content p{display:inline-block;margin:0 20px}.countdown-content small{display:block;clear:both;font-size:10px;line-height:10px;font-weight:700;text-transform:uppercase;text-align:center;margin:0;padding:0}.g-recaptcha{display:table;margin:0 auto}.orderstheme{background-color:#fff!important;color:#000!important;font-family:Arial!important;font-size:1em!important;font-weight:400!important;border-color:#ccc!important}.order-list *,.orderstheme *{border-color:#f5f5f5!important}.order-list{border-radius:0!important;border-color:#ccc!important}.order-list thead{background-color:#000!important}.order-list thead tr th{background-color:#000!important;font-family:Arial!important;font-size:1em!important;font-weight:700!important;color:#fff!important}.order-list tbody tr td{background-color:#fff!important;font-family:Arial!important;font-size:1em!important;font-weight:400!important;color:#000!important;text-shadow:none!important}.order-list tbody tr td a{font-family:Arial!important;font-size:1em!important;font-weight:400!important;color:#000!important;text-shadow:none!important}.order-list tbody tr td a:hover{color:#000!important;text-decoration:underline!important}.order-list tbody tr td a.btn{color:var(--button-color)!important}.order-list tbody tr td a.btn:hover{color:var(--button-color-hover)!important;text-decoration:none!important}#cart *,.cart-address *{background:#fff!important;color:#000!important;font-family:Arial!important;text-shadow:none!important}.cart-address button{background-color:var(--button-background-color)!important;color:var(--button-color)!important)} +#cart thead *{background:#000!important;color:#fff!important} +.cart{display:inline-block;position:absolute;top:-5px;right:0;transform:translate(-.05rem,-.5rem);box-shadow:0 0 0 .1rem var(--box-shadow-color);border-radius:50%;background:var(--badge-background-color);background-clip:padding-box;padding:0 .4rem;color:var(--badge-color);white-space:nowrap}.cart:empty{display:none}.navbar-cart{position:relative;display:inline}.navbar-cart svg{color:#000!important}.navbar-cart .cart{position:absolute;top:-1px;right:3px;width:37px;background-color:transparent;font-size:14px;text-align:center;color:#fff;border:0;border-radius:0;box-shadow:0}.price{display:block}.price .rrp{display:block;font-size:1rem}.price .cost{display:block;font-size:2.5rem}.price .cost.strike{font-size:1.5rem;text-decoration:line-through wavy red}.price .reduced{font-size:2.5rem}.quantity{display:block;font-size:1.5rem}.corner-ribbon .quantity{font-size:inherit}.content-quantity,.content-condition,.content-weight,.content-size{vertical-align:top;font-size:1rem;text-transform:capitalize}.content-brand img{width:25%;max-height:25%}.attribution{display:none}input.service[type=radio]:checked+label .service{outline:none!important;box-shadow:0 0 0 .2rem var(--form-focus-shadow);border-width:var(--border-width)!important;border-color:var(--form-focus-border-color)}.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::selection{background:transparent}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg,.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none!important;max-height:none!important}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom;touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;-moz-box-sizing:border-box;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-tile{will-change:opacity}.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}.leaflet-zoom-anim .leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1);-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{-webkit-transition:none;-moz-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline:0}.leaflet-container a{color:#0078a8}.leaflet-container a.leaflet-active{outline:2px solid #f40}.leaflet-zoom-box{border:2px dotted #38f;background:rgba(255,255,255,.5)}.leaflet-container{font:12px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif}.leaflet-bar{box-shadow:0 1px 5px rgba(0,0,0,.65);border-radius:4px}.leaflet-bar a,.leaflet-bar a:hover{background-color:var(--button-background-color);border-bottom:1px solid var(--button-border-color);width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:var(--button-color)}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover{background-color:var(--button-background-color-hover);color:var(--button-color-hover)}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:0}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:var(--button-background-color-disabled);color:var(--button-color-disabled)}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:9px}.leaflet-touch .leaflet-bar a:first-child{border-bottom-left-radius:0;border-bottom-right-radius:0}.leaflet-touch .leaflet-bar a:last-child{border-top-left-radius:0;border-top-right-radius:0}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:bold 18px 'Lucida Console',Monaco,monospace;text-indent:-4px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px rgba(0,0,0,.4);background:transparent;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(../images/layers.png);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(../images/layers-2x.png);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(../images/marker-icon.png)}.leaflet-container .leaflet-control-attribution{background:var(--card-figcaption-background-color);margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:var(--card-figcaption-color)}.leaflet-control-attribution a{color:var(--card-figcaption-color);text-decoration:none}.leaflet-control-attribution a:hover{text-decoration:underline}.leaflet-container .leaflet-control-attribution,.leaflet-container .leaflet-control-scale{font-size:11px}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:0;line-height:1.1;padding:2px 5px 1px;font-size:11px;white-space:nowrap;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;background:rgba(255,255,255,.5)}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:0;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 19px;line-height:1.4}.leaflet-popup-content p{margin:18px 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px rgba(0,0,0,.4)}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;padding:4px 4px 0 0;border:0;text-align:center;width:18px;height:14px;font:16px/14px Tahoma,Verdana,sans-serif;color:#c3c3c3;text-decoration:none;font-weight:700;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover{color:#999}.leaflet-popup-scrolled{overflow:auto;border-bottom:1px solid #ddd;border-top:1px solid #ddd}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678,M12=0.70710678,M21=-0.70710678,M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678,M12=0.70710678,M21=-0.70710678,M22=0.70710678)}.leaflet-oldie .leaflet-popup-tip-container{margin-top:-1px}.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px rgba(0,0,0,.4)}.leaflet-tooltip.leaflet-clickable{cursor:pointer;pointer-events:auto}.leaflet-tooltip-top:before,.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}#gl{width:auto;height:500px}#map{height:400px}.testimonials{flex-grow:2;margin:1rem .5rem!important;border-left:0;text-align:center}@media (max-width:361px){.testimonial-block .testimonials:nth-child(n+2){display:none}}@media (max-width:577px){.testimonial-block .testimonials:nth-child(n+3){display:none}}.testimonials img{border-radius:50%;width:128px;max-height:128px}.testimonials p{font-size:1rem;line-height:1.2em}.testimonials p:before{padding-right:.2rem;font-size:4em;content:"\201C "}.testimonials footer{display:block!important;background-color:transparent;margin:0;padding:1rem 0 0 0}.testimonials h2,.testimonials h3,.testimonials h4,.testimonials h5,.testimonials h6{margin:0;text-align:center}.card-image{position:relative;overflow:hidden}.quickview-image{height:calc(100vh - 280px);overflow:hidden}.quickview-choices select{background-color:var(--form-background-color)!important;color:var(--form-color)!important}.quickview-choices select:focus{outline:0;-webkit-box-shadow:none;box-shadow:none;border-color:var(--form-border-color)}@-webkit-keyframes fade-in{0%{opacity:0}100%{opacity:1}}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fade-out{0%{opacity:1}100%{opacity:0}}@keyframes fade-out{0%{opacity:1}100%{opacity:0}}.card-image .quickview .btn{object-position:center}h1.quickview-header,h2.quickview-header,h3.quickview-header,h4.quickview-header,h5.quickview-header,h6.quickview-header,.quickview-footer h3{font-family:var(--font)!important;color:#fff!important;text-shadow:none!important}.quickview-footer{background-color:#000!important;background-image:none!important}.quickview-body{width:100%;height:180px;overflow-x:none;overflow-y:auto}.quickview-image img{height:100%!important;object-fit:scale-down;object-position:top}.quickview-thumbs{height:100%;max-height:100%;overflow:none;overflow-y:auto}.quickview-thumbs img{border:2px solid transparent}.quickview-thumbs img.active{border:2px solid #f00}.jello{-webkit-animation:jello .9s both;animation:jello .9s both}@-webkit-keyframes jello{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes jello{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}nav.navigation.account-menu{display:block!important;z-index:2001!important;position:relative!important;width:100%!important;height:40px!important;background-color:#000!important;border:0!important;margin:0!important;padding:0!important;font-family:Arial!important;font-size:16px!important;line-height:1.7!important}nav.navigation.account-menu .right{display:block!important;position:absolute!important;top:10px!important;right:10px!important}nav.navigation.account-menu ul{border:0!important;right:0!important;margin:0 0 0 auto!important;background-color:#000!important}nav.navigation.account-menu ul li{border:0!important;margin:0!important;background-color:#000!important;color:#aaa!important;margin:0!important;padding:0!important;line-height:1.7!important;vertical-align:middle!important;text-align:center!important}nav.navigation.account-menu ul li a,nav.navigation.account-menu button[role="link"]{border:0!important;font-family:Arial!important;font-size:16px!important;font-weight:700!important;width:100%!important;background-color:#000!important;color:#aaa!important;margin:0!important;padding:.5em 1em!important;line-height:1.5!important;text-transform:none!important;text-shadow:none!important;-webkit-text-stroke:0!important;border-radius:0!important}nav.navigation.account-menu ul li a:hover,nav.navigation.account-menu button[role="link"]:hover{border:0!important;color:#fff!important;text-decoration:none!important;text-shadow:none!important}nav.navigation.account-menu ul li.active,nav.navigation.account-menu ul li.active a{border:0!important;background-color:#000!important;color:#fff!important;border-radius:0!important}nav.navigation.account-menu label{font-family:Arial!important;font-size:1.2rem!important;font-weight:700!important;background-color:#000!important;border-color:#000!important;color:#aaa!important}nav.navigation.account-menu label:hover{background-color:#000!important;color:#ddd!important;border-color:#000!important}nav.navigation.account-menu #accountavatar{width:32px!important;max-height:32px!important;border-radius:5px!important}.popup-payment{font-family:sans-serif!important;font-size:1em!important;color:#0a2540!important}.popup-payment input,.popup-payment select{font-size:1.1em!important;width:100%!important}.popup-payment a{color:#635bff!important;font-weight:900!important}#addreply,#newpost{position:relative!important}.forum-header{background-color:var(--forum-head-background-color)!important;color:var(--forum-head-color)!important;border:var(--card-border-width) var(--card-border-style) var(--card-border-color)!important;border-bottom:0!important;border-top-left-radius:var(--border-radius)!important;border-top-right-radius:var(--border-radius)!important}.forum-header+.card{border-top-left-radius:0!important;border-top-right-radius:0!important}.forum-topic-avatar{max-width:48px;height:48px}.forum-read{color:var(--forum-read)!important;fill:var(--forum-read)!important}.forum-topic-avatar.forum-read{border:var(--forum-read-border-width) solid var(--forum-read-border-color)!important}.forum-unread{color:var(--forum-unread)!important;fill:var(--forum-unread)!important}.forum-topic-avatar.forum-unread{border:var(--forum-unread-border-width) solid var(--forum-unread-border-color)!important}.forum-pin{fill:var(--forum-pin-color)}.forum-avatar{max-width:128px;height:128px}.forum-toolbar{text-align:right}.forum-item-unread{background-color:var(--success-background-color)!important}.forum-item:hover{background-color:#fafafa}.forum-vote{display:inline-block;text-align:center}.forum-vote-number{font-size:18px;color:#888;font-weight:700}.btn-forum-vote{background:none!important;border:0!important;color:#ccc!important;font-size:20px!important;margin:0!important}.btn-forum-vote:hover,.btn-forum-vote:focus{background:none!important;border:0!important;color:#000!important}.forum-post blockquote,.note-editable blockquote{background:var(--forum-blockquote-background-color,#ebebeb) url(../images/quote.gif) 6px 8px no-repeat!important;border:1px solid var(--forum-blockquote-border-color,#dbdbdb)!important;font-size:.95em!important;color:var(--forum-blockquote-color,#000)!important;margin:.1em 0 0 0!important;overflow:hidden!important;padding:5px!important}.forum-post blockquote cite,.note-editable blockquote cite{font-style:normal!important;font-weight:700!important;margin-left:20px!important;display:block!important;font-size:.9em!important}.status{display:inline-block!important;width:100%!important;text-align:center!important;border-radius:var(--border-radius)}.status.urgent,.status .urgent{color:#fff!important;background-color:#dc3545!important}.status.in-progress,.status .in-progress{color:#fff!important;background-color:#007bff!important}.status.closed,.status .closed{color:#fff!important;background-color:#343a40!important}.note-emoji-list{width:180px;height:200px;overflow:auto;padding-left:5px;white-space:normal}.note-emoji-list button,.note-emoji-list button:hover,.note-emoji-list button:focus{background:none!important;border:0!important;margin-top:5px;margin-right:5px;padding:0}.note-emoji-list button:hover{background-color:#f5f5f5!important}.note-emoji-list .note-emoji-btn img{width:20px}img.emoji-img-inline{display:inline-block;margin-top:-0.3em;height:1.2em;width:auto}.note-emoji-search{margin-right:5px;margin-left:5px;margin-bottom:5px}.unavailable{background-color:transparent!important;background-repeat:no-repeat!important;background-position:center!important;-webkit-background-size:cover!important;-moz-background-size:cover!important;-o-background-size:cover!important;background-size:cover!important;width:100%!important;height:100%!important;-webkit-text-size-adjust:100%!important;-ms-text-size-adjust:100%!important;-webkit-font-smoothing:antialiased!important;font-smoothing:antialiased!important}.unavailable .card{position:relative!important;border:1px solid #e9e9e9!important;background-color:rgba(255,255,255,.95)!important;color:#000!important;border-radius:.25rem!important;overflow:visible!important}.unavailable .card h1,.unavailable .card .h1,.unavailable .card h2,.unavailable .card .h2,.unavailable .card h3,.unavailable .card .h3,.unavailable .card h4,.unavailable .card .h4,.unavailable .card h5,.unavailable .card .h5,.unavailable .card h6,.unavailable .card .h6,.unavailable .card div,.unavailable .card p{font-family:var(--font)!important;color:#000!important;text-shadow:none!important}.unavailable .card a{color:#04f!important;text-decoration:none}.unavailable .card a:focus,.unavailable .card a:hover{color:#0056c4!important;text-decoration:none} diff --git a/core/css/stylesheet-grid.css b/core/css/stylesheet-grid.css index 6cb214d..ef0c33c 100755 --- a/core/css/stylesheet-grid.css +++ b/core/css/stylesheet-grid.css @@ -1 +1 @@ -.container,.container-fluid,.container-sm,.container-md,.container-lg,.container-xl,.container-xxl{width:100%;padding-right:1rem;padding-left:1rem;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-sm,.container-md{max-width:720px}}@media (min-width:992px){.container,.container-sm,.container-md,.container-lg{max-width:960px}}@media (min-width:1200px){.container,.container-sm,.container-md,.container-lg,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-sm,.container-md,.container-lg,.container-xl,.container-xxl{max-width:1320px}}.row{display:flex;flex:1 0 100%;flex-wrap:wrap;align-items:flex-start}.row>*{flex-shrink:0;width:100%;max-width:100%}[class^="col-"],.col-auto{width:auto}.col--5{width:4.1666665}.col-1{width:8.333333%}.col-1-5{width:12.4999995}.col-2{width:16.666667%}.col-2-5{width:20.8333315%}.col-3{width:25%}.col-3-5{width:29.1666665}.col-4{width:33.333333%}.col-4-5{width:37.4999995}.col-5{width:41.666667%}.col-5-5{width:45.833332}.col-6{width:50%}.col-6-5{width:54.166665}.col-7{width:58.333333%}.col-7-5{width:62.4999995}.col-8{width:66.666667%}.col-8-5{width:70.833332}.col-9{width:75%}.col-9-5{width:79.1666665}.col-10{width:83.333333%}.col-10-5{width:87.499998}.col-11{width:91.666667%}.col-11-5{width:95.833332}.col-12{width:100%}@media (min-width:576px){.col-sm{flex:1 0 0}[class^="col-sm-"],.col-sm-auto{flex:0 0 auto;width:auto}.col-sm--5{width:4.1666665}.col-sm-1{width:8.333333%}.col-sm-1-5{width:12.4999995}.col-sm-2{width:16.666667%}.col-sm-2-5{width:20.8333315%}.col-sm-3{width:25%}.col-sm-3-5{width:29.1666665}.col-sm-4{width:33.333333%}.col-sm-4-5{width:37.4999995}.col-sm-5{width:41.666667%}.col-sm-5-5{width:45.833332}.col-sm-6{width:50%}.col-sm-6-5{width:54.166665}.col-sm-7{width:58.333333%}.col-sm-7-5{width:62.4999995}.col-sm-8{width:66.666667%}.col-sm-max-8{min-width:66.666667%!important}.col-sm-8-5{width:70.833332}.col-sm-9{width:75%}.col-sm-9-5{width:79.1666665}.col-sm-10{width:83.333333%}.col-sm-10-5{width:87.499998}.col-sm-11{width:91.666667%}.col-sm-11-5{width:95.833332}.col-sm-12{width:100%}}@media (min-width:768px){.col-md{flex:1 0 0}[class^="col-md-"],.col-md-auto{flex:0 0 auto;width:auto}.col-md--5{width:4.1666665}.col-md-1{width:8.333333%}.col-md-1-5{width:12.4999995}.col-md-2{width:16.666667%}.col-md-2-5{width:20.8333315%}.col-md-3{width:25%}.col-md-3-5{width:29.1666665}.col-md-4{width:33.333333%}.col-md-4-5{width:37.4999995}.col-md-5{width:41.666667%}.col-md-5-5{width:45.833332}.col-md-6{width:50%}.col-md-6-5{width:54.166665}.col-md-7{width:58.333333%}.col-md-7-5{width:62.4999995}.col-md-8{width:66.666667%}.col-md-8-5{width:70.833332}.col-md-9{width:75%}.col-md-9-5{width:79.1666665}.col-md-10{width:83.333333%}.col-md-10-5{width:87.499998}.col-md-11{width:91.666667%}.col-md-11-5{width:95.833332}.col-md-12{width:100%}}@media (min-width:992px){.col-lg{flex:1 0 0}[class^="col-lg-"],.col-lg-auto{flex:0 0 auto;width:auto}.col-lg--5{width:4.1666665}.col-lg-1{width:8.333333%}.col-lg-1-5{width:12.4999995}.col-lg-2{width:16.666667%}.col-lg-2-5{width:20.8333315%}.col-lg-3{width:25%}.col-lg-3-5{width:29.1666665}.col-lg-4{width:33.333333%}.col-lg-4-5{width:37.4999995}.col-lg-5{width:41.666667%}.col-lg-5-5{width:45.833332}.col-lg-6{width:50%}.col-lg-6-5{width:54.166665}.col-lg-7{width:58.333333%}.col-lg-7-5{width:62.4999995}.col-lg-8{width:66.666667%}.col-lg-8-5{width:70.833332}.col-lg-9{width:75%}.col-lg-9-5{width:79.1666665}.col-lg-10{width:83.333333%}.col-lg-10-5{width:87.499998}.col-lg-11{width:91.666667%}.col-lg-11-5{width:95.833332}.col-lg-12{width:100%}}@media (min-width:1200px){.col-xl{flex:1 0 0}[class^="col-xl-"],.col-xl-auto{flex:0 0 auto;width:auto}.col-xl--5{width:4.1666665}.col-xl-1{width:8.333333%}.col-xl-1-5{width:12.4999995}.col-xl-2{width:16.666667%}.col-xl-2-5{width:20.8333315%}.col-xl-3{width:25%}.col-xl-3-5{width:29.1666665}.col-xl-4{width:33.333333%}.col-xl-4-5{width:37.4999995}.col-xl-5{width:41.666667%}.col-xl-5-5{width:45.833332}.col-xl-6{width:50%}.col-xl-6-5{width:54.166665}.col-xl-7{width:58.333333%}.col-xl-7-5{width:62.4999995}.col-xl-8{width:66.666667%}.col-xl-8-5{width:70.833332}.col-xl-9{width:75%}.col-xl-9-5{width:79.1666665}.col-xl-10{width:83.333333%}.col-xl-10-5{width:87.499998}.col-xl-11{width:91.666667%}.col-xl-11-5{width:95.833332}.col-xl-12{width:100%}}@media (min-width:1400px){.col-xxl{flex:1 0 0}[class^="col-xxl-"],.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl--5{width:4.1666665}.col-xxl-1{width:8.333333%}.col-xxl-1-5{width:12.4999995}.col-xxl-2{width:16.666667%}.col-xxl-2-5{width:20.8333315%}.col-xxl-3{width:25%}.col-xxl-3-5{width:29.1666665}.col-xxl-4{width:33.333333%}.col-xxl-4-5{width:37.4999995}.col-xxl-5{width:41.666667%}.col-xxl-5-5{width:45.833332}.col-xxl-6{width:50%}.col-xxl-6-5{width:54.166665}.col-xxl-7{width:58.333333%}.col-xxl-7-5{width:62.4999995}.col-xxl-8{width:66.666667%}.col-xxl-8-5{width:70.833332}.col-xxl-9{width:75%}.col-xxl-9-5{width:79.1666665}.col-xxl-10{width:83.333333%}.col-xxl-10-5{width:87.499998}.col-xxl-11{width:91.666667%}.col-xxl-11-5{width:95.833332}.col-xxl-12{width:100%}}.w-5{width:5%!important}.w-10{width:10%!important}.w-20{width:20%!important}.w-25{width:25%!important}.w-33{width:33%!important}.w-50{width:50%!important}.w-66{width:66%!important}.w-75{width:75%!important}.w-90{width:90%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-10{width:10vw!important}.vw-25{width:25vw!important}.vw-33{width:33vw!important}.vw-50{width:50vw!important}.vw-75{width:75vw!important}.vw-90{width:90vw!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-5{height:5%!important}.h-10{height:10%!important}.h-25{height:25%!important}.h-33{height:33%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-10{height:10vh!important}.vh-25{height:25vh!important}.vh-33{height:33vh!important}.vh-50{height:50vh!important}.vh-66{height:66vh!important}.vh-75{height:75vh!important}.vh-90{height:90vh!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important} +.container,.container-fluid,.container-sm,.container-md,.container-lg,.container-xl,.container-xxl{width:100%;padding-right:1rem;padding-left:1rem;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-sm,.container-md{max-width:720px}}@media (min-width:992px){.container,.container-sm,.container-md,.container-lg{max-width:960px}}@media (min-width:1200px){.container,.container-sm,.container-md,.container-lg,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-sm,.container-md,.container-lg,.container-xl,.container-xxl{max-width:1320px}}.row{display:flex;flex:1 0 100%;flex-wrap:wrap;align-items:flex-start}.row>*{flex-shrink:0;width:100%;max-width:100%}[class^="col-"],.col,.col-auto{width:auto}.col--5{width:4.1666665}.col-1{width:8.333333%}.col-1-5{width:12.4999995}.col-2{width:16.666667%}.col-2-5{width:20.8333315%}.col-3{width:25%}.col-3-5{width:29.1666665}.col-4{width:33.333333%}.col-4-5{width:37.4999995}.col-5{width:41.666667%}.col-5-5{width:45.833332}.col-6{width:50%}.col-6-5{width:54.166665}.col-7{width:58.333333%}.col-7-5{width:62.4999995}.col-8{width:66.666667%}.col-8-5{width:70.833332}.col-9{width:75%}.col-9-5{width:79.1666665}.col-10{width:83.333333%}.col-10-5{width:87.499998}.col-11{width:91.666667%}.col-11-5{width:95.833332}.col-12{width:100%}@media (min-width:576px){.col-sm{flex:1 0 0}[class^="col-sm-"],.col-sm-auto{flex:0 0 auto;width:auto}.col-sm--5{width:4.1666665}.col-sm-1{width:8.333333%}.col-sm-1-5{width:12.4999995}.col-sm-2{width:16.666667%}.col-sm-2-5{width:20.8333315%}.col-sm-3{width:25%}.col-sm-3-5{width:29.1666665}.col-sm-4{width:33.333333%}.col-sm-4-5{width:37.4999995}.col-sm-5{width:41.666667%}.col-sm-5-5{width:45.833332}.col-sm-6{width:50%}.col-sm-6-5{width:54.166665}.col-sm-7{width:58.333333%}.col-sm-7-5{width:62.4999995}.col-sm-8{width:66.666667%}.col-sm-max-8{min-width:66.666667%!important}.col-sm-8-5{width:70.833332}.col-sm-9{width:75%}.col-sm-9-5{width:79.1666665}.col-sm-10{width:83.333333%}.col-sm-10-5{width:87.499998}.col-sm-11{width:91.666667%}.col-sm-11-5{width:95.833332}.col-sm-12{width:100%}}@media (min-width:768px){.col-md{flex:1 0 0}[class^="col-md-"],.col-md-auto{flex:0 0 auto;width:auto}.col-md--5{width:4.1666665}.col-md-1{width:8.333333%}.col-md-1-5{width:12.4999995}.col-md-2{width:16.666667%}.col-md-2-5{width:20.8333315%}.col-md-3{width:25%}.col-md-3-5{width:29.1666665}.col-md-4{width:33.333333%}.col-md-4-5{width:37.4999995}.col-md-5{width:41.666667%}.col-md-5-5{width:45.833332}.col-md-6{width:50%}.col-md-6-5{width:54.166665}.col-md-7{width:58.333333%}.col-md-7-5{width:62.4999995}.col-md-8{width:66.666667%}.col-md-8-5{width:70.833332}.col-md-9{width:75%}.col-md-9-5{width:79.1666665}.col-md-10{width:83.333333%}.col-md-10-5{width:87.499998}.col-md-11{width:91.666667%}.col-md-11-5{width:95.833332}.col-md-12{width:100%}}@media (min-width:992px){.col-lg{flex:1 0 0}[class^="col-lg-"],.col-lg-auto{flex:0 0 auto;width:auto}.col-lg--5{width:4.1666665}.col-lg-1{width:8.333333%}.col-lg-1-5{width:12.4999995}.col-lg-2{width:16.666667%}.col-lg-2-5{width:20.8333315%}.col-lg-3{width:25%}.col-lg-3-5{width:29.1666665}.col-lg-4{width:33.333333%}.col-lg-4-5{width:37.4999995}.col-lg-5{width:41.666667%}.col-lg-5-5{width:45.833332}.col-lg-6{width:50%}.col-lg-6-5{width:54.166665}.col-lg-7{width:58.333333%}.col-lg-7-5{width:62.4999995}.col-lg-8{width:66.666667%}.col-lg-8-5{width:70.833332}.col-lg-9{width:75%}.col-lg-9-5{width:79.1666665}.col-lg-10{width:83.333333%}.col-lg-10-5{width:87.499998}.col-lg-11{width:91.666667%}.col-lg-11-5{width:95.833332}.col-lg-12{width:100%}}@media (min-width:1200px){.col-xl{flex:1 0 0}[class^="col-xl-"],.col-xl-auto{flex:0 0 auto;width:auto}.col-xl--5{width:4.1666665}.col-xl-1{width:8.333333%}.col-xl-1-5{width:12.4999995}.col-xl-2{width:16.666667%}.col-xl-2-5{width:20.8333315%}.col-xl-3{width:25%}.col-xl-3-5{width:29.1666665}.col-xl-4{width:33.333333%}.col-xl-4-5{width:37.4999995}.col-xl-5{width:41.666667%}.col-xl-5-5{width:45.833332}.col-xl-6{width:50%}.col-xl-6-5{width:54.166665}.col-xl-7{width:58.333333%}.col-xl-7-5{width:62.4999995}.col-xl-8{width:66.666667%}.col-xl-8-5{width:70.833332}.col-xl-9{width:75%}.col-xl-9-5{width:79.1666665}.col-xl-10{width:83.333333%}.col-xl-10-5{width:87.499998}.col-xl-11{width:91.666667%}.col-xl-11-5{width:95.833332}.col-xl-12{width:100%}}@media (min-width:1400px){.col-xxl{flex:1 0 0}[class^="col-xxl-"],.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl--5{width:4.1666665}.col-xxl-1{width:8.333333%}.col-xxl-1-5{width:12.4999995}.col-xxl-2{width:16.666667%}.col-xxl-2-5{width:20.8333315%}.col-xxl-3{width:25%}.col-xxl-3-5{width:29.1666665}.col-xxl-4{width:33.333333%}.col-xxl-4-5{width:37.4999995}.col-xxl-5{width:41.666667%}.col-xxl-5-5{width:45.833332}.col-xxl-6{width:50%}.col-xxl-6-5{width:54.166665}.col-xxl-7{width:58.333333%}.col-xxl-7-5{width:62.4999995}.col-xxl-8{width:66.666667%}.col-xxl-8-5{width:70.833332}.col-xxl-9{width:75%}.col-xxl-9-5{width:79.1666665}.col-xxl-10{width:83.333333%}.col-xxl-10-5{width:87.499998}.col-xxl-11{width:91.666667%}.col-xxl-11-5{width:95.833332}.col-xxl-12{width:100%}}.w-5{width:5%!important}.w-10{width:10%!important}.w-20{width:20%!important}.w-25{width:25%!important}.w-33{width:33%!important}.w-50{width:50%!important}.w-66{width:66%!important}.w-75{width:75%!important}.w-90{width:90%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-10{width:10vw!important}.vw-25{width:25vw!important}.vw-33{width:33vw!important}.vw-50{width:50vw!important}.vw-75{width:75vw!important}.vw-90{width:90vw!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-5{height:5%!important}.h-10{height:10%!important}.h-25{height:25%!important}.h-33{height:33%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-10{height:10vh!important}.vh-25{height:25vh!important}.vh-33{height:33vh!important}.vh-50{height:50vh!important}.vh-66{height:66vh!important}.vh-75{height:75vh!important}.vh-90{height:90vh!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important} diff --git a/core/css/stylesheet-typography.css b/core/css/stylesheet-typography.css index 9536aca..8678ca7 100755 --- a/core/css/stylesheet-typography.css +++ b/core/css/stylesheet-typography.css @@ -1 +1 @@ -hr{margin:1rem 0;border:0;background-color:var(--card-border-color);height:1px}hr:not([size]){height:1px}h1:empty,.h1:empty,h2:empty,.h2:empty,h3:empty,.h3:empty,h4:empty,.h4:empty,h5:empty,.h5:empty,h6:empty,.h6:empty,section:empty,article:empty,p:empty{display:none!important}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{margin-top:0;margin-bottom:.5rem;font-family:var(--font);font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.375rem + 1.5vw)}h2,.h2{font-size:calc(1.325rem + .9vw)}h3,.h3{font-size:calc(1.3rem + .6vw)}h4,.h4{font-size:calc(1.275rem + .3vw)}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}@media (min-width:1200px){h1,.h1{font-size:2.5rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.75rem}h4,.h4{font-size:1.5rem}}blockquote{margin-left:0;border-left:.1rem solid var(--border-color);padding:.4rem .8rem}blockquote p:last-child{margin-bottom:0}p{margin-top:0;margin-bottom:1rem;font-style:normal;font-weight:300;font-size:1.15em;font-family:var(--font);line-height:1.25}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}figure{display:inline-block;margin:0;padding:0}figure img{margin-bottom:.5rem;width:100%;line-height:1}figcaption{color:var(--figure-caption-color);font-size:.875em}.img-thumbnail{padding:.25rem;background-color:#fff;border:var(--border-width) var(--border-style) var(--border-color);border-radius:var(--border-radius);max-width:100%;height:auto}a{background-color:transparent;color:var(--link-color);text-decoration:none;transition:color .5s ease}a:hover{color:var(--link-color-hover);text-decoration:underline}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:0;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}b,strong{font-weight:700}mark{background-color:var(--mark-background-color);padding:.2rem}small,.small{font-size:80%}sub,sup{position:relative;vertical-align:baseline;font-size:75%;line-height:0}sub{bottom:-.25em}sup{top:-.5em}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.line-clamp{max-height:calc(var(--line-clamp) * 1.15 * var(--line-height));overflow:hidden}@supports(-webkit-line-clamp:var(--line-clamp)){.line-clamp{max-height:none;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--line-clamp)}}.text-muted{color:var(--color-muted)!important}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-decoration-wavy{text-decoration-style:wavy var(--text-decoration-wave-color)}.font-italic{font-style:italic!important}.font-normal{font-style:normal!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:900!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-2x{font-size:-webkit-calc(100% * 1.2);font-size:-calc(100% * 1.2)}.text-3x{font-size:-webkit-calc(100% * 1.5);font-size:-calc(100% * 1.5)}.text-4x{font-size:-webkit-calc(100% * 1.75);font-size:-calc(100% * 1.75)}.text-5x{font-size:-webkit-calc(100% * 2);font-size:-calc(100% * 2)}.ellipsis{text-overflow:ellipsis!important}.clip{text-overflow:clip!important}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem} +hr,hr:not([size]){height:1px}hr{margin:1rem 0;border:0;background-color:var(--card-border-color)}.h1:empty,.h2:empty,.h3:empty,.h4:empty,.h5:empty,.h6:empty,article:empty,h1:empty,h2:empty,h3:empty,h4:empty,h5:empty,h6:empty,p:empty,section:empty{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-family:var(--font);font-weight:500;line-height:1.2}dl,ol,p,ul{margin-top:0;margin-bottom:1rem}.h1,h1{font-size:calc(1.375rem + 1.5vw)}.h2,h2{font-size:calc(1.325rem + .9vw)}.h3,h3{font-size:calc(1.3rem + .6vw)}.h4,h4{font-size:calc(1.275rem + .3vw)}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}@media (min-width:1200px){.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}}blockquote{margin-left:0;border-left:.1rem solid var(--border-color);padding:.4rem .8rem}blockquote p:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}p{font-style:normal;font-weight:300;font-size:1.15em;font-family:var(--font);line-height:1.25}ol,ul{padding-left:2rem}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}article ol li,article ul li{font-family:var(--font-family);font-size:1.2rem;font-weight:300}figure{display:inline-block;margin:0;padding:0}figure img{margin-bottom:.5rem;width:100%;line-height:1}figcaption{color:var(--figure-caption-color);font-size:.875em}.img-thumbnail{padding:.25rem;background-color:#fff;border:var(--border-width) var(--border-style) var(--border-color);border-radius:var(--border-radius);max-width:100%;height:auto}a{background-color:transparent;color:var(--link-color);text-decoration:none;transition:color .5s ease}a:hover{color:var(--link-color-hover);text-decoration:underline}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:0;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}b,strong{font-weight:700}mark{background-color:var(--mark-background-color);padding:.2rem}.small,small{font-size:80%}sub,sup{position:relative;vertical-align:baseline;font-size:75%;line-height:0}sub{bottom:-.25em}sup{top:-.5em}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.line-clamp{max-height:calc(var(--line-clamp) * 1.15 * var(--line-height));overflow:hidden}@supports(-webkit-line-clamp:var(--line-clamp)){.line-clamp{max-height:none;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--line-clamp)}}.text-muted{color:var(--color-muted)!important}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-decoration-wavy{text-decoration-style:wavy var(--text-decoration-wave-color)}.font-italic{font-style:italic!important}.font-normal{font-style:normal!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:900!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-2x{font-size:-webkit-calc(100% * 1.2);font-size:-calc(100% * 1.2)}.text-3x{font-size:-webkit-calc(100% * 1.5);font-size:-calc(100% * 1.5)}.text-4x{font-size:-webkit-calc(100% * 1.75);font-size:-calc(100% * 1.75)}.text-5x{font-size:-webkit-calc(100% * 2);font-size:-calc(100% * 2)}.ellipsis{text-overflow:ellipsis!important}.clip{text-overflow:clip!important}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem} diff --git a/core/css/stylesheet-xtras-admin.css b/core/css/stylesheet-xtras-admin.css index 4884e2e..95476ea 100755 --- a/core/css/stylesheet-xtras-admin.css +++ b/core/css/stylesheet-xtras-admin.css @@ -1 +1,7 @@ -nav ul li ul li{min-width:auto;max-width:auto}#back-top-top{width:0;height:0;border:0;margin:0;padding:0}.input-text.minus{background-color:#fff!important;padding-right:5px!important;padding-left:5px!important}.bg-white{background-color:var(--bg-white)!important}[data-gst]::before{content:attr(data-gst);position:absolute;display:block;top:-10px;left:50%;font-size:.8rem;color:#000}section.content .status,select.select-sm{padding:.15em .2em!important;font-size:75%!important;line-height:1!important;white-space:nowrap!important;vertical-align:baseline!important;font-weight:700!important}section.list{width:100%}section.content *{transition:all .5s ease}section.content .card-image .image-toolbar{position:absolute;display:block;top:-3px;right:-3px;text-align:right}section.content .status,section.content.list .card-footer .comments,section.content.list .card-footer .quickeditbtn,section.content.list .card-footer .reviews,section.content.list .card-footer .share,section.content.list .card-footer .views,section.content.list .card-header .badger,select.select-sm{display:inline-block!important}.badger,section.content .status,select.select-sm{text-align:center!important}section.list .card:hover{background-color:var(--card-hover)!important}section.content .status{position:absolute;top:-3px;left:-3px}section.content .status.stock{top:18px!important;width:97px!important}section.content .status{width:auto!important;border-radius:.25rem!important;border:0!important}select.select-sm{border-radius:.25rem!important}section.content .status .published,section.content .status.published{color:#fff!important;background-color:#28a745!important}section.content .status .autopublish,section.content .status.autopublish{color:#fff!important;background-color:#007bff!important}section.content .status .unpublished,section.content .status.unpublished{color:#212529!important;background-color:#ffc107!important}section.content .status .delete,section.content .status.delete{color:#fff!important;background-color:#dc3545!important}section.content .status .archived,section.content .status.archived{color:#fff!important;background-color:#343a40!important}section.content .card-image .image-toolbar .badger{margin-top:1px}section.content .card-footer .comments,section.content .card-footer .quickeditbtn,section.content .card-footer .reviews,section.content .card-footer .share,section.content .card-footer .views,section.content .card-header .badger,section.content.list .card-image .image-toolbar{display:none!important}section.list article{margin:.1rem .1rem .15rem}section.list .card{flex-direction:row;width:100%}section.list .card .card-image{width:92px;height:92px}section.list .card .card-image img{width:92px;max-height:92px}section.list .card .card-header{height:64px;vertical-align:middle;font-size:1em}section.content .card .card-header small{font-size:.65rem!important}section.content.list .card .card-header small{font-size:.9rem!important}section.list .card .card-footer{align-self:flex-end;margin-left:auto!important;margin-right:0!important}section.content .card-footer{margin-left:auto;margin-right:0!important}.card-actions.float-down{z-index:1;position:absolute;top:55px;right:30px;bottom:auto;left:auto}.select-sm,.select-sm:focus{margin:0;padding:0;color:#000;font-size:1em}.select-sm option{color:#000}.search-item-info{color:var(--search-item-info-color)}.search-item-title a{color:var(--search-item-link-color)}.search-item-title a:focus,.search-item-title a:hover{color:var(--search-item-link-color-hover);text-decoration:underline}.search-item-url{color:var(--search-item-url-color)}.bg-transparent{background-color:transparent!important}.bg-danger{background-color:var(--danger-background-color)!important}.bg-danger.text-danger{color:var(--danger-color-contrast)!important}.text-danger{color:var(--danger-color)!important}.border-danger{border-color:var(--danger-border-color)!important}.bg-black{background-color:#000!important}.bg-dark{background-color:var(--dark-background-color)!important}.bg-dark.text-dark{color:var(--dark-color-contrast)!important}.text-dark{color:var(--dark-color)!important}.border-dark{border-color:var(--dark-border-color)!important}.bg-default{background-color:var(--default-background-color)!important}.bg-default.text-default{color:var(--default-color-contrast)!important}.text-default{color:var(--default-color)!important}.border-default{border-color:var(--default-border-color)!important}.bg-info{background-color:var(--info-background-color)!important}.bg-info.text-info{color:var(--info-color-contrast)!important}.text-info{color:var(--info-color)!important}.border-info{border-color:var(--info-border-color)!important}.bg-light{background-color:var(--light-background-color)!important}.bg-light.text-light{color:var(--light-color-contrast)!important}.text-light{color:var(--light-color)!important}.border-light{border-color:var(--light-border-color)!important}.bg-primary{background-color:var(--primary-background-color)!important}.bg-primary.text-primary{color:var(--primary-color-contrast)!important}.text-primary{color:var(--primary-color)!important}.border-primary{border-color:var(--primary-border-color)!important}.bg-secondary{background-color:var(--secondary-background-color)!important}.bg-secondary.text-secondary{color:var(--secondary-color-contrast)!important}.text-secondary{color:var(--secondary-color)!important}.border-secondary{border-color:var(--secondary-border-color)!important}.bg-success{background-color:var(--success-background-color)!important}.bg-success.text-success{color:var(--success-color-contrast)!important}.text-success{color:var(--success-color)!important}.border-success{border-color:var(--success-border-color)!important}.bg-warning{background-color:var(--warning-background-color)!important}.bg-warning.text-warning{color:var(--warning-color-contrast)!important}.text-warning{color:var(--warning-color)!important}.border-warning{border-color:var(--warning-border-color)!important}nav[role=menubar]{display:flex;position:relative;background-color:var(--menu-background-color);width:100%}.tabs input.tab-control,nav[role=menubar] input[type=checkbox].menubar-input{display:none!important}nav[role=menubar] label.menubar-label{display:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}nav[role=menubar] ul{margin:0 0 0 auto;padding:0;list-style:none}nav[role=menubar] ul li{color:var(--menu-color)}nav[role=menubar] ul li a{color:var(--menu-link-color)}nav[role=menubar] ul li a:focus,nav[role=menubar] ul li a:hover{color:var(--menu-link-color-hover)}nav[role=menubar] ul li.active a{color:var(--menu-link-color-active)}@media screen and (max-width:44em){nav[role=menubar]{display:block;align-items:flex-start}nav[role=menubar] ul{display:none}nav[role=menubar] label.menubar-label{display:inline-block;vertical-align:middle;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-width,15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;margin:0!important;border:var(--menu-button-border-width) var(--menu-button-border-style) var(--menu-button-border-color);border-radius:var(--menu-border-radius);background-color:var(--menu-button-background-color);padding:.375rem .75rem;width:100%;color:var(--menu-button-color);font-weight:400;font-size:1rem;font-family:var(--font);line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;text-decoration:none}nav[role=menubar] label.menubar-label:hover{cursor:pointer;border:var(--menu-button-border-width-hover) var(--menu-button-border-style) var(--menu-button-border-color-hover);background-color:var(--menu-button-background-color-hover);color:var(--menu-button-color-hover);text-decoration:none}nav[role=menubar] input[type=checkbox]:checked~ul{display:block}nav[role=menubar] input[type=checkbox]:checked~ul li{width:100%}}[data-tooltip]{position:relative}.no-tooltip [data-tooltip]:hover:after,.no-tooltip [data-tooltip]:hover:before{display:none;visibility:hidden}[data-tooltip]:after,[data-tooltip]:before{position:absolute;bottom:calc(100% + 5px);left:50%;visibility:hidden;opacity:0;-webkit-transition:.1s;transition:.1s;will-change:transform;pointer-events:none}[data-tooltip]:before{transform:translate(-50%,-5px) scale(.5);z-index:5000!important;border-radius:var(--tooltip-border-radius);background-color:var(--tooltip-background-color)!important;padding:.25rem .5rem;width:-webkit-max-content;width:max-content;width:-moz-max-content;min-width:50px;max-width:300px;color:var(--tooltip-color)!important;font-size:.875rem;font-family:var(--font);font-weight:700;line-break:auto;text-align:left;white-space:normal;word-break:normal;word-spacing:normal;content:attr(data-title);word-wrap:break-word}.covertron,.jumbotron{width:100%;background-repeat:no-repeat;background-position:center center;background-attachment:fixed;overflow:hidden}[data-tooltip]:after{transform:translateX(-50%) scaleY(0);transform-origin:top;transition-duration:0s;border-width:5px 5px 0;border-style:solid;border-color:var(--tooltip-background-color) transparent transparent!important;content:''}[data-tooltip]:hover:after,[data-tooltip]:hover:before{visibility:visible;opacity:1}[data-tooltip]:hover:before{transform:translate(-50%,-5px) scale(1);transition-delay:.15s}[data-tooltip]:hover:after{transform:translateX(-50%) scaleY(1);transition-delay:.15s;transition-duration:.1s}[data-tooltip=left]:after,[data-tooltip=left]:before{right:calc(100% + 5px);bottom:50%;left:auto}[data-tooltip=left]:before{transform:translate(-5px,50%) scale(.5)}[data-tooltip=left]:hover:before{transform:translate(-5px,50%) scale(1)}[data-tooltip=left]:after{transform:translateY(50%) scaleX(0);transform-origin:left;border-width:5px 0 5px 5px;border-color:transparent transparent transparent var(--tooltip-background-color)!important}[data-tooltip=left]:hover:after,[data-tooltip=right]:hover:after{transform:translateY(50%) scaleX(1)}[data-tooltip=right]:after,[data-tooltip=right]:before{bottom:50%;left:calc(100% + 5px)}[data-tooltip=right]:before{transform:translate(5px,50%) scale(.5)}[data-tooltip=right]:hover:before{transform:translate(5px,50%) scale(1)}[data-tooltip=right]:after{transform:translateY(50%) scaleX(0);transform-origin:right;border-width:5px 5px 5px 0;border-color:transparent var(--tooltip-background-color) transparent transparent!important}[data-tooltip=bottom]:after,[data-tooltip=bottom]:before{top:calc(100% + 5px);bottom:auto}[data-tooltip=bottom]:before{transform:translate(-50%,5px) scale(.5)}[data-tooltip=bottom]:hover:before{transform:translate(-50%,5px) scale(1)}[data-tooltip=bottom]:after{transform-origin:bottom;border-width:0 5px 5px;border-color:transparent transparent var(--tooltip-background-color)!important}.covertron:empty{display:none}.covertron[style*=background-image]{display:block}.covertron{position:relative;z-index:-101;box-shadow:inset 0 -30px 30px -30px rgba(0,0,0,.5);background-size:cover;height:60vh}.covertron video{position:absolute;top:50%;left:50%;transform:translate3d(-50%,-50%,0);z-index:1;width:auto;min-width:100%;height:auto;min-height:100%}.jumboside .jumbo{width:50%}.jumbo:not(:last-child){width:50}@media (max-width:768px){.jumboside .jumbo{width:100%!important}}.jumbotron{z-index:-1;display:block;position:relative;height:100vh;margin:0;padding:0;border-radius:0;background-color:var(--jumbotron-background-color);-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;object-fit:contain;-webkit-box-shadow:inset 0 -30px 30px -30px rgba(0,0,0,.5);-moz-box-shadow:inset 0 -30px 30px -30px rgba(0,0,0,.5);box-shadow:inset 0 -30px 30px -30px rgba(0,0,0,.5)}.jumbotron[style*=background-image]{display:block}.jumbotron img{z-index:-1;position:absolute;min-width:100%;min-height:100vh;top:50%;left:50%;transform:translate3d(-50%,-50%,0);object-fit:cover}.jumbotron h1,.jumbotron h2,.jumbotron h3,.jumbotron h4,.jumbotron h5,.jumbotron h6,.jumbotron p{z-index:2;display:block}.jumbotron iframe,.jumbotron video{position:absolute;top:0;right:0;bottom:0;left:0;width:auto;height:auto;min-width:100%;min-height:100%;margin:0!important;padding:0!important;background-color:#000;z-index:1}.card-image figcaption,.jumbotron figcaption{position:absolute;bottom:8px;left:0;font-family:var(--font);font-size:1rem;background-color:var(--card-figcaption-background-color);color:var(--card-figcaption-color);padding:.25rem .5rem;border-top-right-radius:.5rem}.breadcrumb-item,.card{position:relative}.jumbotron figcaption{bottom:0}.jumbotron:empty,figcaption:empty{display:none}.card,.card .card-footer,.card footer{display:flex}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.card{flex-direction:column;min-width:0;word-wrap:break-word;border:var(--card-border-width) var(--card-border-style) var(--card-border-color);border-radius:var(--card-border-radius);background-color:var(--card-background-color);padding:0;overflow:hidden}.card>hr{margin-right:0;margin-left:0}.card .card-body,.card .card-footer,.card .card-header{padding:.1rem .8rem 0}.card .card-header{background-color:var(--card-header-background-color);overflow:hidden;text-overflow:ellipsis;white-space:normal}.badge,.badge[data-badge]::after,.badger,.breadcrumb-dropper{white-space:nowrap}.card .card-title{margin-bottom:.1rem}.card .card-title h2,.card .card-title h3,.card .card-title h4,.card .card-title h5,.card .card-title h6{margin:0;padding:0}.card .card-header a{color:var(--card-link-color)}.card .card-header a:hover,.card .card-subtitle a:focus,.card .card-subtitle a:hover{color:var(--card-link-color-hover)}.card .card-header a:hover{text-decoration:none}.card .card-body:last-child,.card .card-footer:last-child,.card .card-header:last-child{padding-bottom:.8rem}.card .card-footer .btn,.card footer .btn,.card footer button{margin-right:0!important;margin-left:auto!important}.card .card-subtitle{margin-top:-.25rem;margin-bottom:0}.card .card-body{-webkit-line-clamp:var(--card-body-lines);-webkit-box-orient:vertical;-webkit-box-flex:1;display:-webkit-box;flex:1 1 auto;overflow:hidden}.card .card-body.no-clamp{display:block!important;-webkit-line-clamp:none!important}.card .card-image img{z-index:-1;height:12rem;-o-object-fit:cover;object-fit:cover}.card .card-image.full img{height:30rem;object-position:center}.card .card-image:first-child{padding-top:0}.card .card-image:first-child img{border-top-right-radius:var(--card-border-radius);border-top-left-radius:var(--card-border-radius);width:100%}.card .card-image:last-child img{border-bottom-right-radius:var(--card-border-radius);border-bottom-left-radius:var(--card-border-radius)}.breadcrumb{flex-wrap:wrap;background-color:transparent;padding:.75rem 1rem;list-style:none;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:var(--color-muted);content:"/"}.breadcrumb-item.active{color:var(--color-muted)}.breadcrumb-dropdown:hover .breadcrumb-dropper{display:block!important}.breadcrumb-dropper{display:none;position:absolute;top:15px;left:0;z-index:100;box-shadow:var(--box-shadow-x) var(--box-shadow-y) var(--box-shadow-spread) var(--box-shadow-spread) var(--box-shadow-color);border:var(--border-width) var(--border-style) var(--menu-dropdown-border-color);border-radius:var(--border-radius);background-color:var(--menu-dropdown-background-color);padding:.5rem 1rem;width:auto;height:auto;list-style:none}.alert,.alert .toolbar,.avatar,.avatar img,.badge,.btn .badger,.list-group-item,.tabs input.tab-control+label,[data-text],dialog p,dialog section{position:relative}.breadcrumb-dropper a{display:block;font-size:1em}.alert{border:var(--border-width) var(--border-style) transparent;border-color:var(--default-border-color);border-radius:var(--border-radius);background-color:var(--default-background-color);padding:.75em 1.25em;margin-bottom:1rem;height:auto;color:var(--default-color)}.alert .toolbar{width:100%;height:24px;font-size:14px;font-weight:700;background:rgba(0,0,0,.15)}.alert.toolbar.handle:hover{cursor:grab!important}.alert .toolbar .btn-group{position:absolute;top:0;right:0}.alert.alert-full{border-radius:0;border:0;border-bottom-width:var(--border-width);margin:0}.alert header{background-color:transparent;color:inherit}.alert h1,.alert h2,.alert h3,.alert h4,.alert h5,.alert h6{color:inherit;font-size:1em}.alert a{color:var(--default-link);font-weight:700}.alert a:hover{color:inherit;text-decoration:underline}.alert-info{border-color:var(--alert-info-border-color);background-color:var(--alert-info-background-color);color:var(--alert-info-color)}.alert-info a{color:var(--alert-info-link)}.alert-success{border-color:var(--alert-success-border-color);background-color:var(--alert-success-background-color);color:var(--alert-success-color)}.alert-success a{color:var(--alert-success-link)}.alert-warning{border-color:var(--alert-warning-border-color);background-color:var(--alert-warning-background-color);color:var(--alert-warning-color)}.alert-warning a{color:var(--alert-warning-link)}.alert-danger{border-color:var(--alert-danger-border-color);background-color:var(--alert-danger-background-color);color:var(--alert-danger-color)}.alert-danger a{color:var(--alert-danger-link)}.tabs{margin-right:auto;width:100%}[role=tabpanel]{display:none}.tabs #tab1-10:checked~.tab1-10,.tabs #tab1-11:checked~.tab1-11,.tabs #tab1-12:checked~.tab1-12,.tabs #tab1-13:checked~.tab1-13,.tabs #tab1-14:checked~.tab1-14,.tabs #tab1-15:checked~.tab1-15,.tabs #tab1-16:checked~.tab1-16,.tabs #tab1-17:checked~.tab1-17,.tabs #tab1-18:checked~.tab1-18,.tabs #tab1-19:checked~.tab1-19,.tabs #tab1-1:checked~.tab1-1,.tabs #tab1-20:checked~.tab1-20,.tabs #tab1-2:checked~.tab1-2,.tabs #tab1-3:checked~.tab1-3,.tabs #tab1-4:checked~.tab1-4,.tabs #tab1-5:checked~.tab1-5,.tabs #tab1-6:checked~.tab1-6,.tabs #tab1-7:checked~.tab1-7,.tabs #tab1-8:checked~.tab1-8,.tabs #tab1-9:checked~.tab1-9{display:block}.tabs input.tab-control+label{display:inline-block;top:1px;margin:0;font-weight:400;border:0;border-radius:var(--tab-border-radius) var(--tab-border-radius) 0 0;background-color:var(--tab-background-color);color:var(--tab-color);font-size:.95rem;padding:4px 12px}.tabs input.tab-control+label:hover{cursor:pointer;color:var(--tab-color-hover);background-color:var(--tab-background-color-hover)}.tabs input.tab-control:checked+label{border:var(--tab-border-width) var(--tab-border-style) var(--tab-border-color);border-bottom:var(--border-width) var(--border-style) transparent;background-color:var(--tab-background-color-active);color:var(--tab-color-active);font-weight:700}.tabs input.tab-control:checked+label:hover{background-color:var(--tab-background-color-active-hover)!important}.tabs input.tab-control~.tab{display:none;border-top:var(--border-width) var(--border-style) var(--tab-border-color);padding:12px;width:100%}.list-group{display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-item-action{width:100%;color:var(--list-group-color);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;background-color:var(--list-group-background-color-hover);color:var(--list-group-color-hover);text-decoration:none}.list-group-item-action:active{background-color:var(--list-group-background-active);color:var(--list-group-color-active)}.list-group-item{display:block;margin-bottom:0;border:var(--border-width) var(--border-style) var(--border-color);background-color:var(--list-group-background-color);padding:.75rem 1.25rem;text-decoration:none}.list-group-item:first-child{border-top-right-radius:var(--border-radius);border-top-left-radius:var(--border-radius)}.list-group-item:last-child{border-bottom-right-radius:var(--border-radius);border-bottom-left-radius:var(--border-radius)}.list-group-item.disabled,.list-group-item:disabled{background-color:var(--list-group-background-disabled);pointer-events:none;color:var(--list-group-color-disabled)}.list-group-item.active{z-index:2;border-color:var(--list-group-background-active);background-color:var(--list-group-background-active);color:var(--list-group-color)}.list-group-item+.list-group-item{border-top-width:var(--border-width)}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:var(--border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-top-right-radius:0;border-bottom-left-radius:var(--border-radius)}.list-group-horizontal .list-group-item:last-child{border-top-right-radius:var(--border-radius);border-bottom-left-radius:0}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:var(--border-width)}.list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:var(--border-width)}.avatar{display:inline-block;vertical-align:middle;margin:0;border-radius:50%;background-color:var(--border-color);width:1.6rem;height:1.6rem;color:rgba(255,255,255,.85);font-weight:300;font-size:.8rem;line-height:1.25}.avatar.xs{width:.8rem;height:.8rem;font-size:.4rem}.avatar.sm{width:1.2rem;height:1.2rem;font-size:.6rem}.avatar.lg{width:2.4rem;height:2.4rem;font-size:1.2rem}.avatar.xl{width:3.2rem;height:3.2rem;font-size:1.6rem}.avatar.xxl{width:4rem;height:4rem;font-size:1.6rem}.avatar img{z-index:1;border-radius:50%;width:100%;height:100%}.badger{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.badge-2x{font-size:.9rem!important}@media (prefers-reduced-motion:reduce){.badger{transition:none}}a.badger:focus,a.badger:hover{text-decoration:none}.badge[data-badge=""],.badger:empty{display:none}.btn .badger{top:-1px}.badge-autopublish,.badge-primary{color:#fff!important;background-color:#007bff!important}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-cancelled,.badge-secondary{color:#fff!important;background-color:#6c757d!important}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-confirmed,.badge-paid,.badge-published,.badge-success{color:#fff!important;background-color:#28a745!important}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info,.badge-pending{color:#fff!important;background-color:#17a2b8!important}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-unpublished,.badge-warning{color:#212529!important;background-color:#ffc107!important}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger,.badge-delete,.badge-overdue,.badge-unconfirmed{color:#fff!important;background-color:#dc3545!important}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529!important;background-color:#f8f9fa!important}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-archived,.badge-dark{color:#fff!important;background-color:#343a40!important}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.badge-subscriber,.badge-visitor{background-color:#ff0!important;color:#000!important}.badge-member,.badge-wholesale{background-color:#4682b4!important;color:#fff!important}.badge-client{background-color:#00ff7f!important;color:#000!important}.badge-member-silver,.badge-wholesale-silver{background-color:#a6a6a6!important;color:#000!important}.badge-member-bronze,.badge-wholesale-bronze{background-color:#a57164!important;color:#fff!important}.badge-member-gold,.badge-wholesale-gold{background-color:#c39953!important;color:#fff!important}.badge-member-platinum,.badge-wholesale-platinum{background-color:#e5e4e2!important;color:#000!important}.badge-author,.badge-contributor,.badge-editor,.badge-manager,.badge-moderator{background-color:#9400d3!important;color:#fff!important}.badge-administrator,.badge-developer{background-color:#f8d7da!important;color:#000!important}.badge:not([data-badge])::after,.badge[data-badge]::after{display:inline-block;transform:translate(-1.05rem,-.5rem);box-shadow:0 0 0 .1rem var(--box-shadow-color);border-radius:50%;background:var(--badge-background-color);background-clip:padding-box;color:var(--badge-color);content:attr(data-badge)}.badge[data-badge='']::after,.corner-ribbon:empty,dialog:not([open]){display:none}.badge.avatar::after,button.badge::after{transform:translate(50%,-50%);position:absolute}.badge[data-badge]::after{padding:.2rem .4rem;min-width:.9rem;height:1.2rem;font-size:.7rem;line-height:1.3;text-align:center}button.badge::after{top:0;right:-1rem}.badge.avatar::after{top:14.64%;right:14.64%;z-index:100}.corner-ribbon{position:absolute;top:15px;left:-70px;transform:rotate(-45deg);background:#f8f9fa;width:200px;color:#212529;font-size:.5em!important;line-height:30px;letter-spacing:1px;text-align:center}.corner-ribbon.sm{top:5px;left:-30px;line-height:20px}.corner-ribbon.lg{top:20px;left:-50px;font-size:20px!important;line-height:60px}.corner-ribbon.top-left{top:25px;left:-65px;transform:rotate(-45deg)}.corner-ribbon.small.top-left{top:15px;left:-80px;transform:rotate(-45deg)}.corner-ribbon.big.top-left{top:28px;left:-55px;transform:rotate(-45deg)}.corner-ribbon.top-right{top:25px;right:-65px;left:auto;transform:rotate(45deg)}.corner-ribbon.small.top-right{top:10px;right:-75px;left:auto;transform:rotate(45deg)}.corner-ribbon.big.top-right{top:28px;right:-55px;left:auto;transform:rotate(45deg)}.corner-ribbon.bottom-left{top:auto;bottom:25px;left:-65px;transform:rotate(45deg)}.corner-ribbon.small.bottom-left{top:auto;bottom:10px;left:-75px;transform:rotate(45deg)}.corner-ribbon.big.bottom-left{top:auto;bottom:28px;left:-55px;transform:rotate(45deg)}.corner-ribbon.bottom-right{top:auto;right:-25px;bottom:65px;left:auto;transform:rotate(-45deg)}.corner-ribbon.small.bottom-right{top:auto;right:-75px;bottom:10px;left:auto;transform:rotate(-45deg)}.corner-ribbon.big.bottom-right{top:auto;right:-55px;bottom:28px;left:auto;transform:rotate(-45deg)}.corner-ribbon.black{background-color:#333;color:#fff}.corner-ribbon.danger{background-color:var(--danger-border-color);color:var(--danger-color)}.corner-ribbon.dark{background-color:var(--dark-background-color);color:var(--dark-color)}.corner-ribbon.info{background-color:var(--info-background-color);color:var(--info-color)}.corner-ribbon.light{background-color:var(--light-background-color);color:var(--light-color)}.corner-ribbon.primary{background-color:var(--primary-background-color);color:var(--primary-color)}.corner-ribbon.secondary{background-color:var(--secondary-background-color);color:var(--secondary-color)}.corner-ribbon.success{background-color:var(--success-background-color);color:var(--success-color)}.corner-ribbon.warning{background-color:var(--warning-background-color);color:var(--warning-color)}.corner-ribbon.white{background-color:#f0f0f0;color:#555}.corner-ribbon.outline-primary{border-color:var(--primary-border-color);background-color:#fff;color:var(--primary-color)}.corner-ribbon.outline-secondary{border-color:var(--secondary-border-color);background-color:#fff;color:var(--secondary-color)}.corner-ribbon.outline-success{border-color:var(--success-border-color);background-color:#fff;color:var(--success-color)}.corner-ribbon.outline-info{border-color:var(--info-border-color);background-color:#fff;color:var(--info-color)}.corner-ribbon.outline-warning{border-color:var(--warning-border-color);background-color:#fff;color:var(--warning-color)}.corner-ribbon.outline-danger{border-color:var(--danger-border-color);background-color:#fff;color:var(--danger-color)}.corner-ribbon.outline-light{border-color:var(--light-border-color);background-color:#fff;color:var(--light-color)}.corner-ribbon.outline-dark{border-color:var(--dark-border-color);background-color:#fff;color:var(--dark-color)}.corner-ribbon .quantity{font-size:inherit;text-align:inherit}dialog{display:block;position:fixed;top:50%;right:0;left:0;transform:translate(0,-50%);margin:auto;outline:0;border:0;border-radius:var(--dialog-border-radius);background:#fff;padding:0;width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;min-width:var(--dialog-min-width);max-width:var(--dialog-max-width);height:-moz-fit-content;height:-webkit-fit-content;height:fit-content;pointer-events:auto;color:#000}dialog+.backdrop,dialog::backdrop{background-color:rgba(0,0,0,.4)}dialog[open]{-webkit-animation:dialog-show .45s cubic-bezier(.5,.61,.355,1) normal;animation:dialog-show .45s cubic-bezier(.5,.61,.355,1) normal}dialog[open]::-webkit-backdrop{-webkit-animation:dialog-backdrop-show .45s cubic-bezier(.5,.61,.355,1) normal;animation:dialog-backdrop-show .45s cubic-bezier(.5,.61,.355,1) normal}dialog[open]::backdrop{-webkit-animation:dialog-backdrop-show .45s cubic-bezier(.5,.61,.355,1) normal;animation:dialog-backdrop-show .45s cubic-bezier(.5,.61,.355,1) normal}dialog::-webkit-backdrop{z-index:1050;background-color:rgba(0,0,0,.4)}dialog::backdrop{z-index:1050}dialog header{display:flex;justify-content:space-between;align-items:flex-start;margin:0;border-bottom:var(--border-width) var(--border-style) var(--dialog-border-color);border-top-right-radius:var(--dialog-border-radius);border-top-left-radius:var(--dialog-border-radius);background-color:var(--dialog-background-color);padding:1rem;width:100%}dialog header .close{-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:.5;margin:-1rem -1rem -1rem auto;border:0;background-color:transparent;padding:1rem;color:#000;font-weight:700;font-size:calc(1.275rem + .3vw);line-height:1;text-shadow:0 1px 0 #fff}dialog header .close:focus,dialog header .close:hover{opacity:.75;box-shadow:none;color:#000;text-decoration:none}dialog header h1,dialog header h2,dialog header h3,dialog header h4,dialog header h5,dialog header h6{margin:0;padding:0}dialog p,dialog section{display:block;flex:1 1 auto;padding:1rem;overflow-y:auto}dialog footer{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;margin:0;border-top:var(--border-width) var(--border-style) var(--dialog-border-color);border-bottom-right-radius:var(--dialog-border-radius);border-bottom-left-radius:var(--dialog-border-radius);padding:.75rem}@-webkit-keyframes dialog-show{0%{transform:translateY(-25%);opacity:0}50%{opacity:1}100%{transform:translateY(-50%);opacity:1}}@keyframes dialog-show{0%{transform:translateY(-25%);opacity:0}50%{opacity:1}100%{transform:translateY(-50%);opacity:1}}@-webkit-keyframes dialog-backdrop-show{0%{opacity:0}100%{opacity:1}}@keyframes dialog-backdrop-show{0%{opacity:0}100%{opacity:1}}.overflow-y{overflow-y:auto!important}.grab{cursor:-moz-grab;cursor:-webkit-grab}.kanban-item{width:100%;background-color:var(--alert-default-background-color);color:var(--alert-default-color);border-width:var(--card-border-width) var(--card-border-style) var(--alert-default-border-color)}#overdue .kanban-item,#unconfirmed .kanban-item{background-color:var(--alert-danger-background-color);color:var(--alert-danger-color);border-color:var(--alert-danger-color)}#confirmed .kanban-item,#outstanding .kanban-item{background-color:var(--alert-warning-background-color);color:var(--alert-warning-color);border-color:var(--alert-warning-color)}#in-progress .kanban-item{background-color:var(--alert-info-background-color);color:var(--alert-info-color);border-color:var(--alert-info-color)}#complete .kanban-item,#paid .kanban-item{background-color:var(--alert-success-background-color);color:var(--alert-success-color);border-color:var(--alert-success-color)}.shake-horizontal{-webkit-animation:shake-horizontal .8s cubic-bezier(.455,.030,.515,.955) both;animation:shake-horizontal .8s cubic-bezier(.455,.030,.515,.955) both}@-webkit-keyframes shake-horizontal{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%{-webkit-transform:translateX(10px);transform:translateX(10px)}80%{-webkit-transform:translateX(8px);transform:translateX(8px)}90%{-webkit-transform:translateX(-8px);transform:translateX(-8px)}}@keyframes shake-horizontal{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%{-webkit-transform:translateX(10px);transform:translateX(10px)}80%{-webkit-transform:translateX(8px);transform:translateX(8px)}90%{-webkit-transform:translateX(-8px);transform:translateX(-8px)}}[data-text]{display:block}[data-text]::before{content:attr(data-text) ":";position:absolute;font-size:10px;top:-8px;left:-6px;text-transform:uppercase}.rounded{border-radius:50%}.sticky-header th{z-index:1;position:sticky;top:0;background-color:#e0e0e0}.flag{display:inline-flex;width:40px;height:40px;border-radius:50%}.flag img{max-height:40px;border:1px solid #ccc;border-radius:50%;object-fit:cover;object-position:center}.adverb,.qualifier{background:#c4e3f3}.passive{background:#c4ed9d}.complex{background:#e3b7e8}.hardSentence{background:#f7ecb5}.veryHardSentence{background:#e4b9b9}.alert.widget{background-color:var(--card-background-color)!important;color:var(--card-color)!important;border:1px solid var(--card-border-color)!important;box-shadow:2px 4px 12px 0 var(--shadow-color)!important}.alert.widget a{color:var(--card-link-color)!important}.alert.widget a:hover{color:var(--card-link-color-hover)!important}.widget-weather{color:#fff;border:0;box-shadow:2px 4px 12px 0 var(--shadow-color)}#current-weather{padding:15px}#main-icon{font-size:70px!important}#mainTemperature{font-size:3em;line-height:.7}#tempDescription{margin-top:10px;text-align:center}.day-weather-box{border:1px solid rgba(0,0,0,.5);background-color:rgba(0,0,0,.5);height:5em}.day-weather-box p{margin-bottom:0}.side-weather-info{padding:0 10px}.day-weather-inner-box{display:inline-flex;margin:14px auto;padding:0 10px 0 0}.forecast-main{padding:0 10px}.forecast-icon{font-size:25px!important}.widget-weather.background{background-color:rgba(0,0,0,0);background-image:url(../images/weather/weather-aurora.webp);background-repeat:no-repeat;background-position:center;background-origin:content-box;background-size:cover;background-blend-mode:darken;-webkit-transition:background-image 2s ease-in-out;transition:background-image 2s ease-in-out}.Ash{background-image:url(../images/weather/weather-ash.webp)!important}.Ash.night{background-image:url(../images/weather/weather-ash-night.webp)!important}.Clear{background-image:url(../images/weather/weather-clear.webp)!important}.Clear.night{background-image:url(../images/weather/weather-clear-night.webp)!important}.Clouds{background-image:url(../images/weather/weather-clouds.webp)!important}.Clouds.night{background-image:url(../images/weather/weather-clouds-night.webp)!important}.Dust,.Sand{background-image:url(../images/weather/weather-dust.webp)!important}.Dust.night,.Sand.night{background-image:url(../images/weather/weather-dust-night.webp)!important}.Fog,.Haze,.Mist{background-image:url(../images/weather/weather-fog.webp)!important}.Fog.night,.Haze.night,.Mist.night{background-image:url(../images/weather/weather-fog-night.webp)!important}.Rain{background-image:url(../images/weather/weather-rain.webp)!important}.Rain.night{background-image:url(../images/weather/weather-rain-night.webp)!important}.Snow{background-image:url(../images/weather/weather-snow.webp)!important}.Snow.night{background-image:url(../images/weather/weather-snow-night.webp)!important}.Squall{background-image:url(../images/weather/weather-squall.webp)!important}.Squall.night{background-image:url(../images/weather/weather-squall-night.webp)!important}.Thunderstorm{background-image:url(../images/weather/weather-thunderstorm.webp)!important}.Thunderstorm.night{background-image:url(../images/weather/weather-thunderstorm-night.webp)!important}.Tornado{background-image:url(../images/weather/weather-tornado.webp)!important}.Tornado.night{background-image:url(../images/weather/weather-tornado-night.webp)!important}.alert.blackfriday,.alert.christmas,.alert.easter,.alert.fathersday,.alert.halloween,.alert.mothersday,.alert.valentine{background-color:#fff!important;background-repeat:no-repeat!important;background-position:top right!important;background-size:contain!important}.alert.blackfriday .toolbar,.alert.christmas .toolbar,.alert.easter .toolbar,.alert.fathersday .toolbar,.alert.halloween .toolbar,.alert.mothersday .toolbar,.alert.smallbusinessday .toolbar,.alert.valentine .toolbar{background-color:transparent!important;color:#000!important}.alert.christmas .toolbar svg,.alert.easter .toolbar svg,.alert.fathersday .toobar svg,.alert.halloween .toolbar svg,.alert.mothersday .toolbar svg,.alert.valentine .toolbar svg{fill:#000!important}.alert.christmas .card,.alert.easter .card,.alert.fathersday .card,.alert.halloween .card,.alert.mothersday .card,.alert.valentine .card{color:#000!important}.alert.blackfriday .card .card-title,.alert.christmas .card .card-title,.alert.easter .card .card-title,.alert.fathersday .card .card-title,.alert.halloween .card .card-title,.alert.mothersday .card .card-title,.alert.smallbusinessday .card .card-title,.alert.valentine .card .card-title{font-weight:700!important}.alert.valentine{background-image:url(../images/sale-valentine.webp)!important;border-color:#f7b4bb!important;box-shadow:2px 4px 12px 0 #f7d7dc!important}.alert.valentine .card{border-color:#f73131!important;background-color:#f76c73!important}.alert.easter{background-image:url(../images/sale-easter.webp)!important;border-color:#8d82de!important;box-shadow:2px 4px 12px 0 #8d82de!important}.alert.easter .card{border-color:#8d82de!important;background-color:#cdb2d5!important;box-shadow:2px 4px 12px 0 #cdb2d5!important}.alert.mothersday,.alert.mothersday .card{box-shadow:2px 4px 12px 0 #fd9fff!important}.alert.mothersday{background-image:url(../images/sale-mothersday.webp)!important;border-color:#fd9fff!important}.alert.mothersday .card{border-color:#fe8c8c!important;background-color:#ffd6ff!important}.alert.fathersday{background-image:url(../images/sale-fathersday.webp)!important;border-color:#83b9df!important;box-shadow:2px 4px 12px 0 #83b9df!important}.alert.fathersday .card{border-color:#f27555!important;background-color:#f7eb7d!important;box-shadow:2px 4px 12px 0 #f27555!important}.alert.blackfriday,.alert.blackfriday .card{border:2px solid #dd1e23!important;box-shadow:2px 4px 12px 0 #dd1e23!important}.alert.blackfriday{background-color:#000!important;background-image:url(../images/sale-blackfriday.webp)!important;background-size:cover!important}.alert.blackfriday .toolbar{color:#fff!important}.alert.blackfriday .toolbar svg{fill:#fff!important}.alert.blackfriday .card{background-color:#252525!important;color:#fff!important}.alert.halloween,.alert.halloween .card{border:2px solid #000!important;box-shadow:2px 4px 12px 0 #f40!important}.alert.blackfriday .card .card-title a{color:#fff!important}.alert.halloween{background-image:url(../images/sale-halloween.webp)!important;background-position:top center!important;background-size:cover!important}.alert.halloween .card{background-color:#f40!important}.alert.smallbusinessday{background-color:#eef!important;background-image:none;border:1px solid #123048!important;box-shadow:2px 4px 12px 0 #6f8ca4!important}.alert.smallbusinessday .toolbar{color:#123048!important}.alert.smallbusinessday .toolbar svg{fill:#123048!important}.alert.smallbusinessday .card{border:2px solid #123048!important;background-color:#bfdef3!important;color:#123048!important;box-shadow:1px 4px 12px 0 #123048!important}.alert.christmas{background-image:url(../images/sale-christmas.webp)!important;background-size:cover!important;border:3px solid #b52427!important;box-shadow:2px 4px 14px 0 #126837!important}.alert.christmas .card{border:2px solid #b52427!important;background-color:#f0ab29!important;box-shadow:2px 4px 12px 0 #126837!important} +nav ul li ul li{min-width:auto;max-width:auto}#back-top-top{width:0;height:0;border:0;margin:0;padding:0}.input-text.minus{background-color:#fff!important;padding-right:5px!important;padding-left:5px!important}.bg-white{background-color:var(--bg-white)!important}[data-gst]::before{content:attr(data-gst);position:absolute;display:block;top:-10px;left:50%;font-size:.8rem;color:#000}section.content .status,select.select-sm{padding:.15em .2em!important;font-size:75%!important;line-height:1!important;white-space:nowrap!important;vertical-align:baseline!important;font-weight:700!important}section.list{width:100%}section.content *{transition:all .5s ease}section.content .card-image .image-toolbar{position:absolute;display:block;top:-3px;right:-3px;text-align:right}section.content .status,section.content.list .card-footer .comments,section.content.list .card-footer .quickeditbtn,section.content.list .card-footer .reviews,section.content.list .card-footer .share,section.content.list .card-footer .views,section.content.list .card-header .badger,select.select-sm{display:inline-block!important}.badger,section.content .status,select.select-sm{text-align:center!important}section.list .card:hover{background-color:var(--card-hover)!important}section.content .status{position:absolute;top:-3px;left:-3px}section.content .status.stock{top:18px!important;width:97px!important}section.content .status{width:auto!important;border-radius:.25rem!important;border:0!important}select.select-sm{border-radius:.25rem!important}section.content .status .published,section.content .status.published{color:#fff!important;background-color:#28a745!important}section.content .status .autopublish,section.content .status.autopublish{color:#fff!important;background-color:#007bff!important}section.content .status .unpublished,section.content .status.unpublished{color:#212529!important;background-color:#ffc107!important}section.content .status .delete,section.content .status.delete{color:#fff!important;background-color:#dc3545!important}section.content .status .archived,section.content .status.archived{color:#fff!important;background-color:#343a40!important}section.content .card-image .image-toolbar .badger{margin-top:1px}section.content .card-footer .comments,section.content .card-footer .quickeditbtn,section.content .card-footer .reviews,section.content .card-footer .share,section.content .card-footer .views,section.content .card-header .badger,section.content.list .card-image .image-toolbar{display:none!important}section.list article{margin:.1rem .1rem .15rem}section.list .card{flex-direction:row;width:100%}section.list .card .card-image{width:92px!important;height:92px}section.list .card .card-image img{width:92px!important;max-height:92px}section.list .card .card-header{height:64px;vertical-align:middle;font-size:1em}section.content .card .card-header small{font-size:.65rem!important}section.content.list .card .card-header small{font-size:.9rem!important}section.list .card .card-footer{align-self:flex-end;margin-left:auto!important;margin-right:0!important}section.content .card-footer{margin-left:auto;margin-right:0!important}.card-actions.float-down{z-index:1;position:absolute;top:55px;right:30px;bottom:auto;left:auto}.select-sm,.select-sm:focus{margin:0;padding:0;color:#000;font-size:1em}.select-sm option{color:#000}.search-item-info{color:var(--search-item-info-color)}.search-item-title a{color:var(--search-item-link-color)}.search-item-title a:focus,.search-item-title a:hover{color:var(--search-item-link-color-hover);text-decoration:underline}.search-item-url{color:var(--search-item-url-color)}.bg-transparent{background-color:transparent!important}.bg-danger{background-color:var(--danger-background-color)!important}.bg-danger.text-danger{color:var(--danger-color-contrast)!important}.text-danger{color:var(--danger-color)!important}.border-danger{border-color:var(--danger-border-color)!important}.bg-black{background-color:#000!important}.bg-dark{background-color:var(--dark-background-color)!important}.bg-dark.text-dark{color:var(--dark-color-contrast)!important}.text-dark{color:var(--dark-color)!important}.border-dark{border-color:var(--dark-border-color)!important}.bg-default{background-color:var(--default-background-color)!important}.bg-default.text-default{color:var(--default-color-contrast)!important}.text-default{color:var(--default-color)!important}.border-default{border-color:var(--default-border-color)!important}.bg-info{background-color:var(--info-background-color)!important}.bg-info.text-info{color:var(--info-color-contrast)!important}.text-info{color:var(--info-color)!important}.border-info{border-color:var(--info-border-color)!important}.bg-light{background-color:var(--light-background-color)!important}.bg-light.text-light{color:var(--light-color-contrast)!important}.text-light{color:var(--light-color)!important}.border-light{border-color:var(--light-border-color)!important}.bg-primary{background-color:var(--primary-background-color)!important}.bg-primary.text-primary{color:var(--primary-color-contrast)!important}.text-primary{color:var(--primary-color)!important}.border-primary{border-color:var(--primary-border-color)!important}.bg-secondary{background-color:var(--secondary-background-color)!important}.bg-secondary.text-secondary{color:var(--secondary-color-contrast)!important}.text-secondary{color:var(--secondary-color)!important}.border-secondary{border-color:var(--secondary-border-color)!important}.bg-success{background-color:var(--success-background-color)!important}.bg-success.text-success{color:var(--success-color-contrast)!important}.text-success{color:var(--success-color)!important}.border-success{border-color:var(--success-border-color)!important}.bg-warning{background-color:var(--warning-background-color)!important}.bg-warning.text-warning{color:var(--warning-color-contrast)!important}.text-warning{color:var(--warning-color)!important}.border-warning{border-color:var(--warning-border-color)!important}nav[role=menubar]{display:flex;position:relative;background-color:var(--menu-background-color);width:100%}.tabs input.tab-control,nav[role=menubar] input[type=checkbox].menubar-input{display:none!important}nav[role=menubar] label.menubar-label{display:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}nav[role=menubar] ul{margin:0 0 0 auto;padding:0;list-style:none}nav[role=menubar] ul li{color:var(--menu-color)}nav[role=menubar] ul li a{color:var(--menu-link-color)}nav[role=menubar] ul li a:focus,nav[role=menubar] ul li a:hover{color:var(--menu-link-color-hover)}nav[role=menubar] ul li.active a{color:var(--menu-link-color-active)}@media screen and (max-width:44em){nav[role=menubar]{display:block;align-items:flex-start}nav[role=menubar] ul{display:none}nav[role=menubar] label.menubar-label{display:inline-block;vertical-align:middle;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-width,15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;margin:0!important;border:var(--menu-button-border-width) var(--menu-button-border-style) var(--menu-button-border-color);border-radius:var(--menu-border-radius);background-color:var(--menu-button-background-color);padding:.375rem .75rem;width:100%;color:var(--menu-button-color);font-weight:400;font-size:1rem;font-family:var(--font);line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;text-decoration:none}nav[role=menubar] label.menubar-label:hover{cursor:pointer;border:var(--menu-button-border-width-hover) var(--menu-button-border-style) var(--menu-button-border-color-hover);background-color:var(--menu-button-background-color-hover);color:var(--menu-button-color-hover);text-decoration:none}nav[role=menubar] input[type=checkbox]:checked~ul{display:block}nav[role=menubar] input[type=checkbox]:checked~ul li{width:100%}}[data-tooltip]{position:relative}.no-tooltip [data-tooltip]:hover:after,.no-tooltip [data-tooltip]:hover:before{display:none;visibility:hidden}[data-tooltip]:after,[data-tooltip]:before{position:absolute;bottom:calc(100% + 5px);left:50%;visibility:hidden;opacity:0;-webkit-transition:.1s;transition:.1s;will-change:transform;pointer-events:none}[data-tooltip]:before{transform:translate(-50%,-5px) scale(.5);z-index:5000!important;border-radius:var(--tooltip-border-radius);background-color:var(--tooltip-background-color)!important;padding:.25rem .5rem;width:-webkit-max-content;width:max-content;width:-moz-max-content;min-width:50px;max-width:300px;color:var(--tooltip-color)!important;font-size:.875rem;font-family:var(--font);font-weight:700;line-break:auto;text-align:left;white-space:normal;word-break:normal;word-spacing:normal;content:attr(data-title);word-wrap:break-word}.covertron,.jumbotron{width:100%;background-repeat:no-repeat;background-position:center center;background-attachment:fixed;overflow:hidden}[data-tooltip]:after{transform:translateX(-50%) scaleY(0);transform-origin:top;transition-duration:0s;border-width:5px 5px 0;border-style:solid;border-color:var(--tooltip-background-color) transparent transparent!important;content:''}[data-tooltip]:hover:after,[data-tooltip]:hover:before{visibility:visible;opacity:1}[data-tooltip]:hover:before{transform:translate(-50%,-5px) scale(1);transition-delay:.15s}[data-tooltip]:hover:after{transform:translateX(-50%) scaleY(1);transition-delay:.15s;transition-duration:.1s}[data-tooltip=left]:after,[data-tooltip=left]:before{right:calc(100% + 5px);bottom:50%;left:auto}[data-tooltip=left]:before{transform:translate(-5px,50%) scale(.5)}[data-tooltip=left]:hover:before{transform:translate(-5px,50%) scale(1)}[data-tooltip=left]:after{transform:translateY(50%) scaleX(0);transform-origin:left;border-width:5px 0 5px 5px;border-color:transparent transparent transparent var(--tooltip-background-color)!important}[data-tooltip=left]:hover:after,[data-tooltip=right]:hover:after{transform:translateY(50%) scaleX(1)}[data-tooltip=right]:after,[data-tooltip=right]:before{bottom:50%;left:calc(100% + 5px)}[data-tooltip=right]:before{transform:translate(5px,50%) scale(.5)}[data-tooltip=right]:hover:before{transform:translate(5px,50%) scale(1)}[data-tooltip=right]:after{transform:translateY(50%) scaleX(0);transform-origin:right;border-width:5px 5px 5px 0;border-color:transparent var(--tooltip-background-color) transparent transparent!important}[data-tooltip=bottom]:after,[data-tooltip=bottom]:before{top:calc(100% + 5px);bottom:auto}[data-tooltip=bottom]:before{transform:translate(-50%,5px) scale(.5)}[data-tooltip=bottom]:hover:before{transform:translate(-50%,5px) scale(1)}[data-tooltip=bottom]:after{transform-origin:bottom;border-width:0 5px 5px;border-color:transparent transparent var(--tooltip-background-color)!important}.covertron:empty{display:none}.covertron[style*=background-image]{display:block}.covertron{position:relative;z-index:-101;box-shadow:inset 0 -30px 30px -30px rgba(0,0,0,.5);background-size:cover;height:60vh}.covertron video{position:absolute;top:50%;left:50%;transform:translate3d(-50%,-50%,0);z-index:1;width:auto;min-width:100%;height:auto;min-height:100%}.jumboside .jumbo{width:50%}.jumbo:not(:last-child){width:50}@media (max-width:768px){.jumboside .jumbo{width:100%!important}}.jumbotron{z-index:-1;display:block;position:relative;height:100vh;margin:0;padding:0;border-radius:0;background-color:var(--jumbotron-background-color);-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;object-fit:contain;-webkit-box-shadow:inset 0 -30px 30px -30px rgba(0,0,0,.5);-moz-box-shadow:inset 0 -30px 30px -30px rgba(0,0,0,.5);box-shadow:inset 0 -30px 30px -30px rgba(0,0,0,.5)}.jumbotron[style*=background-image]{display:block}.jumbotron img{z-index:-1;position:absolute;min-width:100%;min-height:100vh;top:50%;left:50%;transform:translate3d(-50%,-50%,0);object-fit:cover}.jumbotron h1,.jumbotron h2,.jumbotron h3,.jumbotron h4,.jumbotron h5,.jumbotron h6,.jumbotron p{z-index:2;display:block}.jumbotron iframe,.jumbotron video{position:absolute;top:0;right:0;bottom:0;left:0;width:auto;height:auto;min-width:100%;min-height:100%;margin:0!important;padding:0!important;background-color:#000;z-index:1}.card-image figcaption,.jumbotron figcaption{position:absolute;bottom:8px;left:0;font-family:var(--font);font-size:1rem;background-color:var(--card-figcaption-background-color);color:var(--card-figcaption-color);padding:.25rem .5rem;border-top-right-radius:.5rem}.breadcrumb-item,.card{position:relative}.jumbotron figcaption{bottom:0}.jumbotron:empty,figcaption:empty{display:none}.card,.card .card-footer,.card footer{display:flex}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.card{flex-direction:column;min-width:0;word-wrap:break-word;border:var(--card-border-width) var(--card-border-style) var(--card-border-color);border-radius:var(--card-border-radius);background-color:var(--card-background-color);padding:0;overflow:hidden}.card>hr{margin-right:0;margin-left:0}.card .card-body,.card .card-footer,.card .card-header{padding:.1rem .8rem 0}.card .card-header{background-color:var(--card-header-background-color);overflow:hidden;text-overflow:ellipsis;white-space:normal}.badge,.badge[data-badge]::after,.badger,.breadcrumb-dropper{white-space:nowrap}.card .card-title{margin-bottom:.1rem}.card .card-title h2,.card .card-title h3,.card .card-title h4,.card .card-title h5,.card .card-title h6{margin:0;padding:0}.card .card-header a{color:var(--card-link-color)}.card .card-header a:hover,.card .card-subtitle a:focus,.card .card-subtitle a:hover{color:var(--card-link-color-hover)}.card .card-header a:hover{text-decoration:none}.card .card-body:last-child,.card .card-footer:last-child,.card .card-header:last-child{padding-bottom:.8rem}.card .card-footer .btn,.card footer .btn,.card footer button{margin-right:0!important;margin-left:auto!important}.card .card-subtitle{margin-top:-.25rem;margin-bottom:0}.card .card-body{-webkit-line-clamp:var(--card-body-lines);-webkit-box-orient:vertical;-webkit-box-flex:1;display:-webkit-box;flex:1 1 auto;overflow:hidden}.card .card-body.no-clamp{display:block!important;-webkit-line-clamp:none!important}.card .card-image img{z-index:-1;height:12rem;-o-object-fit:cover;object-fit:cover}.card .card-image.full img{height:30rem;object-position:center}.card .card-image:first-child{padding-top:0}.card .card-image:first-child img{border-top-right-radius:var(--card-border-radius);border-top-left-radius:var(--card-border-radius);width:100%}.card .card-image:last-child img{border-bottom-right-radius:var(--card-border-radius);border-bottom-left-radius:var(--card-border-radius)}.breadcrumb{flex-wrap:wrap;background-color:transparent;padding:.75rem 1rem;list-style:none;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:var(--color-muted);content:"/"}.breadcrumb-item.active{color:var(--color-muted)}.breadcrumb-dropdown:hover .breadcrumb-dropper{display:block!important}.breadcrumb-dropper{display:none;position:absolute;top:15px;left:0;z-index:100;box-shadow:var(--box-shadow-x) var(--box-shadow-y) var(--box-shadow-spread) var(--box-shadow-spread) var(--box-shadow-color);border:var(--border-width) var(--border-style) var(--menu-dropdown-border-color);border-radius:var(--border-radius);background-color:var(--menu-dropdown-background-color);padding:.5rem 1rem;width:auto;height:auto;list-style:none}.alert,.alert .toolbar,.avatar,.avatar img,.badge,.btn .badger,.list-group-item,.tabs input.tab-control+label,[data-text],dialog p,dialog section{position:relative}.breadcrumb-dropper a{display:block;font-size:1em}.alert{border:var(--border-width) var(--border-style) transparent;border-color:var(--default-border-color);border-radius:var(--border-radius);background-color:var(--default-background-color);padding:.75em 1.25em;margin-bottom:1rem;height:auto;color:var(--default-color)}.alert .toolbar{width:100%;height:24px;font-size:14px;font-weight:700;background:rgba(0,0,0,.15)}.alert.toolbar.handle:hover{cursor:grab!important}.alert .toolbar .btn-group{position:absolute;top:0;right:0}.alert.alert-full{border-radius:0;border:0;border-bottom-width:var(--border-width);margin:0}.alert header{background-color:transparent;color:inherit}.alert h1,.alert h2,.alert h3,.alert h4,.alert h5,.alert h6{color:inherit;font-size:1em}.alert a{color:var(--default-link);font-weight:700}.alert a:hover{color:inherit;text-decoration:underline}.alert-info{border-color:var(--alert-info-border-color);background-color:var(--alert-info-background-color);color:var(--alert-info-color)}.alert-info a{color:var(--alert-info-link)}.alert-success{border-color:var(--alert-success-border-color);background-color:var(--alert-success-background-color);color:var(--alert-success-color)}.alert-success a{color:var(--alert-success-link)}.alert-warning{border-color:var(--alert-warning-border-color);background-color:var(--alert-warning-background-color);color:var(--alert-warning-color)}.alert-warning a{color:var(--alert-warning-link)}.alert-danger{border-color:var(--alert-danger-border-color);background-color:var(--alert-danger-background-color);color:var(--alert-danger-color)}.alert-danger a{color:var(--alert-danger-link)}.tabs{margin-right:auto;width:100%}[role=tabpanel]{display:none}.tabs #tab1-10:checked~.tab1-10,.tabs #tab1-11:checked~.tab1-11,.tabs #tab1-12:checked~.tab1-12,.tabs #tab1-13:checked~.tab1-13,.tabs #tab1-14:checked~.tab1-14,.tabs #tab1-15:checked~.tab1-15,.tabs #tab1-16:checked~.tab1-16,.tabs #tab1-17:checked~.tab1-17,.tabs #tab1-18:checked~.tab1-18,.tabs #tab1-19:checked~.tab1-19,.tabs #tab1-1:checked~.tab1-1,.tabs #tab1-20:checked~.tab1-20,.tabs #tab1-2:checked~.tab1-2,.tabs #tab1-3:checked~.tab1-3,.tabs #tab1-4:checked~.tab1-4,.tabs #tab1-5:checked~.tab1-5,.tabs #tab1-6:checked~.tab1-6,.tabs #tab1-7:checked~.tab1-7,.tabs #tab1-8:checked~.tab1-8,.tabs #tab1-9:checked~.tab1-9{display:block}.tabs #tab2-10:checked~.tab2-10,.tabs #tab2-11:checked~.tab2-11,.tabs #tab2-12:checked~.tab2-12,.tabs #tab2-13:checked~.tab2-13,.tabs #tab2-14:checked~.tab2-14,.tabs #tab2-15:checked~.tab2-15,.tabs #tab2-16:checked~.tab2-16,.tabs #tab2-17:checked~.tab2-17,.tabs #tab2-18:checked~.tab2-18,.tabs #tab2-19:checked~.tab2-19,.tabs #tab2-1:checked~.tab2-1,.tabs #tab2-20:checked~.tab2-20,.tabs #tab2-2:checked~.tab2-2,.tabs #tab2-3:checked~.tab2-3,.tabs #tab2-4:checked~.tab2-4,.tabs #tab2-5:checked~.tab2-5,.tabs #tab2-6:checked~.tab2-6,.tabs #tab2-7:checked~.tab2-7,.tabs #tab2-8:checked~.tab2-8,.tabs #tab2-9:checked~.tab2-9{display:block}.tabs input.tab-control+label{display:inline-block;top:1px;margin:0;font-weight:400;border:0;border-radius:var(--tab-border-radius) var(--tab-border-radius) 0 0;background-color:var(--tab-background-color);color:var(--tab-color);font-size:.95rem;padding:4px 12px}.tabs input.tab-control+label:hover{cursor:pointer;color:var(--tab-color-hover);background-color:var(--tab-background-color-hover)}.tabs input.tab-control:checked+label{border:var(--tab-border-width) var(--tab-border-style) var(--tab-border-color);border-bottom:var(--border-width) var(--border-style) var(--tab-background-color);background-color:var(--tab-background-color-active);color:var(--tab-color-active);font-weight:700;border-bottom-color:none!important}.tabs input.tab-control:checked+label:hover{background-color:var(--tab-background-color-active-hover)!important}.tabs input.tab-control~.tab{display:none;border-top:var(--border-width) var(--border-style) var(--tab-border-color);padding:12px;width:100%}.list-group{display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-item-action{width:100%;color:var(--list-group-color);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;background-color:var(--list-group-background-color-hover);color:var(--list-group-color-hover);text-decoration:none}.list-group-item-action:active{background-color:var(--list-group-background-active);color:var(--list-group-color-active)}.list-group-item{display:block;margin-bottom:0;border:var(--border-width) var(--border-style) var(--border-color);background-color:var(--list-group-background-color);padding:.75rem 1.25rem;text-decoration:none}.list-group-item:first-child{border-top-right-radius:var(--border-radius);border-top-left-radius:var(--border-radius)}.list-group-item:last-child{border-bottom-right-radius:var(--border-radius);border-bottom-left-radius:var(--border-radius)}.list-group-item.disabled,.list-group-item:disabled{background-color:var(--list-group-background-disabled);pointer-events:none;color:var(--list-group-color-disabled)}.list-group-item.active{z-index:2;border-color:var(--list-group-background-active);background-color:var(--list-group-background-active);color:var(--list-group-color)}.list-group-item+.list-group-item{border-top-width:var(--border-width)}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:var(--border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-top-right-radius:0;border-bottom-left-radius:var(--border-radius)}.list-group-horizontal .list-group-item:last-child{border-top-right-radius:var(--border-radius);border-bottom-left-radius:0}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:var(--border-width)}.list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:var(--border-width)}.avatar{display:inline-block;vertical-align:middle;margin:0;border-radius:50%;background-color:var(--border-color);width:1.6rem;height:1.6rem;color:rgba(255,255,255,.85);font-weight:300;font-size:.8rem;line-height:1.25}.avatar.xs{width:.8rem;height:.8rem;font-size:.4rem}.avatar.sm{width:1.2rem;height:1.2rem;font-size:.6rem}.avatar.lg{width:2.4rem;height:2.4rem;font-size:1.2rem}.avatar.xl{width:3.2rem;height:3.2rem;font-size:1.6rem}.avatar.xxl{width:4rem;height:4rem;font-size:1.6rem}.avatar img{z-index:1;border-radius:50%;width:100%;height:100%}.badger{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.badge-2x{font-size:.9rem!important}@media (prefers-reduced-motion:reduce){.badger{transition:none}}a.badger:focus,a.badger:hover{text-decoration:none}.badge[data-badge=""],.badger:empty{display:none}.btn .badger{top:-1px}.badge-autopublish,.badge-primary{color:#fff!important;background-color:#007bff!important}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-cancelled,.badge-secondary{color:#fff!important;background-color:#6c757d!important}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-confirmed,.badge-paid,.badge-published,.badge-success{color:#fff!important;background-color:#28a745!important}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info,.badge-pending{color:#fff!important;background-color:#17a2b8!important}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-unpublished,.badge-warning{color:#212529!important;background-color:#ffc107!important}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger,.badge-delete,.badge-overdue,.badge-unconfirmed{color:#fff!important;background-color:#dc3545!important}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529!important;background-color:#f8f9fa!important}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-archived,.badge-dark{color:#fff!important;background-color:#343a40!important}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.badge-subscriber,.badge-visitor{background-color:#ff0!important;color:#000!important}.badge-member,.badge-wholesale{background-color:#4682b4!important;color:#fff!important}.badge-client{background-color:#00ff7f!important;color:#000!important}.badge-member-silver,.badge-wholesale-silver{background-color:#a6a6a6!important;color:#000!important}.badge-member-bronze,.badge-wholesale-bronze{background-color:#a57164!important;color:#fff!important}.badge-member-gold,.badge-wholesale-gold{background-color:#c39953!important;color:#fff!important}.badge-member-platinum,.badge-wholesale-platinum{background-color:#e5e4e2!important;color:#000!important}.badge-author,.badge-contributor,.badge-editor,.badge-manager,.badge-moderator{background-color:#9400d3!important;color:#fff!important}.badge-administrator,.badge-developer{background-color:#f8d7da!important;color:#000!important}.badge:not([data-badge])::after,.badge[data-badge]::after{display:inline-block;transform:translate(-1.05rem,-.5rem);box-shadow:0 0 0 .1rem var(--box-shadow-color);border-radius:50%;background:var(--badge-background-color);background-clip:padding-box;color:var(--badge-color);content:attr(data-badge)}.badge[data-badge='']::after,.corner-ribbon:empty,dialog:not([open]){display:none}.badge.avatar::after,button.badge::after{transform:translate(50%,-50%);position:absolute}.badge[data-badge]::after{padding:.2rem .4rem;min-width:.9rem;height:1.2rem;font-size:.7rem;line-height:1.3;text-align:center}button.badge::after{top:0;right:-1rem}.badge.avatar::after{top:14.64%;right:14.64%;z-index:100}.corner-ribbon{position:absolute;top:15px;left:-70px;transform:rotate(-45deg);background:#f8f9fa;width:200px;color:#212529;font-size:.5em!important;line-height:30px;letter-spacing:1px;text-align:center}.corner-ribbon.sm{top:5px;left:-30px;line-height:20px}.corner-ribbon.lg{top:20px;left:-50px;font-size:20px!important;line-height:60px}.corner-ribbon.top-left{top:25px;left:-65px;transform:rotate(-45deg)}.corner-ribbon.small.top-left{top:15px;left:-80px;transform:rotate(-45deg)}.corner-ribbon.big.top-left{top:28px;left:-55px;transform:rotate(-45deg)}.corner-ribbon.top-right{top:25px;right:-65px;left:auto;transform:rotate(45deg)}.corner-ribbon.small.top-right{top:10px;right:-75px;left:auto;transform:rotate(45deg)}.corner-ribbon.big.top-right{top:28px;right:-55px;left:auto;transform:rotate(45deg)}.corner-ribbon.bottom-left{top:auto;bottom:25px;left:-65px;transform:rotate(45deg)}.corner-ribbon.small.bottom-left{top:auto;bottom:10px;left:-75px;transform:rotate(45deg)}.corner-ribbon.big.bottom-left{top:auto;bottom:28px;left:-55px;transform:rotate(45deg)}.corner-ribbon.bottom-right{top:auto;right:-25px;bottom:65px;left:auto;transform:rotate(-45deg)}.corner-ribbon.small.bottom-right{top:auto;right:-75px;bottom:10px;left:auto;transform:rotate(-45deg)}.corner-ribbon.big.bottom-right{top:auto;right:-55px;bottom:28px;left:auto;transform:rotate(-45deg)}.corner-ribbon.black{background-color:#333;color:#fff}.corner-ribbon.danger{background-color:var(--danger-border-color);color:var(--danger-color)}.corner-ribbon.dark{background-color:var(--dark-background-color);color:var(--dark-color)}.corner-ribbon.info{background-color:var(--info-background-color);color:var(--info-color)}.corner-ribbon.light{background-color:var(--light-background-color);color:var(--light-color)}.corner-ribbon.primary{background-color:var(--primary-background-color);color:var(--primary-color)}.corner-ribbon.secondary{background-color:var(--secondary-background-color);color:var(--secondary-color)}.corner-ribbon.success{background-color:var(--success-background-color);color:var(--success-color)}.corner-ribbon.warning{background-color:var(--warning-background-color);color:var(--warning-color)}.corner-ribbon.white{background-color:#f0f0f0;color:#555}.corner-ribbon.outline-primary{border-color:var(--primary-border-color);background-color:#fff;color:var(--primary-color)}.corner-ribbon.outline-secondary{border-color:var(--secondary-border-color);background-color:#fff;color:var(--secondary-color)}.corner-ribbon.outline-success{border-color:var(--success-border-color);background-color:#fff;color:var(--success-color)}.corner-ribbon.outline-info{border-color:var(--info-border-color);background-color:#fff;color:var(--info-color)}.corner-ribbon.outline-warning{border-color:var(--warning-border-color);background-color:#fff;color:var(--warning-color)}.corner-ribbon.outline-danger{border-color:var(--danger-border-color);background-color:#fff;color:var(--danger-color)}.corner-ribbon.outline-light{border-color:var(--light-border-color);background-color:#fff;color:var(--light-color)}.corner-ribbon.outline-dark{border-color:var(--dark-border-color);background-color:#fff;color:var(--dark-color)}.corner-ribbon .quantity{font-size:inherit;text-align:inherit}dialog{display:block;position:fixed;top:50%;right:0;left:0;transform:translate(0,-50%);margin:auto;outline:0;border:0;border-radius:var(--dialog-border-radius);background:#fff;padding:0;width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;min-width:var(--dialog-min-width);max-width:var(--dialog-max-width);height:-moz-fit-content;height:-webkit-fit-content;height:fit-content;pointer-events:auto;color:#000}dialog+.backdrop,dialog::backdrop{background-color:rgba(0,0,0,.4)}dialog[open]{-webkit-animation:dialog-show .45s cubic-bezier(.5,.61,.355,1) normal;animation:dialog-show .45s cubic-bezier(.5,.61,.355,1) normal}dialog[open]::-webkit-backdrop{-webkit-animation:dialog-backdrop-show .45s cubic-bezier(.5,.61,.355,1) normal;animation:dialog-backdrop-show .45s cubic-bezier(.5,.61,.355,1) normal}dialog[open]::backdrop{-webkit-animation:dialog-backdrop-show .45s cubic-bezier(.5,.61,.355,1) normal;animation:dialog-backdrop-show .45s cubic-bezier(.5,.61,.355,1) normal}dialog::-webkit-backdrop{z-index:1050;background-color:rgba(0,0,0,.4)}dialog::backdrop{z-index:1050}dialog header{display:flex;justify-content:space-between;align-items:flex-start;margin:0;border-bottom:var(--border-width) var(--border-style) var(--dialog-border-color);border-top-right-radius:var(--dialog-border-radius);border-top-left-radius:var(--dialog-border-radius);background-color:var(--dialog-background-color);padding:1rem;width:100%}dialog header .close{-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:.5;margin:-1rem -1rem -1rem auto;border:0;background-color:transparent;padding:1rem;color:#000;font-weight:700;font-size:calc(1.275rem + .3vw);line-height:1;text-shadow:0 1px 0 #fff}dialog header .close:focus,dialog header .close:hover{opacity:.75;box-shadow:none;color:#000;text-decoration:none}dialog header h1,dialog header h2,dialog header h3,dialog header h4,dialog header h5,dialog header h6{margin:0;padding:0}dialog p,dialog section{display:block;flex:1 1 auto;padding:1rem;overflow-y:auto}dialog footer{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;margin:0;border-top:var(--border-width) var(--border-style) var(--dialog-border-color);border-bottom-right-radius:var(--dialog-border-radius);border-bottom-left-radius:var(--dialog-border-radius);padding:.75rem}@-webkit-keyframes dialog-show{0%{transform:translateY(-25%);opacity:0}50%{opacity:1}100%{transform:translateY(-50%);opacity:1}}@keyframes dialog-show{0%{transform:translateY(-25%);opacity:0}50%{opacity:1}100%{transform:translateY(-50%);opacity:1}}@-webkit-keyframes dialog-backdrop-show{0%{opacity:0}100%{opacity:1}}@keyframes dialog-backdrop-show{0%{opacity:0}100%{opacity:1}}.overflow-y{overflow-y:auto!important}.grab{cursor:-moz-grab;cursor:-webkit-grab}.kanban-item{width:100%;background-color:var(--alert-default-background-color);color:var(--alert-default-color);border-width:var(--card-border-width) var(--card-border-style) var(--alert-default-border-color)}#overdue .kanban-item,#unconfirmed .kanban-item{background-color:var(--alert-danger-background-color);color:var(--alert-danger-color);border-color:var(--alert-danger-color)}#confirmed .kanban-item,#outstanding .kanban-item{background-color:var(--alert-warning-background-color);color:var(--alert-warning-color);border-color:var(--alert-warning-color)}#in-progress .kanban-item{background-color:var(--alert-info-background-color);color:var(--alert-info-color);border-color:var(--alert-info-color)}#complete .kanban-item,#paid .kanban-item{background-color:var(--alert-success-background-color);color:var(--alert-success-color);border-color:var(--alert-success-color)}.shake-horizontal{-webkit-animation:shake-horizontal .8s cubic-bezier(.455,.030,.515,.955) both;animation:shake-horizontal .8s cubic-bezier(.455,.030,.515,.955) both}@-webkit-keyframes shake-horizontal{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%{-webkit-transform:translateX(10px);transform:translateX(10px)}80%{-webkit-transform:translateX(8px);transform:translateX(8px)}90%{-webkit-transform:translateX(-8px);transform:translateX(-8px)}}@keyframes shake-horizontal{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%{-webkit-transform:translateX(10px);transform:translateX(10px)}80%{-webkit-transform:translateX(8px);transform:translateX(8px)}90%{-webkit-transform:translateX(-8px);transform:translateX(-8px)}}[data-text]{display:block}[data-text]::before{content:attr(data-text) ":";position:absolute;font-size:10px;top:-8px;left:-6px;text-transform:uppercase}.rounded{border-radius:50%}.sticky-header th{z-index:1;position:sticky;top:0;background-color:#e0e0e0}.flag{display:inline-flex;width:40px;height:40px;border-radius:50%}.flag img{max-height:40px;border:1px solid #ccc;border-radius:50%;object-fit:cover;object-position:center}.adverb,.qualifier{background:#c4e3f3}.passive{background:#c4ed9d}.complex{background:#e3b7e8}.hardSentence{background:#f7ecb5}.veryHardSentence{background:#e4b9b9}.alert.widget{background-color:var(--card-background-color)!important;color:var(--card-color)!important;border:1px solid var(--card-border-color)!important;box-shadow:2px 4px 12px 0 var(--shadow-color)!important}.alert.widget a{color:var(--card-link-color)!important}.alert.widget a:hover{color:var(--card-link-color-hover)!important}.widget-weather{color:#fff;border:0;box-shadow:2px 4px 12px 0 var(--shadow-color)}#current-weather{padding:15px}#main-icon{font-size:70px!important}#mainTemperature{font-size:3em;line-height:.7}#tempDescription{margin-top:10px;text-align:center}.day-weather-box{border:1px solid rgba(0,0,0,.5);background-color:rgba(0,0,0,.5);height:5em}.day-weather-box p{margin-bottom:0}.side-weather-info{padding:0 10px}.day-weather-inner-box{display:inline-flex;margin:14px auto;padding:0 10px 0 0}.forecast-main{padding:0 10px}.forecast-icon{font-size:25px!important}.widget-weather.background{background-color:rgba(0,0,0,0);background-image:url(../images/weather/weather-aurora.webp);background-repeat:no-repeat;background-position:center;background-origin:content-box;background-size:cover;background-blend-mode:darken;-webkit-transition:background-image 2s ease-in-out;transition:background-image 2s ease-in-out}.Ash{background-image:url(../images/weather/weather-ash.webp)!important}.Ash.night{background-image:url(../images/weather/weather-ash-night.webp)!important}.Clear{background-image:url(../images/weather/weather-clear.webp)!important}.Clear.night{background-image:url(../images/weather/weather-clear-night.webp)!important}.Clouds{background-image:url(../images/weather/weather-clouds.webp)!important}.Clouds.night{background-image:url(../images/weather/weather-clouds-night.webp)!important}.Dust,.Sand{background-image:url(../images/weather/weather-dust.webp)!important}.Dust.night,.Sand.night{background-image:url(../images/weather/weather-dust-night.webp)!important}.Fog,.Haze,.Mist{background-image:url(../images/weather/weather-fog.webp)!important}.Fog.night,.Haze.night,.Mist.night{background-image:url(../images/weather/weather-fog-night.webp)!important}.Rain{background-image:url(../images/weather/weather-rain.webp)!important}.Rain.night{background-image:url(../images/weather/weather-rain-night.webp)!important}.Snow{background-image:url(../images/weather/weather-snow.webp)!important}.Snow.night{background-image:url(../images/weather/weather-snow-night.webp)!important}.Squall{background-image:url(../images/weather/weather-squall.webp)!important}.Squall.night{background-image:url(../images/weather/weather-squall-night.webp)!important}.Thunderstorm{background-image:url(../images/weather/weather-thunderstorm.webp)!important}.Thunderstorm.night{background-image:url(../images/weather/weather-thunderstorm-night.webp)!important}.Tornado{background-image:url(../images/weather/weather-tornado.webp)!important}.Tornado.night{background-image:url(../images/weather/weather-tornado-night.webp)!important}.alert.blackfriday,.alert.christmas,.alert.easter,.alert.fathersday,.alert.halloween,.alert.mothersday,.alert.valentine{background-color:#fff!important;background-repeat:no-repeat!important;background-position:top right!important;background-size:contain!important}.alert.blackfriday .toolbar,.alert.christmas .toolbar,.alert.easter .toolbar,.alert.fathersday .toolbar,.alert.halloween .toolbar,.alert.mothersday .toolbar,.alert.smallbusinessday .toolbar,.alert.valentine .toolbar{background-color:transparent!important;color:#000!important}.alert.christmas .toolbar svg,.alert.easter .toolbar svg,.alert.fathersday .toobar svg,.alert.halloween .toolbar svg,.alert.mothersday .toolbar svg,.alert.valentine .toolbar svg{fill:#000!important}.alert.christmas .card,.alert.easter .card,.alert.fathersday .card,.alert.halloween .card,.alert.mothersday .card,.alert.valentine .card{color:#000!important}.alert.blackfriday .card .card-title,.alert.christmas .card .card-title,.alert.easter .card .card-title,.alert.fathersday .card .card-title,.alert.halloween .card .card-title,.alert.mothersday .card .card-title,.alert.smallbusinessday .card .card-title,.alert.valentine .card .card-title{font-weight:700!important}.alert.valentine{background-image:url(../images/sale-valentine.webp)!important;border-color:#f7b4bb!important;box-shadow:2px 4px 12px 0 #f7d7dc!important}.alert.valentine .card{border-color:#f73131!important;background-color:#f76c73!important}.alert.easter{background-image:url(../images/sale-easter.webp)!important;border-color:#8d82de!important;box-shadow:2px 4px 12px 0 #8d82de!important}.alert.easter .card{border-color:#8d82de!important;background-color:#cdb2d5!important;box-shadow:2px 4px 12px 0 #cdb2d5!important}.alert.mothersday,.alert.mothersday .card{box-shadow:2px 4px 12px 0 #fd9fff!important}.alert.mothersday{background-image:url(../images/sale-mothersday.webp)!important;border-color:#fd9fff!important}.alert.mothersday .card{border-color:#fe8c8c!important;background-color:#ffd6ff!important}.alert.fathersday{background-image:url(../images/sale-fathersday.webp)!important;border-color:#83b9df!important;box-shadow:2px 4px 12px 0 #83b9df!important}.alert.fathersday .card{border-color:#f27555!important;background-color:#f7eb7d!important;box-shadow:2px 4px 12px 0 #f27555!important}.alert.blackfriday,.alert.blackfriday .card{border:2px solid #dd1e23!important;box-shadow:2px 4px 12px 0 #dd1e23!important}.alert.blackfriday{background-color:#000!important;background-image:url(../images/sale-blackfriday.webp)!important;background-size:cover!important}.alert.blackfriday .toolbar{color:#fff!important}.alert.blackfriday .toolbar svg{fill:#fff!important}.alert.blackfriday .card{background-color:#252525!important;color:#fff!important}.alert.halloween,.alert.halloween .card{border:2px solid #000!important;box-shadow:2px 4px 12px 0 #f40!important}.alert.blackfriday .card .card-title a{color:#fff!important}.alert.halloween{background-image:url(../images/sale-halloween.webp)!important;background-position:top center!important;background-size:cover!important}.alert.halloween .card{background-color:#f40!important}.alert.smallbusinessday{background-color:#eef!important;background-image:none;border:1px solid #123048!important;box-shadow:2px 4px 12px 0 #6f8ca4!important}.alert.smallbusinessday .toolbar{color:#123048!important}.alert.smallbusinessday .toolbar svg{fill:#123048!important}.alert.smallbusinessday .card{border:2px solid #123048!important;background-color:#bfdef3!important;color:#123048!important;box-shadow:1px 4px 12px 0 #123048!important}.alert.christmas{background-image:url(../images/sale-christmas.webp)!important;background-size:cover!important;border:3px solid #b52427!important;box-shadow:2px 4px 14px 0 #126837!important}.alert.christmas .card{border:2px solid #b52427!important;background-color:#f0ab29!important;box-shadow:2px 4px 12px 0 #126837!important} +.modules-list{ +} +.modules-list li { + list-style: decimal; + +} diff --git a/core/downloads.php b/core/downloads.php index 6590e53..cd395aa 100755 --- a/core/downloads.php +++ b/core/downloads.php @@ -44,6 +44,8 @@ }else echo'No file/s to download'; function SendFileDownload($file){ + header("Content-Type: application/octet-stream"); // 1 header('Content-Disposition: attachment; filename='.basename($file)); + header("Content-Type: application/download"); // 2 readfile('media/downloads/'.$file); } diff --git a/core/email_booking.php b/core/email_booking.php index dc8fdbc..62fd082 100755 --- a/core/email_booking.php +++ b/core/email_booking.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.1.3 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -26,8 +26,10 @@ $si=$db->prepare("SELECT `code`,`title` FROM `".$prefix."content` WHERE `id`=:id"); $si->execute([':id'=>$r['rid']]); $i=$si->fetch(PDO::FETCH_ASSOC); - require'phpmailer/class.phpmailer.php'; - $mail=new PHPMailer; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $toname=$c['name']; $mail->SetFrom($config['email'],$config['business']); diff --git a/core/email_message.php b/core/email_message.php index 9776f92..9da5215 100755 --- a/core/email_message.php +++ b/core/email_message.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.13 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -37,13 +37,15 @@ $body=(isset($_POST['bod'])?$_POST['bod']:'').'
'.($user['email_signature']!=''?$user['email_signature']:$config['email_signature']).'
'; $msgbody=$body; if($to!=''){ - require'phpmailer/class.phpmailer.php'; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; if($id!=0){ $ms=$db->prepare("SELECT * FROM `".$prefix."messages` WHERE `id`=:id"); $ms->execute([':id'=>$id]); if($ms->rowCount()>0)$mr=$ms->fetch(PDO::FETCH_ASSOC); } - $mail=new PHPMailer; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $mail->isHTML(true); if($act=='reply'){ diff --git a/core/email_order.php b/core/email_order.php index c9d9ac5..d9be470 100755 --- a/core/email_order.php +++ b/core/email_order.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.17 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -107,6 +107,7 @@ $zeb=1; $s=$db->prepare("SELECT * FROM `".$prefix."orderitems` WHERE `oid`=:oid AND `status`!='delete' AND `status`!='neg' ORDER BY `status` ASC, `ti` ASC, `title` ASC"); $s->execute([':oid'=>$id]); + $msgd=$msgl=$msge=$msgc=''; while($ro=$s->fetch(PDO::FETCH_ASSOC)){ $si=$db->prepare("SELECT `id`,`code`,`title` FROM `".$prefix."content` WHERE `id`=:id"); $si->execute([':id'=>$ro['iid']]); @@ -116,25 +117,69 @@ $sd->execute([':id'=>$i['id']]); if($sd->rowCount()>0){ while($rd=$sd->fetch(PDO::FETCH_ASSOC)){ - $downloads.=''.($rd['title']!=''?$rd['title']:$rd['url']).' (Available '; - if($rd['tie']==0)$downloads.=' forever'; - if($rd['tie']==3600)$downloads.=' for 1 Hour'; - if($rd['tie']==7200)$downloads.=' for 2 Hours'; - if($rd['tie']==14400)$downloads.=' for 4 Hours'; - if($rd['tie']==28800)$downloads.=' for 8 Hours'; - if($rd['tie']==86400)$downloads.=' for 24 Hours'; - if($rd['tie']==172800)$downloads.=' for 48 Hours'; - if($rd['tie']==604800)$downloads.=' for 1 Week'; - if($rd['tie']==1209600)$downloads.=' for 2 Weeks'; - if($rd['tie']==2592000)$downloads.=' for 1 Month'; - if($rd['tie']==7776000)$downloads.=' for 3 Months'; - if($rd['tie']==15552000)$downloads.=' for 6 Months'; - if($rd['tie']==31536000)$downloads.=' for 1 Year'; - $downloads.=')
'; + $msgd.=''.($rd['title']!=''?$rd['title']:$rd['url']).' (Available '; + if($rd['tie']==0)$msgd.=' forever'; + if($rd['tie']==3600)$msgd.=' for 1 Hour'; + if($rd['tie']==7200)$msgd.=' for 2 Hours'; + if($rd['tie']==14400)$msgd.=' for 4 Hours'; + if($rd['tie']==28800)$msgd.=' for 8 Hours'; + if($rd['tie']==86400)$msgd.=' for 24 Hours'; + if($rd['tie']==172800)$msgd.=' for 48 Hours'; + if($rd['tie']==604800)$msgd.=' for 1 Week'; + if($rd['tie']==1209600)$msgd.=' for 2 Weeks'; + if($rd['tie']==2592000)$msgd.=' for 1 Month'; + if($rd['tie']==7776000)$msgd.=' for 3 Months'; + if($rd['tie']==15552000)$msgd.=' for 6 Months'; + if($rd['tie']==31536000)$msgd.=' for 1 Year'; + $msgd.=')
'; } } - $downloads.='

'; + $msgd.='

'; } + $sl=$db->prepare("SELECT `contentType`,`title`,`url`,`tie` FROM `".$prefix."choices` WHERE `contentType`='link' AND `rid`=:id"); + $sl->execute([':id'=>$roi['iid']]); + if($sl->rowCount()>0){ + while($rl=$sl->fetch(PDO::FETCH_ASSOC)){ + $msgl.='Link for '.($rd['title']!=''?$rd['title']:$rd['url']).' available'; + if($rl['tie']==0)$msgl.=' forever'; + if($rl['tie']==3600)$msgl.=' for 1 Hour'; + if($rl['tie']==7200)$msgl.=' for 2 Hours'; + if($rl['tie']==14400)$msgl.=' for 4 Hours'; + if($rl['tie']==28800)$msgl.=' for 8 Hours'; + if($rl['tie']==86400)$msgl.=' for 24 Hours'; + if($rl['tie']==172800)$msgl.=' for 48 Hours'; + if($rl['tie']==604800)$msgl.=' for 1 Week'; + if($rl['tie']==1209600)$msgl.=' for 2 Weeks'; + if($rl['tie']==2592000)$msgl.=' for 1 Month'; + if($rl['tie']==7776000)$msgl.=' for 3 Months'; + if($rl['tie']==15552000)$msgl.=' for 6 Months'; + if($rl['tie']==31536000)$msgl.=' for 1 Year'; + $msgl.='
'; + $i++; + } + } + $se=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `id`=:id"); + $se->execute([':id'=>$roi['iid']]); + if($se->rowCount()>0){ + while($re=$se->fetch(PDO::FETCH_ASSOC)){ + if($re['contentType']=='event'){ + $msge.='Link for '.$re['title'].'
'.$re['title'].'
'; + } + if($re['contentType']=='course'){ + $sct=$db->prepare("INSERT INTO `".$prefix."courseTrack` (`rid`,`uid`,`complete`,`progress`,`attempts`,`score`,`ti`) VALUES (:rid,:uid,'',0,:attempts,0,:ti)"); + $sct->execute([ + ':rid'=>$re['id'], + ':uid'=>$ru['id'], + ':attempts'=>$re['attempts'], + ':ti'=>$ti + ]); + $msgc='

To access the Course/s purchased, it is required to be logged in. You can view purchased Courses via the "Courses" in the logged in menu area.

'; + } + $i++; + } + } + + $sc=$db->prepare("SELECT * FROM `".$prefix."choices` WHERE `id`=:id"); $sc->execute([':id'=>$ro['cid']]); $ch=$sc->fetch(PDO::FETCH_ASSOC); @@ -267,7 +312,6 @@ '

'. ''. ''. - ''. ''. ''. @@ -279,8 +323,10 @@ 'win.top.document.body.innerHTML = `'.$head.$html.'`;'. ''; }else{ - require'phpmailer/class.phpmailer.php'; - $mail=new PHPMailer; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $toname=$c['name']!=''?$c['name']:$c['business']; $mail->SetFrom($config['email'],$config['business']); @@ -311,7 +357,7 @@ ],$subject); $mail->Subject=$subject; $msg=isset($config['orderEmailLayout'])&&$config['orderEmailLayout']!=''?rawurldecode($config['orderEmailLayout']):'

Hello {first},

Please find below Order {order_number} for payment.

To make a payment, refer to the Bank Details, or click the link directly below to pay via a Payment Gateway through our Website.

{order_link}


'; - $msg.=$downloads; + $msg.=$msgd.$msgl.$msge; $msg=str_replace([ '{business}', '{name}', diff --git a/core/export_accounts.php b/core/export_accounts.php new file mode 100644 index 0000000..a709dd6 --- /dev/null +++ b/core/export_accounts.php @@ -0,0 +1,94 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */ +require'db.php'; +$config=$db->query("SELECT `dateFormat` FROM `".$prefix."config` WHERE `id`='1'")->fetch(PDO::FETCH_ASSOC); +$id=isset($_POST['id'])?filter_input(INPUT_POST,'id',FILTER_SANITIZE_NUMBER_INT):0; +$act=isset($_POST['act'])?filter_input(INPUT_POST,'act',FILTER_SANITIZE_NUMBER_INT):0; +$dte=isset($_POST['dte'])?filter_input(INPUT_POST,'dte',FILTER_SANITIZE_NUMBER_INT):0; +$rnk=isset($_POST['rnk'])?filter_input(INPUT_POST,'rnk',FILTER_SANITIZE_NUMBER_INT):0; +$usr=isset($_POST['usr'])?filter_input(INPUT_POST,'usr',FILTER_SANITIZE_NUMBER_INT):0; +$nme=isset($_POST['nme'])?filter_input(INPUT_POST,'nme',FILTER_SANITIZE_NUMBER_INT):0; +$eml=isset($_POST['eml'])?filter_input(INPUT_POST,'eml',FILTER_SANITIZE_NUMBER_INT):0; +$phn=isset($_POST['phn'])?filter_input(INPUT_POST,'phn',FILTER_SANITIZE_NUMBER_INT):0; +$mob=isset($_POST['mob'])?filter_input(INPUT_POST,'mob',FILTER_SANITIZE_NUMBER_INT):0; +$url=isset($_POST['url'])?filter_input(INPUT_POST,'url',FILTER_SANITIZE_NUMBER_INT):0; +$bus=isset($_POST['bus'])?filter_input(INPUT_POST,'bus',FILTER_SANITIZE_NUMBER_INT):0; +$abn=isset($_POST['abn'])?filter_input(INPUT_POST,'abn',FILTER_SANITIZE_NUMBER_INT):0; +$adr=isset($_POST['adr'])?filter_input(INPUT_POST,'adr',FILTER_SANITIZE_NUMBER_INT):0; +$spnt=isset($_POST['spnt'])?filter_input(INPUT_POST,'spnt',FILTER_SANITIZE_NUMBER_INT):0; +$pnts=isset($_POST['pnts'])?filter_input(INPUT_POST,'pnts',FILTER_SANITIZE_NUMBER_INT):0; +$nws=isset($_POST['nws'])?filter_input(INPUT_POST,'nws',FILTER_SANITIZE_NUMBER_INT):0; +$d=isset($_POST['d'])?filter_input(INPUT_POST,'d',FILTER_SANITIZE_NUMBER_INT):0; +if($d==0)$d=','; +if($d==1)$d='|'; +if($d==2)$d=';'; +$f=isset($_POST['f'])?filter_input(INPUT_POST,'f',FILTER_SANITIZE_NUMBER_INT):0; +if($f==0){ + header('Content-Type: text/csv'); + header("Content-Transfer-Encoding: UTF-8"); + header('Content-Disposition: attachment; filename=accounts-'.time().'.csv'); + header('Pragma: no-cache'); + header("Expires: 0"); +} +$s=$db->query("SELECT * FROM `".$prefix."login` ORDER BY `username` ASC"); +$s->execute(); +$result=''; +if($f==0){ + $result.= + ($id==1?'ID':''). + ($act==1?($id==1?$d:'').'Active':''). + ($dte==1?($act==1?$d:'').'Date':''). + ($rnk==1?($dte==1?$d:'').'Rank':''). + ($usr==1?($rnk==1?$d:'').'Username':''). + ($nme==1?($usr==1?$d:'').'Name':''). + ($eml==1?($nme==1?$d:'').'Email':''). + ($phn==1?($eml==1?$d:'').'Phone':''). + ($mob==1?($phn==1?$d:'').'Mobile':''). + ($url==1?($mob==1?$d:'').'URL':''). + ($bus==1?($url==1?$d:'').'Business':''). + ($abn==1?($bus==1?$d:'').'ABN':''). + ($adr==1?($abn==1?$d:'').'Address':''). + ($spnt==1?($adr==1?$d:'').'Spent':''). + ($pnts==1?($spnt==1?$d:'').'Points':''). + ($nws==1?($pnts==1?$d:'').'Subscriber':'')."\n"; +} +while($r=$s->fetch(PDO::FETCH_ASSOC)){ + if($f==0){ + $result.= + ($id==1?$r['id']:''). + ($act==1?($id==1?$d:'').($r['active'][0]==1?'Yes':'No'):''). + ($dte==1?($act==1?$d:'').'"'.date($config['dateFormat'],$r['ti']).'"':''). + ($rnk==1?($dte==1?$d:'').$r['rank']:''). + ($usr==1?($rnk==1?$d:'').'"'.$r['username'].'"':''). + ($nme==1?($usr==1?$d:'').'"'.$r['name'].'"':''). + ($eml==1?($nme==1?$d:'').$r['email']:''). + ($phn==1?($eml==1?$d:'').$r['phone']:''). + ($mob==1?($phn==1?$d:'').$r['mobile']:''). + ($url==1?($mob==1?$d:'').$r['url']:''). + ($bus==1?($url==1?$d:'').'"'.$r['business'].'"':''). + ($abn==1?($bus==1?$d:'').$r['abn']:''). + ($adr==1?($abn==1?$d:'').'"'. + ($r['address']!=''?$r['address']:''). + ($r['suburb']!=''?', '.$r['suburb']:''). + ($r['city']!=''?', '.$r['city']:''). + ($r['state']!=''?', '.$r['state']:''). + ($r['postcode']!=0?', '.$r['postcode']:''). + ($r['country']!=''?', '.$r['country']:''). + '"':''). + ($spnt==1?($adr==1?$d:'').$r['spent']:''). + ($pnts==1?($spnt==1?$d:'').$r['points']:''). + ($nws==1?($nws==1?$d:'').($r['newsletter'][0]==1?'Yes':'No'):'')."\n"; + } + echo$result; +} diff --git a/core/forum_post.php b/core/forum_post.php index ead70eb..7196060 100755 --- a/core/forum_post.php +++ b/core/forum_post.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.13 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -105,7 +105,9 @@ function rank($txt){ ':uid'=>$uid ]); if($st=='urgent'&&$config['forumOptions'][0]==1){ - require'phpmailer/class.phpmailer.php'; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; $su=$db->prepare("SELECT `id`,`username`,`name`,`email` FROM `".$prefix."login` WHERE `email`!='' AND `rank`>599 AND `helpResponder`=1 AND `active`=1"); $su->execute(); $subject='New Ticket: '.$t; @@ -113,7 +115,7 @@ function rank($txt){ 'Title: '.$t.'
'. 'Post: '.filter_var($da,FILTER_UNSAFE_RAW).'
'. 'Ticket URL: '.URL.'forum?cid='.$cid.'&tid='.$tid.'&pid='.$id.'
'; - $mail=new PHPMailer; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isHTML(true); $mail->SetFrom($config['email'],$config['business']); $mail->Subject=$subject; diff --git a/core/forum_reply.php b/core/forum_reply.php index ab90b01..376ac46 100755 --- a/core/forum_reply.php +++ b/core/forum_reply.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.13 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -128,7 +128,9 @@ function rank($txt){ $st->execute([':id'=>$pid]); $rt=$st->fetch(PDO::FETCH_ASSOC); if($h==1&&$config['forumOptions'][0]==1){ - require'phpmailer/class.phpmailer.php'; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; $gsu=$db->prepare("SELECT `uid`,`pid` FROM `".$prefix."forumPosts` WHERE `pid`=:pid AND `uid`!=:uid ORDER BY `ti` DESC LIMIT 1"); $gsu->execute([ ':pid'=>$pid, @@ -154,7 +156,7 @@ function rank($txt){ 'Title: '.$rt['title'].'
'. 'Reply: '.filter_var($da,FILTER_UNSAFE_RAW).'
'. 'URL: '.URL.'forum?cid='.$cid.'&tid='.$tid.'&pid='.$pid.''; - $mail=new PHPMailer; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isHTML(true); $mail->SetFrom($config['email'],$config['business']); $mail->Subject=$subject; diff --git a/core/images/flags/localhost.png b/core/images/flags/localhost.png index 339fae56a25bb0d813e932050fee8100d5f84824..da4de8cb5f6565f444bf84f427045ab8a5f59f1b 100755 GIT binary patch delta 13880 zcmV-8Hpj{4p#iOJkQsjl0000whB0XX00D$)LqkwWLqi~Na&Km7Y-IodD3N`UJxIeq z9K~N#r6Lsv3x42`p*mR*6>-!m6rn<>6nNgNw7S4z7YA z_yOYRi_@%32;bRa{vGf6951U69E94oEQKAAOJ~3K~#9!OuWmJWy_M@^>g=# zSZnXhtUBkO`)tu_b&HlsG!GMoKumxMpdkzxGhoJq34e=b7$(fX&`8z>4M@Vk=m)3; z>X+2Ft#$i$>)yVv^SI|!Rc7wJ*NSj=e+IF#&P}tj+EtdhbM1(5_s_rY^N@e-7yqkt z-^uI{i4c%NW{^3E97OB{HxdV&%me}?K@+V?CWJ7*64VrTN0{FRkeQe@G79K|)Du|> z(H69=&=zP7TEmuwx}0!?MDPGa$rRW&?C~A`_>OUT3*$=q4NFIm<99=#WEyBCe|14? zB~i+9M$h+1I}xRV6{J^OF8(gq@+ zkm;yF5`-ryiHIN~AW+N*4**n^e~iGa5I+C?vT=xTYL#6K1O(y!?v5>TZoDdL1yRKV z3?m~Mwjj2mdc_%t1j2xv&qFFI0$LC$w6(DhkXlHTY84mdgI5ncZXI13<+O4cgL-Q0 zDo8D8D@0YK7U+W(;E{8KaLf#;kOAOWD4B^wLL|?(j)=0f!XBMKxONAGe`J3C;W^JY zN~!gPY9X_LCz&83v5PFiKt7wkIN-QjCa!DlBW|wslg1m#>JRmO}J_WRM8a z1rdWV#Po<7Vc(Kmm8KQZ!oGE~R!l2a8v$TSJ2iSAKqK}QyY09&Qs-$?6qO(nO4GUF zS{Or-gryXMN@_#WIIm~6f6ZyN(NjQ#cE6%kF;TAJEayfqimt}k1UzY;?BR$hRSi+6 zN1_O^4~i|A1$*y^CMm*gI4VLM=g`dX;iMcHM3fYzl-AH8WEiPVMgWGU5)!Bsh8v*7 z*brF|*(lZMyI=-=o4+iv_c=>Zd^j44h_I{+{T7fjy{SNEKn9ACe<8#WvK z8IVL#+TBXrHV{SDfiDf+&y?s0iH1@&89u-h5FlwqC|a z6)khE$|h{%id5tI`NqTjJ@5RPwFtM%jk+5BniLWGK3JE=ws(@8M^%)JneJjF=e6+Z zn;lS!iQ-l`-&G74;zS5gkQ9n_`nVA#$V~3;S1ylFcoS(^_HQc0v;&={ty4 z2pBzpxfy~Xe^JRUs0bwm&BBn1wRINq5$H*h3b$U-qiQh0ve zNEP-DqK$p;B*t|NQk82D1SJ(}HTK)U)EHv`aOpwnf2`BRbQV9~oJeS8MHJAAq_B^I z>^5^8M)WIHRz!4$eFjMY zF_yaptCbM&BDA$~J}*3G;@7}OAX}&R;PrauauIIVXH*nY7(GblX7tes6m2Up1VgAr z*fL3he?cHR5n@&V@SY6YteYlS_7RvW2-8nkM2 zJzAmEMq1(}@DB=lEl7997ag;LSdgJeF~mV_qOZuHVwB>D8QF#PRCs)Po@=Rw5EP9G zf51{@qJ~;nmIWz-7(@zPjAb;66)qw40boQHw#!bHdr~@{8@ESCDP&H>2C$qO+jT?G zS!+ZQF*FTaNJ-QZGLV3RA;3}_TAYPB&^*t(;Vh*jFUvK@7jA&gyUe|zQr{)`)(&I=Sp*2XAF)9Pqf^dCJ`|Swg|LP;gRP>OJlsF<{QQhr;d&jo6vlvMUAXws%eZpe zcCr<;7`r=0Lq_8Jpq(rCb-}AbD|k!Xggug&z>f?;?;7=WB3BsiIwFFVS$~m25og~v z$RuN?co9Pc%oO){-#IVEDCv%fe@=KB0mD&}QY-hb8zF+N#`YN0AIdOahTWnH_#QR53CIDS_`v z(E@6y7-XG@D+{F1pPj`7fAiUJX{}Hcv&4!}Rgt2z=u6UdP_$yzD3sZ`TgCH+Q0RM7 zbR`qU4(oZP_t_JeDxpfXLZE~vRg^KDN~5GPn{C1INdwh_iI4%3K@lZO&>OH;Y;kHR z{W^%8$k1IO6sbD9cw+Wiq7ZYl^C-8dQc4OLIjN9T7)k6M8G*TAf0AT{dZ+mAG>nIb z6R`&>hNaSTro2dDplB^@`_lm;1<|9XMAFtmgpjTi5(ANm<~-e&6&pgqsHKu65uK^4 zRmG}-2$6EMpF1cNDeNObL2V&i839OPX_elC>*g%Wf@e}xNt8v6A+VlLobK;<+;7l3 z-aCEkNIek=CIv~Ge??ki0+kW$ny?sAmC}^$lAuOu!tNchBl{p^6_PP2qAU}o;Q?H6BR-tsT5hrv2(s# zxZHLk6_vun`JTt?4G94k)}>)qIG^uvCYUKGu@8>70}qrHB9H-%88N#%r5TxySfyGZ zx-)7LCTOXw)wn%vlXx{jXhaWEX8)52X)nEyVmbM-RG}1GCL%d{0h}4S&jTsSrk%Dd zm?fnNTimb$f3<**ue^TX_1$a2CuMn>WrDb3I3bXqiwR zrJ2zOlu`}J7uY_#TNQymh;6>%7Qw!ECV(Pzpk z^*wdM28$L{8tR22cI5pD8FM%%ujm-8T1iP<70tjhXr+*?u$IE(*l8HUlU5eu;KId? zQ#GV0cS|KYy!qk{=XK?LI&tY8t%i?5TNYGa8smkVz~)Zg0_z1^mFs0kPVGHu84QHP ze@yUFP)%AhMw{#arl==vHTLV^Y45ak#rIjoa~$83llvP9X-cW3O?q4sO(PR51x=6< zI7#{xSEMOof>ot16={N*V6|eVjLYD(R&+mMT`&*!d_pWyEtAj5!i$b2QZZ?W6x140 zbQZ)kYaSl43|*$y4Rs^Of^?;l3^m?>z4VxGcVgghG>BIsdU92XccHie=8N! zL?tN#Mx}&MOekg)6ZSC>>4Xo88j^KV^fFNg6pGf_C;=HtDFxF>0M;#O9-K;JCAn># z7Enp7!3Xz^%c@vga5~qXl&CB$oNVFr@QUaCHd)#2hNU4^W)o-ySGaq)=QakdDz|MT zT4RJ`YsGXzb#9PL5`AE`kOJ;gf6Ox#qzU6J$S!CTvKmzl%(?gtM&dEaOGFTxsEUw- zTGGjsL{QeX%}wy2EoI8DFDeQU$Hqv&aK~ddlCe9YiU6(Z)B{ooGpZOx1?$1mgy+Y1 zvy^LPDQ6-k4V|K#PYe6aDO%7{2o=t!6Pkuxol_KA3au2dK_h90+W6tpe|TOOHh(6E zlEWy{xLpP^5|POWyng+P{pO4<(AsFNa`Qo}g>dcG7 z(J;~zb)6fL#{(VE)d_Scf8(-G?0#AZ23ZQrQa}X9s9{J3=5o78gs%Qu!l2D zk|yApR0$*#Ly-)We`Gb`uYKzkU-*qby9Kr-Uw`!x*Xtu$X8Mtv14@&IR3RO#D(6<| zl5CRHD$oQk3TCJ(U0!r=1rKs}6oYh91g*jda2%_OHi#N{al9s4h1diuN*;ZlM4;|$ zBam`1>JzUL0_EX#Bf8<+Ah#rTNEgH*lxa#xMJW>=kHEd-e|<1+gJQ=1_Qv}9#By3` zwGbLecUnEsOwfLtZ#IOcQ;N+l@7*XOg}M|YJit z@Qqg=kl%Xd`q`BaA5PqzUURv2+TAOHHVHipeDX>uLa9QnMyMd^thHfQSuiTIf45lEsHLFkG;M?!r`33u&PT5v zC=n=^ip&Gl0zVm2gx-R(C|xJLvd4^0#HM`R{a~|o z3My66G)5oT(V&c_kef1epk=ybkSRw*&R%5?CTaye5}%jX*=Mh!OdLgvhLCT4vT(Mb=8JLM~J2+n1?$f8N|VTj9D5B4+AVpYK7=C<+G^onEc2 z&n8cduAo*(bxSH#a z%t&0?jG{0>7h|-}9Gcd-u5^wJC}sOTtOeGsHusf8PeV7sgGY&yLn_!DfSc392NwThjZ4pd!Es z_IEeDooM%shliEz%?;Ezw-pv4*! z6`C5U$~NH4!niqk_4$E)@=D90EOwv1sA0;kLaBvaf+$n_ZYs1^@g>n!7>lrLe_}Qz z3CHL@Yv(w6kLjApqmoUwIzzZV?wr8IrMm5MfHFwJY`#&ZHIi-HkP%2% zw%Z_gA@=EztTH*OI;A<>W*WIkP;EB1v4F_T^Wy}RWLcDAFlT@s7LT)7P={1B|B z!(;l@d`b)H$@Althr1JRx9il=Yoq&k-$Z&&*ef=rTQ#s^Gp$;ooSMDZe?pLOH1c3g zh2@mwaH1>3f^Wfo3zlsPN>wW2P`1P7D*+z#eIsrw?f!(Um3|$pIu|9E3G*a{ecM?? z(K2-btCbJF`M`d1wz456oX?H>S10c73Q`2WPDkbK)~7+>=J;;-&S9)5lhQ^oF(@|a zjAGox(PD%ZhCvp=2^Oo2eh)`GfBQz1pxrHmIj2{Z zDnb`$xnFtx;Tc=OV^CGuUFbPg&2hQWuaG0BqXobdQ>Ca*8Mr8zU{>){uq(JhR%J*- zWMS2vQNXLx4nI~CVMpip%d7#S1?hc~nan;Ug6RcL$MX31)5Zsq#3|mz@{L?{GJ(^Os3cOq-xUYR18bZ?)i4vrz9(Z#8LEg zT6ZKGC55hndndzK&nL!~ynXW)YZY57X_Eon_KoFS81A&9?6(`|wj#(RF>jsl*`#S{ z)CSoPleNz1HkoDDs?7fanh7J7vKFFE7Q2`+LTD&UQQUHNf9%DmDs)LM64RKsP74qM zTOafUF*%BM5&|I!7Q}$tw)2&T2cDibqz7FFkwRgjt9Tg=&}l4j6G|!eenS+{B6C4= zVu^Y3^Sx&`7pS(-YDKg2Jc3&!)f)SC5JQ2W)g)tZ_v(RBoTs;sm@23BOn7j;T=6a} zZDl=I)~}vef4^Rd(pk@yP^c)?rVFL-9XCNSOr09j;AUEA1>DBu;8anYp9vE*CrM+) zNJ~s@GT5d_n=PgvJx47@7RPN;9mRxECUTh^l!?{@t=sBvGACPhxIXzc}SEC=4cd z7wV+g^jvAB`~3b=jC8>w<}>;{B;kimU8dmoUNABNLqX;)%S$J#GjFOKqXv4MhRK() zf0R2Oh`a&(fl;GVp?zvKMjiT3IQr4v#qV&v|W4~39| z_atJ1kI1QE%h6y_%VdwM;DaN@GQG0L%*SL@=Lw`t)@vkKe^J2|#^F_yqS!GLV-a{LIcC3-2%*y`Ig^4+ z)Ab89lZYc41l4?x);L@mLz9+zJRqEXVbdK#*aMbxL35IYsgo*6Nm7I5)xx=*d3^iK z5C}`mf+0e!ibWFcboXgz9Wi~lZE~X;;~=XCQaB9IhDOjM$m39jDe03^R}oYXf4JFz z3fhD?7Cti%CRr$Y00Eudv&xKsNdg)k5T5L2EC)?74$gMyti9c*yqm`$&wQW5?Wjqn z9{r5+Gn0Una@3HQak9DUIjuLUGeRWakDN zxubDN#ZyyCS5%W?2N!l2?!xDDSsp1XD5)k)deJg;kk4Mo7+aq+?B*C~GEH zNt!_~I@dyuT1+rd;;1cOfBx@utRR8P9B0*(c`%L?Tg2l1Ae!b2Wj52i9=D;9i}6 zb-D;z5?OwxE{ILHpUEWs^gxN8v(ZIJ)ngLONdt`|dV5YEaRF^ge<@1JlzDBLt{THg zg$T!wfxSp*Dil5R3lUnGpTWY>m>NiAQp09?k|YwGBQg>~4(fjll)3SmNqLW=V4{cV zO@ANSBKoDko`(lm4)^zQ64eY{6^(!~h?|nz?C{N}ESx_5zQk1P?q9F;&DpLS+9r)s zuM5;URu?_E&jn-3f4-ha!HzhdK`5e7jebONEyi#^&d;aOrvf=9;zSOc!;!wejFvA`Mv6@HS{3Taf8h1p07f7~;5NJ2)7_aq zI(O$bQ{-AH=Y|-#J6w}?YDjL3%^BOYk!DOy#&SO0oOho_Y%de@tIcj*Q)enVa=#n{ zL*5UU;yyPt6C`HA4ofhntusUH*Fc+s22FJ`v`i;E$Q-30S&cadnbSs!8PeytG}ysH z&JA#xbo={ue_P@}u1A@WNjjD^{gP6aJUUyBd^;%z5#EO#a-fETiGDAzyr8lsGg_9Q z-W5a}aqYMdmV4vW7D_2>&o@dKNw8hFNqO8leJkYQg!kux-B*qgMq(s2XR%GdC63`A zozEDDZRu#fsu}~IsECP%_Dy)+W}{{#ew}CtVmc<5e}Z(_pK?OvBDACTkhBAd9mw63 zwF%J^>2t)HBD6jY4ae$D@#&b!7o5~2v15&AeaR`WQ;OJ;+YjHv@q;hjCNG8lNK2CWZ$NxQ2FOxHi^ujHJ>cVgS(I;5>kRM#$@d-Wd6h;656vIhGK~!*mSNNrG-SZ3IJoB&? zf4+F*$advh-@2O=O)CH5r;mK&qYpr*YqKb9W7e5wNBxpSY+8YTVrk9q${DvZE==5tM_BIK^RrEV*a02q zRUXG6>Cs#L=yC9?fA}MwdZIR`gTvwf`p%Vdr|4O6Q~vOijX!z!hQINbzR7nVKjyJG zKmWxUt%0tUKl<^7Z{F{`+iz%D_}72ooBZAX=coMJzj)7IetjYjU#}cfI2m#{e-`I~ zay#xe$*DJ*B%{1Uh$8>|2Y>c{NAj>Wewn^r`jYo$2FZye+$a8jairw#ynQ45>OcON z?|y%9d+Xf382Fpczws9r{`3Fvml&4|5=l^yDCn3vJYx_q9d-qlHup+)+ECu&Lf9vd@D*mbA?{?xUe=uGKe|6TGgio)X|K|VwF1Jil9MPCU)CuZYC?}v5&#FpQ$+i$zT5qlu-N@>;py!n?uiF2<&s1 zif%9@>CCaXQH1^I2Ma&*H6gCNm+`|6%D}&joVoFN*iXNN#Lq7L-QWE&e?NXV=y9cI zu;;`kzy0kif9V_F=U@KH1OL(oXT}K9chV~o<4Ae)z0@IxPa0c}`VN)!Is$3Nub%QMKpbpz%V7cLzg)BNT(9fm`Ml8SjlJLoP*HFUluA@h4iD&2+A zmE8>=1xBHd!tefzC%*H;@A4o0TR+FcY0~Mb@?N}hNld1M?Q@C`kz;sUh4Qi)9L@bp zgyj1oen84&N8T5Ae}zx3gYSL(mXANX@;l%Af~^n6c4gadcptbYV}OU^nf%e8zu~vP z^Fto)@Aw~n?N4}oTlw&Vh5z*5`FVcjTMIANdpSnG#B@SlnFfKhX%>i7#ADL1K5Lj0 z1TWV?8A4&}&OiD7j|tfc-Eg_gTPN^&L5%L)-M!*@f0~^;f5Kvo!3}YxhQS^a1*sD{ z`w36QUFk#dC=4$|uOJKI!JDn}5C72*_>cd+U*x_ulE7uM)p8J@BNNl2t{(CWW)Cx4-btj!Sk*2_Nx5OfA9Z@|KQ*KWh^^Iom9gQ)*$m3 zs3jTlav1?AD)Seq;3jyPuMh71c>QIaNrgYZ?EJ>}E^OQ2cDu6OHg4A|+x40KcBSuE z_WeTd7sj{{{*3d);ELAd?t>HeUp?b;C3R!S#()2RewXjR-6m=>MeXQpWiE2+mmC72 zpE?Lzv- z?fQiG8!E~5a-m-~%mu&Q@Y@ybJ9)eEPzxX4t$gKNY0){?T=ydiDM z2x4~T7GuO*A zx2Gp=&(Ft(%n#M~8+(6dk4HL>jChCG6^;ebwo~r|XD-%lT>0C7?+^Kn?|i~%UHGkU z|AasM-t#oH5wrh!c^*%)Ghs_VjA~QrK!7(}=YRk9pU<0$Nj$_Hkv5ovOy0&pt(BQt95W+}Xkhr`LRNe#Pr$<)gcMT7ry?CP|f! z_>HDJt8OeM_|4z@4!1su)t9vmO~R5iW+p(0n7v8ypXt)`XM!OPZsg@ue)sXpul?!g zeEht#UoQA{V|%(XE;q()BesogyU_QIe^Y6c#klP|m&@~{_oZNUfil?kE3KYMy`gK+ z6p9#@#{cx|f5zYct?yG$E42#Wd-EX=uN%t(f8*c$ISMg1WP|L7K`jnn4KwV2<2!$h z=M9&QlzHt(=Iw}(9dhu|had9ePkzL{56FA=ZRe|B{pj%i!eW)rzIe;^^2Ayff8IU* zl&A6z(Mqdru1h8%8<9rhZ2JW%J9WKhZ7252jmQ(f{+s`tzxnU~GVQd?Xt$%GCg)XD zFS14oCHb-ejF`wIU(k*iTPT0<`CI~nb3l-I9c z^XBPuM&5XOdIptA^Bk$~;qHOYKl_BQe&ZXwI=|wJ&wt8CU;R4IkB_YDe+iM9If&WY zEXBC(S9(G@2@j`*?w#AH{KNn45BMv8?dSOV&wm|#C{vO?94!9y%=O(yxj!Ml|LLD5 zFC1qb0pjLQ{&zR@4AjO&H*IJoCb+?@S+Lmm3Ivpruq z*9U&`qaU!}2H*JF&vB~vfAa>0fG8 zlk*RL@&&*1?wP!HV!IKSjd;G0*PXm>_|uJX-SFp~hw=b7U~{}X-aDUt{3&1k@Eha^ z9^by>;o-wMHzq_wRwKCGu2^eWG2Xs?$KBoibdQvU-lsRX*7ZQ6e+y^@ZG=@Q^EI{*TInO{ zJ&`f^+I_NUp97)C1)1`@Klx6|p?)aB?|pvZZ~xiHbG+?#BX2w0I&ry?mn(VQ$jc3X zzA>&laUDF^9W5HM2R;%;vhN$$=L@Z#SnB`Z*tzV;kz8l^i^zz)RCZPIHk=tr9z(JP z0|xBnyn`RWfAC9qsTc9eOF;_(TIfNv)JDK8gz=2VY_gl|OI2l6-Xh{?aiT8d3^gi% z8=~2)j5u*3;++5gQa$R^Fw^&Yr8fY(T}R_9o-IG2D)q=)Sgp)HK5TGCVQQ=O6WVr3 z2$9m&gdyUcV?4}+N$(FuSrANMP7^83?B^YCZ*NrGf8AJSnQ4~|g)P`0wk+3A5R)xp zCZFJpFikyo_iuUfo@%V)xd7*F;m3#6HF6!jJSR# z^*SN3e;yiBNQ#MOxnPo+NFbTWH1~*!+Qv0e|48Eg z{)W0;;H&1OBQUulAeojr^areWl+_~F@N^SCe-NM+%@=BSpQ=}LoZZ>#vm^o#$XjENoL{BAEtz`|-YVbVI%+tWTcQ@yfxn!VnW+SRi zf7D^{6vpBTN7F25+a*oC%oS$XJUlQ@GrR4MPhWh-dijEFzvKGbKFs0T8jYq6Qj6;sVYCI+h-~HdWe{45BHv3KlFkk-fZ{!-94Z{lL4MTfFi3y2g9QFdZ%ST z%U3K~M_~_x9a z6lbk{^fYJ6QG>4*3a7Sel*Kr0k{Q)=?YBLzuU`?y1j%I*wqAzapLa7xCbjDZA%u}I z=_>JKh==?k(%5Np$I3J^O^<|OVi@)qDVWoYuWCO1*=J1M0dWPc zswk3Ux4GfX^`F`I_lQJx+XyBg0^RSEz-d7o1 z@UT&ilq5ok*bu2^p*4;&S;|c2VHAp>;4#Ee77B$)5lqavHKwB=g`)5@O~Vu>s-j}G zdZuOiZp&Twj@4>O~>p7n%jT=^MA(}=nwDc2g~3Z ztTBus;)7>6>`AF-3R^^`+$4=4@zie4EcKIiAf<^R!<+@Uf4t@H@fK@6tEVq`vU*9= zKBXus`e8%Y-Ew>T8ee!8O+{7Kl;x75tnhAuHI}zGU$fcXp$2ZNe=h^TV{lZiW^vV0 zmRDNei;)oSn5T(po^kTHC5qa%2vA$kv$Ca_1QXO@%d9R~6B9P7yd}n{BBi9|$1JHh z-S!hOP7_axDnp7A(=_5s$Kf#Z=H@j<63fLErLQ0bcHINJ?HzIIa!jfKO|71Ws;qc* z{WZJo+mj3lQS!C(e-)p+e90URv~9&ScSs7EYA5eiv4u?I&a7N>who>ZH!`ugzh-m) zT3KCn%WD0cMSI0B|LNbD#tpBozh=A9t^OE_Mid!hP_dmc9-9^O&bLTPjN=2F?YG3K z$7INwZeIcO;=g_+kW}{+g{5z>QIIJi^Q`vcjNUMFJV%&Oe+-{<>L*u*qB$8NyZx53 zEU3zcah%w9JBD#jRTi{Ojgf*F2DmTJJ1X>5<> zrzF}`6FoFbe>%Mv0h84w+5*YH_2qy3x0s`UG4s$(6w<6^ZlaP(Q%u;Pj>nX32qwF$ z3>NQ7UOf8*@5__dA%uZ(JP^W233fyiCnoEd45x{T<|JppF!SwqU+Hmo zwdQg6e?YV$D*oSS&Ec zvfm%{=T8%y_X?9!!*QPgd|6{$O-zA#?oT9bbD73W%(7_xI}JV^NRgOjP3; zG2hF8T!z$-eN6eqzshm(omC8)6OS%jNyjgA+`Qv4hv+Rgr!5J>>S~QImz4EWs^$uO ze@k61DV*1Phd@8>8HWwSp<~xQ(j9g=Z*!U~$q#Nn$S!i;T(X9Yyf<9kq>)o2jwSubC(yn0U6t|-ejWqF13B_Ym? z5ZCfy3dR{q~+=-0O|`eAKy^5CsqXP*TuiZ^9Ut zyNn^WXgbPO*M}fB#wi{at_h`|F|F?=Lbh6~33B zfA;nJ{>AIaAz>CX#){}tU?KcBxoB(LY6*VFG4hIxM{_&^&`B*>S^zZPu7dlZojT@DmZ%HM7e~+IhDEgDj;(OumQWEb=#lD|w z;9LFPntlTEx8;BR@jb@B2Iy}={^O_c&(Zht?}MM$?>ovr#qu{7nOQf1-0G#*-n#YPN1uI- zGU{l{->~h^}onk`psJY zGNt$RKeNWGq4z&7kpw4AIU{4aCNkcY0SY=RXK|!jvofcg#hGb}mU+mg+=P>qF;ZA> z%I$xpKXdnw%>9q@7TWk9~F4={^LqP1kSw>Z#qxFK;<_q!Gx|y|wpjFkCf0 z7w>)C7$Q34sMS8fR6uE4;WLv3lS_-DC!T-xWYXAX4QqjUt6|S0uT-%s$ zFEE^7CAV@%i}Ut!^{|ow-DXQ;bL#-dI}JO_cstKsy>xP#&B_C7*D8JbIqpy%RW(yx zdrZMqiMPZKLhvYi#sKi%L$1&R&61C_FBK45Rn={(VAXB4d5!z_#WM~F?zS{3z2|>i zeI7+@1xgx(;on?~+UtC%DcIGtf;ym)`OR!VN`Ie z-rCA;+#^;#kx;3`B?=32^GNzyI+XVwTsUQieeGnLmJEA5xsMq5)S{OjI6<~=@ixaz zJr*dNG&SVeXuR{?R`;rd1W{|RvVQJP&0l+s#tHf3bZ!(c$v%Da*W1M@%aYdJy*LG# zHdRPfaV1OCVdn)ft`ord_~?I0VZ{2cL724zlC=()ZABjU&saB6L*`T@hP!wq?fQ^4ntfY4vRq86O z-P?kVoD1bN_@$TqV1NOOWV;tYA7q#ub{;Nm8o9(3p4~iYQ7hSKOA2xo^`3G4!#asJ zeX7D+XC1FvL8fkKW~gtVB*3J15n87MK*fym%2PFP)tta2q>`!DujJN2&Othdq;HSy z%zfiiQ%~*8frqE%ZBayMKBRz*8$BEuhb!v*f7o=tPLpzs$B}wQ2zVC z2m|P#86Cc)JYX*MH=x!Ij6w65lUV>#v$g2 zU&2fSI^p+Au)5ft-Gsu6jW3X#QWe7955PB3X3oVv`r`;^~ zb}?D2$hLc_9Vw5Y6rR*CYU2>FawL#j&4iV{P|sDZW#+@(LaTr+9HBlz)dE~-5h=%{I15#W0H*XpdocfjnFcrp%hZnCWerGaLaT?w1>DwI z6F7fQiBVBx1w<{-7JYP~IoK>fHaL(081Rgd9za7hG#qwh^oFXMPwD}hN3lRv5D}?` z@92UD@Jv7w1jqNI&FMjOHILZmh4XNS73Ds7Yz%K15(29eCrMi&B9|Je9-w^0U~A!EAUEFGzKupw~Mau3y6OR zkZQmw(g{G=#w3X8!;{9N_Rv#NoJuJ~%n^kwc-mReMm&ozpqR>oCb=QXKC;Z^1wEjy z1hcnH#lvi|dP;l=Vo`PQI~XjRx&aYi8YN)j2oS5PRFD)wMgs8>k$FJ7|*T2$sz=`5Lq&_1jOTu>F*LpoHF#8vs*0_QPUH>eKT}Z z?ct74Fc^A-m6Mqz6Ahe4$t+!tRB%I@U4u*PHG)YplQ%-9Mix{rJZk{>8!FW!mH#%N z?>3)(H`LlE)2ssX7BHa?_DDIK$N_l+gD-3 z0*?-@P{ft-T)dKDGU-u>Q@4K|_-|Yze=U6@oXcsC~bq>5(_gg=w9FicZBGqzK`X7NQC(JA#~(mB5pEclPSwbVVU@VUSf^zuy|VabN5T$)N?z9{4*k4;lhS@<}?58^|DQ~G}>7r-80o zGl9y455keRlENDnmLGrTUju#OaR2196>&Dumpf_Zj^dbi!Fbdn%}_f7e1ed1F=wx0(B#MpOsmLiKoigy#SP8bdLpHtpUAcr&q-;4$y#~1TeFz1;WkEP zQWgj4h{6}|(&A`Z6Oa$2DAp@pq*Ik3(KZ0$?hI5^wG)u&1Q?-cI2qhrSD@)M82=)~ zy9+^x7upJ}{X{ce6*WzQH*ukk1H?y#EON!GKk33*>*s$6Fbaj1+LS(eHb*H#Z9h8Ee)KW&gr;W7TtR@8mJ19N)vJGrUm%O8ai9(hR-A}GXgP!@UBV(?{aMUE#38^Eq ziB>Tv`!uL^D9akj45M`X8(&P&jf8^}Q`hQpwyjE<&WkJNk)TiHAdmJ?Cc%@)xs%Nz zb;3g#;XHp*`~~rw5%4WycnG-WZ<^5vdO;chRU=pci8!y&;kZcm=Jx=5gekzsgX6hr z6qijhIi)mE5v4C_n_?s+KbG;Jox%g>-U3Qr^W_U*fQSTza36fW?PnSb)=u)ER+n#Z z`7M>eOG4PGsV#&AwVx0@k6a}RHJ3)AAfe&h1zdk3cj*7wlwBOqLNMLb5w8^x7>HFF zE=pSjv_t%63kYFJSUCNYH^BHO`VDd73!OXP?G1?UI2wZGl%SzAfN2z|26Kpr#!Cij zu?DQ9_16{MW>IRCfZ< z1ekvq_l(5KKf?l%%@ju}_!0s$PnMB4E}Qpc&5!nWfV4zZl2Kc=NFG0d11TS1b&ams zGLjTuOI3eB7o}oYML;`TeXeMu@7cmxQ1IuQM;%ceT4IQNNMgBVI9BI!& zO*D+3H-0lSv;uH+U5!eIWZwf`03)u#(y4y{UUuY!hGt;8Od)ThWK7%09^j^0D0|8& z%Y@;l7e#A(k`$!$R$Kgp<}}R?;(1-+=QgN!7T2frLcsDQ019YFs}QyRl>+zPIETgr&EEm z;YAMjrLn(@fX4JRuF?=07k!@>qIGGn2;Sny1G8xCPhD@ZP_j-D_l-V!+F0ls%ThWJ z2d3BQali!GFcFLhU6|ozB>e&RczAy-v?pYBrUslWBM5iUZr6^oIGDAoqDE3u%b+3f zbGHO%k#W$VF7GOTpgkzfQ?MKwEjo7v{11RY&WQykLQ_ynp0#168OW52O&WtC#>*iG zI4K_fXfy|~!Uhk7IwyvOBi`H>e+^O{aUjhgM(t4Hh1O`Hedvg+NdU=1wbOsm7)xkw zY92Z#EE)h`^q!-gdTx+5Mh2BMFP)4f-6tN@i@Y*DyQpQfImo-lx8<$D0-fYMX&};? z8Ly|oEad_=OE)7Sa4&H^yoM)Nm?ba~^ti7H#3-Gr(X}Gg@iOCg3r# zI}`~j4=7buP?vo~yx1haH>ZUErJDcrQc5$$FXc}-zx zT_TLgMKZ}H^YAIF{0Ic7L}gHNlLyUTx>k{g4TsUdg-M8fzXPjMBd8Q;^mQ3pMEAnleKm|T7ad!LSl zkAP!ba@TGkRYGi2L7I|?fM%_Sk83b6W2&D|n3@uO15#pd`H+Qe(s8UJql1zvz>-A1 zAYPs^K+aNE0|>ucdS;+8@$|nQSLcn+j z6m&GlD=MZp$IL$bbrd#tb$o|ui|Bc2I`zsofh^jt#I3E;0Jg+?sR|7swIROXcyyp9 zN^NV;R(3{a)zzY=?M&KT#uhIGnvyvpW+BOg>0yD(`Yu9FJ7lJ`Yfk~!$x<==3z&p1 zw7r2Q?!9new9Zz+tBlgePF?0U6H} zHNtAZU*Khd_(b;jE$skE+T#uAN?J&4vk=P(>(E|pwW|Qpn;p|;F`fWxZO6RHe4RKj?fiJ znNVh)Ri26tnJ~z4*3=Iw{7(D0_6r)pXW0lG8yA?Ql!j(#gNMITH}f9EuxZN(=ts%E zrcqSa#e3dyHPK;f%F%GK;1!Uf|b-+yYt|D z<|d#WI=eE&Rc8$(mzT~gC_Y;u!2lPedh5ta4HAE9pahZ1z|T=pkA~nyov?g}n{dGy z=qn&Vvp0H+)D@oo9 z2oXG_6;pe@&8aA?B$gD*BZ~RTE8`VsCysxqfsjKR7}|4~njlhV17J-uGf0v4G*U)a z;{Gc|!lUX02;fA!ya+hZ|7%qbaWsq>4_WCWDiASLe@^K{i0V=AQzLoQH-OcU$daJ; zj-roJT^gGVKQJvxOGTjpJRG1RAhq$_ZQu|CQ52j>l;wklTxvZ^ z{I#wPW0Zmv_jvuY9h7*hpJ0^>$~sIVB?Vpv77TSDFtVfs_w=t}X_(P8O2kG|o`nd5 z4BECu#_CWH7hl??x_Feb9;#Ln@H&60BdwMm<#luj!Q?%!Y2ON>l_O7SD!+dc6c>Y0$1DX)X;7oJ&1?`izbQVFMiY zHY$71J0%^!1@r^gy*h3s0gMLKzWR5hV2edGe8?3e1~qj>8M@pUU#>9Z$ih5Xj-;zG?q{CLZ%I^`XembxKCCsBu z)un<(fg-wD-N8hlgb+^1>?nT~SSQ);(9;(16DQV>>Z!6}t^t3>TABPhp>F^H9FFBe zU!)_k+T=QVl4H#2ZGLx9&tZ}i zqkxEZd)GnsgW8;|^do5Wt06~6g?Ku0oGZ|V8~Jya`Jx9SFS`Ptf*tr>XU$SZJNXrg z44qj5HOHX++^c50cpMh2G-Z_T$`O59&q*)_zj!7I3)hpei>MPF^=YE{FAnI1@ScT-5NCOar;8clrSgkJE^eP|Ek=3H4a6-O3! z%3R}0r-C^A=AM6Q64r>`NH5>4O-^tIk%=CLMGw0B_Bj+d>o%&2_uZkYn&AH8wDu5+V;b`tH+)dyqygI)2w74-gPrwFxC1gr4T^ z$gYWU#!K- zqzklx+JoyDA`NIw$NR8rsMy(vFam9Qy2xBEv~>g+y}bG7)g0$NozmdGS{;46LRoVQ z)VMjQzX*RRq>gPy^mbV3jUNLnGNasF<^Yp{UgEjE>e%4a1ib}l1>bzA?fRWK*2$m8 zr7JBh-TrMhG{snMsUl{FJgIB{k30bv*>`Li!A|i)#28bJCL4@~ZPfs}QU0VnVIa1G zuOq8KBj<5?zeDo)kdmr#Y z$!Qb=${^SHd>}#ovwMx)x&;$;KDVM_>30qis!r%U`wk|8FAypfGCU*Z_N}y{tQxi1(=) zMt}cv12=W6rlsD*e)c$T2j`U zSaUlEBu7RaYa%3#6hIeQN22^wGi{# z*2R_P5a~6#kzB)kU5B8!yUw9Lf$^sdOecO2(@$HQF#L!jUgbgiT;iFLBGRvF8lb@Q zDw0({<)l+fnA!J@b-x-UTXoNe$i&Drk^VJBSEIs7@9{MI5yXMW_&Jg;pI*F8zWg4M~cNqu^R_ z@ME#+;Nq;SgR3A2etKF$!-8NH+xR}YV zik+_rVhAA&BP27+n3JR=e8<;40(`xT@htz5wOauolMw+I0f3V!0UQVD#c@7HfX
    N1Ag$k0s6s!4T%&% zKoB94GbCq*Jsh&Tr}w^n*WXgxIhhgRhr0A*p{h<*<%!7nwk%$jw@3wnM3R311pq)W zGD?0p!A<6$PCW>m>cL}p;xRQFi+v#K)rPq#%)z{LYWQ_3^JhjZBaL5)mSs&F1Fz#(_YJS@*6( zxkw6=YQ-Z7NhHZS)bQ9`uG_JlzMKk4CFIF>9`COA1S0@YOnnZDnCkj$H6MCwW9 zA(FuEc1s{LHdp8Ecq`}@34+5|mbnASka1EV+p!6`K7V|;eGY)kdylVfUu-io z^Yr1!go+5!yAQRt-bjA}DI%uQ=c6dCRPUYF(7_A;mNk0JNGfp6LKVad%OP)9(>YAR;IP5E(c!c_$w(db0w5_Qi&|!EHq&AM=Bt-MeF=Z>PEbUac}Gx{gv|Rz zMKhr$>$6Rt`}%w>U}g$QU|bE+Tu1?@v#A~1v>w~BAz`INKyA2v{yII8LPAKA8HrPm zkfhdO05T#~Bs|+Z3)cxJMMROO*Mk(0b*z~IVJSwD$TurRVI~4;r2q^9LL?#+AW0FW z$f?y6OhGV7h}wTYt&Mc0kRpVD0(wM}yWNpcf+B`MB9XA6tjTRp|?OLfw#Z&R?f+Ui4J2?0l_{uB*0WrB`zPFsc5M~DPmTv6jifYhq@Mu ziU`@4MzEM!sUo6Q)Viq-V@UqLPuMXep5dH8X#;8kH2Gim2kvttLe%VrF6@ zsw5&20ufCWP*lz8;36yzJ?8W8}6AUUmuw)AN|M33yTK3nx;Ki(aL zg2>Du2;%zX?R)RPv%TGt6oHDE%JuVGEs~i+gh#Xx)$mS0D47sSZ;_to56;sA389Jb z&6FWeTQYwE5x(<-cXqGu03azUnaMXhF|5?p`D&RLssNletKOq~qoR!F?(UHynE(Y8 zAS0ngBQluD1ewYdP&EiDq2kO10Rfd}8UzwL>19$PB9mg45lWR(2)3mWj2=jin{juu zHdu%ROzVv@n-wmrFy9-&0Az{^kQ(b2}G!<1< zLR3^$kf|bCO^YGn&C?;2v&R?humBKIs$_aH+tRd@&DGg5_uhSVKKAY)R_k@^4Me1i zDTN?{*j%m;hhvhb`;th~pb`iOphC4&ib|ZSMsS|i| zc_x3})V7e(T~#wuKp|F}b@c8Y(OpCc02JZF@4YLL?YL0*@U16@?JhGPz5S?;Wq*Bp zad~fKElL=1`E79a@>wIE;=RWTC;2&~p)KP;zBowMeFi5CqClK;D18 zyi-%PN@iw?Y9hoGLMq)Ipcd6)nR$X>XP28uxH|-q(cC?{C@EZ)PQr}$9^N|~k6Nrp zXemLbl0~Q*h-5+)2@&d4E(r)ARFdESt?%AmZwY3C$|tW(>oiBGDrMR#hujNr~1(R8)`& z!Xrh6Nu}@&u*t}zP)mtSC=)ET1k-BG%uJ4}DKZ_|dyj~5Jua<91l6=?ycq;<0FMne zx5dFwv7(+SW~q|GI<8vwR7pL}>r5soYSkk6;je#ldG8|A$DuND+#ZXXkP(0F`~U3y z=$@WhgdkNiS%xYU5CnbcCzP&gFFt(<@cyI6b*LmR9$rLmK&q<1m}#n{R4WPvI1ZCi z)|+)HgQ=_L zrbz~+48;RB7(`kR5M@=7a3C_(RIAdoM=VQAX02oQo+pG&0kaJC_U?`<&GY^D-@Ccn zCgs7StKG7sP^+a8YN?{dPW%)^BuLS9xp%@WzzN^T=6vHzd;EW`2m9Ltahjou2s1Mk z0F)EFMqgT=7g0UCI&bp=AUhD5nd7wawp_h+Z$2E#P)e!UeOj-M`$M=>gj5qPrKnmh zb#t~MsA{E_Ku~z~JGeLKP^MMIH7F-lPv?HTv4E)UCGO38$-?Mg)eh>#G0)Uozu zsimwpt2j2H5NT#gK78lVgLm%VzPwYjVLgR=0@L~C?$w=|5-io2`SuT<>~HSe(_47& zq$p)`c{U#x@PwRIRn_X|Y$Hh(B1P5eP?JevNbc_TkgR{h7?ENIVM+!)fTTc}gbt;L zLj=My)YFnt5E&v$Q>sKli_ObS)zx~{TL;z2R0$z#g#txrl0~C1RYVQS6x=&Ie|^}K z>JA9>Os_y9fs_+%h}KMX-p|YKs3H&Fd3f9&PW+?I{pD9LPD2Syp}hNB@4S9`Gp@!{ zPi5lCciw+`{>ck9g+q;J7w5hAQp<67KqOAITTttuR?QU?-ss5GM@Plc|LWcQXN z1TBN6kq(t4Qeag*^6cX5*k%fQ^b{mXRh*bMal#OuQOcMZJv;#yK$rp+IXhqPvq#ah zi}OQvDHa4wT`1(SwIrD-CV|wA-6KH}rU+poSC@aA!(lcpDx9Wqf3riRl69&gC#;_$ zRMm*Qd$|)~cv!XQLE*An#H7t#OjLC_&UG3DEOkOU$x=0eT1Sf1aS##HVx?#;P(YcI z5ZYMgHk0&>RI-R?Xe~V=P6JWt@VU*Wf*Mv+YYjq(c=|Yvt#=VgLd-le$zd8=cnX}s zBB+0Q$Sz|^BsGJa)kkyJ+Gp$f~ zcM7!_-k^5P%zIC+j@!A`s-mJQLSz;@^)9v6@Q%#K-+m~N`FNC~rB0<3IW=T4two2* zqBMoT;q$UkH54ISoo$Y7fztDzmWi24h=6~jvJS&xnL(s75USe41*C{jN~s=cwNj-6 zPzeQ#!jx6g1VuyHGIS`Z37wC=d{) zrh}?jn-`LzLXpf=I{|qur9_}qV?saxYAUJ}L~kTYvHkV-csz~63DJRy@P;>=+%GbZMYL$ zj!QAk2&0vvLb0MkS)ZLn>mciTYRwP(Lu7yqW^c<$dDD|TR5U!oT}?7kN*Sktf?*n> z`NOv#-d^9VFV4Js8H$tvYU5@QkrYT(oeYCXRjE3AKP*QGT{IP)nL^KWWGLMb!Vtiu zXO2Tv)7~ADNhFz+$V7(s0J(o&Pc5?%td^BB3~uC5nqf7L2YRXu!*JbaRl$jSs|2Z1 zetiGY*M}WXz~zjW6gjDZwbbyernOW8Cc3#?9}fp1NEy~EVp!$_2^&mQ@1 zP^FH=TPvkRCRJ9OX*teX?6}+2Qls@@H7wq2nxxv|J(zVh$Y45En~Z-&mh8h=_sblB zm@e5_WLmHG$3q|&cosf+{IH=f%K~CGjN8M}iX~z-ts>%t#_wI6AD2cIinMSo7KW(m z1}PE-H!koLXe}p=Ay4AGpr`^24PFX}@T z5uBL52&L9)YU5Pf?3qEpBZg^(LE+)urBGB?mz&o5`Q>@euF-t%-h0Mr3vcNu?9n{@-N%ov_jjEk zgSPY}(@(B~AX9%$r&{`nAqXSFs!5S<c=F)>K4wu3AyuI#jqVK{1_)s3 zPVoA0q(_e^sc5d3_2FrQFSQD2X2UQ6=u10k_z?+$$}-huX^~NC?cotArr`+0FixVD zfS8t|Ckf@jll$|$q~y37-QDUSBI}D)X!HRX%I5xkUE6=^>Wq`7L8sEpJH1DbjHNdb zwuq4I$R3fBulL(f34@r3T4XR7=}IIZ$`;<;hp{>$G*iJ^LcwB9G72AGU466c+_a8k z3XM`krcxa+s!~p(IVp6&!ys_5Cp^v6fH(nkH5I6-b`MagjD!|?Z&D4SC$0igRcWGC zn|B&@82W!QpPg@NvAdhC79+4MS*9VR+f?0MlpAL^bR>-+ zymdpttlm8hLd#rOMZ9({nIR^5@*_l@4M0b#p8PCG)!7>)RSl+H9HKF37E#k@^NvM} znVJ-_@Qg?g6x9e=(1fn^)*HkU@US3yprx52LR5bWNhCy7OG$zTE7oEGAVmWwEXz_# zL{Md1kIlnW69_aE-W~SXr_(d*tzvLd|u zVJ?HFXI9+a-MM-Sk?QjT10caJw9I&LdG+G`O2J&`#V_l_X3`Et-l)Z$EtT z>;*_0to0rtrJ5sQNK(}T*}7*Tkf3x#8LL9Zp&s`~8I_Szg)5^`Os*cB@2~eRWHlWq z13B1qzRpcK+TwJE%)ak%kqD&>x*0By^LBqpHwpK zQXNSVfFYThDB2V(C|d5?fyGSCfsyKDrBF07sPKrTbqg5Hdq)I&W)E@3;u6Rfj1*GN zF3-(WsFbYJO07Qs=9Lb$u7^n2SXniMO9n-CsHu{fNst^@D=Cu3hFIXc<1v*Ego1xn zQM9awI@ayHFROurPM7DMVWZV?64O31M=7IlpiTzOE^edQRQ7(;*lntzNo7z&FvpUG zWhg+Bq<}&-(Q0)Z#59Y@+Aye0HHvU3kFV}`lQ1o%rifWlwL*@iB2yuSY7h-t3R}Rz zCB%7uI#(xqV(yxxr#`5UqX&svi%EZ})5;mpgrfIOkz}TkMPW>W)hLV}QY^^;U;-5x zN)VnYwa_RkR*S5yPGcPhRWnf=Y6?(LFIPidT|Ib|S0&W7hzjR6Z`9^!q+$sV7tw~u zBp@wZAOVKJ)JXK+mD0mWNo0tNiH)c2ywH@UQf=24Em}-Zx)ffOvAKZpR1snMK&@?7n4`MXOW(b zRbZ5=Y8skuK+)A^lgO!#33z`5O;QP!G=_o2Sj`PAnkF!^(3Hh=Fsq`bR>e$oU@>q$ zHdz{bvLg>&gKW`Tmqd1~%fP@Xlpzx=T?iGvPrN&FD*nnT7;F zsgmxh0@aqj8rKIuzMl6{z|>UHqT(r4%QUPvYYAv-m_vDfb+J3#!eM`uw#=*X?AhY< z9Hml%!scP3sh(t>vK&P;r9^_FX1l}TjgM=J3?MUD%zF5GHO}5dq?8&2PpKbOiXf$k zMT9^|>CTZ7OAjDCC76LoFpywm?3Ve_`T5i9n^dCYwlz^T6#?S@+YgT0rZzy+XqWfS zZubWS7?C0fN|7iOH35IonX|hP0)U5h#Hfu9K~xN*p=T^!ikVp*MzrY1g-NqAM<46J zMoH=64_2#w7i=vB5!t;XkdfXUghyDlLT$bb3uWm|i`80s zrctbx=AlrdMMm$gR84VDIHYGdT5Bd6iHtX{d;m~E$cw`^BolwRS&iGn97{8i6t&w| zyE+VIs4mgnU))@maXMv)B14OIMhGF9U`TQ}d61wm$xxoOEI8|GsML9Tu(6nx6RAE$ z7OW0|rS&#Og{L1ERiPqV9(T*Kp9dX|esm9yP)b7-tI=nvwY3J7&3fJ1QbYo2N>3*N z)k21MwE`7@rYC>t+Vm8JN->D{5F*myR3KYw3WMDpqNGB}L?IixXzi_uqDS0j!$_2B zLNPTFh#F1L?r-K-t!J;rf}UV_Mt7ftMLQ|9j1&WeK)Sw3+&SUQVXSpCh)88x9n=(L zoDu-4tU_p6jRMv>I8nsHI~R|mBRTg5PmfSQrR?)a%H@CA`C&Jw2vQF7%vx5%y7@8E zC#_J1JJN+k>?D4eQjN@%1iYWLWlmNPOFyNQs_4FZWI7246;xveG6SI1%m}l9Njq7} zNKaEWIho5vyZY^J3uOdPUO*NhCBkJay^z!hrb#LY4#PONC5@~`vr>3@wp!migGkf8 z(pH-lNSc4hpn)u_VR6@?z>#z<)j-cKO9-_GjMn?fxDf|e(`3UiXKxysvN~Vyb`qJ} zzNZjiGDaBPr7(dAeXs$M1mx@&3lBI6_Z{MW3V^|Y z$f^hj;N8v4#Ps~(MW=d!OF%@Uq*AJedj!1@npuA}lk`9$l2A#sC}a^=oHAn^tgNR} z%5LsL-DVqEL7-?c%|YmtL1NcEeH>~A1|7W5;T@hG;qJb)!XlLL=x@MsFV4@?2VHD|( z99F|52|=G*wA8Ai1X4w2@1imeBN)|6w4Q%Uz*%4=_tqmqm8ue!>oVlx1?HLP85u|_wD*<~CJI4h zS}iWnK||BlLl8;yNyfTrttXH~akSoB289Le!scBo+f0)|f+3TJWVqMWJ)heb# z4)dl~D_l@U(<(AcNJ4Q^;ff85&!D74U5(4KfLX?3O`|J%#IlsBOf0))KZu$LG6kCG zLa9SNEOVP(Ohjc~W;07gS(SgyG+noYjwYtvpkt9jnr1OE87OS6MK@|89hsS)QJBe; zh_WxXx)^uTP~pA1fRz%)O^v;$u_tI201HFl8dqnRGrJT)5nCCHgi*>H!?28_u8L5U z#>|$k#Y&sZ<#)q7`Rnx;TEmual%bC6U{>&cNhh^}l_AGBnZtRh7)YME+S+EBHs z1Dmkf{p2c$FbNM&B$0h-M?2VV*~{a#FWtM#)#ysAqpfsA-E}chXNuB>TE{_DIp}5> zQUZm;x~9px4tsP_sVaYE9P2Px0`3Y46;TnuP$X$oDZ`-_(rh#}Sxp0PQK}Zz!D{qA z)M1J6jA1Y>=90y18teUW{qoSqYSjd(-l8vyQF?1bDbaf%BC|6(eRICP*==<_0O6;k z&Z>s#5)KnoLQ@8bA#AKRlv2wnh$k7UGS*s6iR|6ywzPS^JM@2Cn!!Xb#^V>SJ5Vmh zCRxX7lg>TQ&eykxU9Dy&R;`GM$L=?uOz*!{-hI#*Wvpr9sudzk6*DbrDv<;%Q>2Cv zi6kNdM3JJV6ci33vMR&=u$4^S9Q5HJOl3~fpu+A;m8^B>h*5M_t0Gpaw>~dEs6wsH zhY1Q~sRbU>+0=jbM_t+N_7IbBBuh2Gi5#u024*h3$)T(+~Jm=;-<1(y@g$|$JoF$>Bdi^t}CtYeYLyI+6Sc8A-W?TZ&L z{^ffQMnhSxHsf$iKMl~6zEn)jq=>!xrECki!@9@#x= zQB^6X&p!U-@BZk|zV*+3@H_w0zj5!WVZmU~L`~~ZVKS{IH8lz%`{8)=$(NXqDlEmE z9jst7x4w)DrHN(y~L7#&I=imCdvg5rIg{*Iz!fak{&{vvujQm})hpiG^As-7{SxWASL+ zz!v@3oM3u(G##hoya**7ft1W)H5|4(E!089sD(O}y0TgaEgG6bH5GKEFul!l!k2!x z-|lvYc{}H!_vU@^`M9uqKYCxfA}m_RPIP}XEjpH}ErK*vCNM8|&tKJJeEP*#Z@vBG z^RK@Az5n@NpIu(uyU=&O``$2(p1FVZx=bU4Mloe6;=Oq{mVN>3Qz=2ipNx|Ly!BJ8$^F* zL>_nZ=3*5+Y%|C%$taVe3aUnBlYYLgm+Ot`>C{f#9&c~&cDvo7&&|90;{CAL634km zi{3i|5-CJg6{N+nMS)xnr5cg@!*N}vHZSq&_Sb*%Ga2No!n(qp000p9NklFDpkd^kG0℞D!6tT+i3u}MPi`DpO zvmVU0%l_r=`sVg-dwsV*%sD$-gnM7SEzU#{HP!y+^dX3JPw``erznPEu`GQ7To9x0 zUNZCc+4GNn{=vgP{En{eN5B8$Km7Oq!`*y$^@ArL{PBMk<5ypN{n1~2@al`Fn{kZ8 zV&K^{Nd_{z|(SOo*6bkva8&Uas3BakB9IJ;x5 zK4Q3<*5@lTQIXz`>Bm}7N^aL-7BKyNKFqBlmL9-QC&!&8>w@OpQ>yLtTWcOJg?_FKRAgV&!wd-mby z|LTAFAIDl>{^J+5xo;2F+4e_ieLfxvqTV%I+1-ol@BZkA>(#2Lim*k$J=`7J?C#H= ze&Z|t<8MCP#zDHj{k`{o{-1w;_M?CKyC(~LFe{Yo5zUv~Ar~J^jTpi{`T0MN!&ps* zR2-d4A5r!%_s3oU8s?^J|o{yK0&+A6%%kgl_%;j)Q&0<+qGyP_Jy}h|R-fnU9 zTslc%7GW`t)v9U*neqB?>r40E0R|wBh(IE}H)Xc%?#0jk{ulq@FYHx+U*Fpt_uKkl zlFWJ6hH>@kvu9WDJ^a@9ztw$ice}Vgc*?Rny#Df=wq2I}eD~Eim*0Nto88U#|K*Qf zKYhO5Or~liB|F<)yIXQj=CkL|KK#{(+wJW)&!38w>le??-?_Ja{!)~~DV@tVDP(3! zi#YV%?f&-V>&wflb~u`UsCDSU+wHvF?%RI3-QJbUu|8Piyo?vq`Q`ZF{`tMlN{;E< zL!0OBeQ8HZCcO8>GPJvOABc-O7+`YRC$b2|eLig67b;l@%Z?Tm0tEq4f&2cj-(O$v zr2pu@{RtnGhu?WpR^#3CyPL0HANt{w5B~n6KmWzAfA)9NgNr18F0bwjna9?*hf*q9 z-@my2=ocTp{m$d}fBSnM{@LHIE>^$%>CblCEeSQ2BA|CHEtc^14?q3jHA^zQS|ch|Rv{o(fMt1o}`$IoY!-x0h2@l?TaDKKq&b!0$ zIE`cXe*5h8umAd2hxvH@(KoN3znbo?zxvH5Ond(M*BC(eAOG|JMu_W|ukF-`K(!f2lqqxq5INHwZq}=laD^!JU+{tDubGH>^ri_Pn=p7rJf^`pQ1)o*_BVZS|WhSmP&X1ZEi9N{HNaI`uU64&ENTd{U7}C|M7qAZg+Jvy!iT?@!s?gKmFj_ z-+y;pPhWiU*)RU%-+caGfBof)r@#EupZ@x1zk2T{-}#+?`v?E`|Mo||JA(1*(-%Mf z?|%34?CgWT`TJK-Up{>MAu>H1P3ObmPygso-}&~FNDSkkA?(Q(88M9I`sP*8Z@zwi zRUQq|+UwsuYrFl${fj8Rx!4@8@5VaJ`(rMi&3(Vb-Gasat}QS2%k|Q>iyvD%EW6jc z{qup&F}x4 zKlsfDAML(+{g;3IU+z7;+8+*Wcl=NP=budX#xFkp;)nnJkC*GiXTSX9_x}AK_}u^O zfB%2_+)5qJug)I4_wee;)w9o@?qBa8ee02(4hIaw-8VPG#d*9s{^~FP?*2P}_s{QN zLrx_$mSS|=rX5`^&T z-o2+Ee;GYa|9@b#>!;VxzI^(B`q|4;hVCvavmX21VY%LSccE;rZ}+da_n*A=`s-)& z-Qm-J{AB;)?)LTdz03Q5{ilC<`RM)^AAP#Aaah~uAAI($fBybwKmF+Oy+>bu{OOm! z{^IiC)xGaMdRVT$`R3^l{_w}E%hk{S%~4`DIOYe&1sMopy7*FZ~gv zjBb0%uEw?1D7`v8t8Q#K$FeG_jU>#2PJHNj8F=TwA|gSEKu{uDrAq`Q`$nLEV?arX zK*4(=+C6M%S>cztgpfE_+i1$F5K*eRyYrr%2M9ol$#A4Ww|Clq{Z}{L&dum@u$(P0 z5691sFHbHKs`NXz*DtSjzkQHS(|+gn;K_cvO0Q3E4&T`u-Hi^P9L^WB*?2PSk6!%w z`J_J?-VWaX*#{fjjmBmzmwc^NUo7WbuYyoy%hz9h?Q^M8t=^~}ef-w#S+|yR2snRv zwzazhFU$VSWgOCfkPerUhH9gJ`syV3Fr6;oB&k$FF1_w;tx>NqAt25I1BU@$!Gan%k(s>#}fCL2~8bZ*ZAS}moRRxr-_nhs88|+j( zN!kgB^=`>wTXZbR3KiMt%*|^_dP8V-~=dJ30T5WML9$a>R^2^WWlc{&| z^oysH>7w)OY_q+w{q9~-WUc-6y`%Q4|Gaqj{kLc1@$H-L_0^4Eh0VP-lbhTOR-+}= z85La&=3oEy-^FZEtWc!+u+ys~O$`{2$DOn5q+YAl>z%VJRvq^ygPVS>T3IbtNxcdH zt`Z87A{0J<2&*`?9%7WHAsQvmAcg5}kuEce>N+y$p_w34D40l8Aqr7qQkZC(lwfio z5miMUwnG}?Dbb)K7*s9_jXVIdy%K< z>EBLWm2O^iSIcGZaCgzKL7Q9AKLHiRT3H84x8(1o9*p4FTa^| zrq|C;dcC`Yqr+iu+&k-@KR@eV^+O2b;n+L9JU;K;^!C2>sQc=CKAmT?G@GwhK2J6p z&5d=cRkFgHKHUeeDgojWc2KYa=BHq$7Y`CdGL%_^Ab_>~mY=Uwm5D`6cn2a@C4xkA z9%6!jDYB@s)!6^&@y$ucRVqHsv``gsL>k0i!q_)0;{egs)kS}LF`C>?=hO5bfBNU) z!T#~T-V8c@3hFaYgxl+z3MG@p%rCR?U|ipBym@wVd))o-vyYP+UB2v)=zKW!MV2j! z+UDBrtE*zZ%F_aZkcCRM>KS>yn)HUP-QB!@SPif4oJ%Uz8sL3iBx?=Hih6rH9Z$UX z;sXFC4&GCZD~RhsrLhbt)Uc%X7}4qm1c*7&sFJEGF`LJW4WXs^P+TohrMmm!uYUUM zcV9Nv8=Ctf1cfpHff^Tr38Kozi#7#jLIMFCu@u4#^)N3KPC(8j>y=M_{-e9jbnOR! zjiVadLL8BCma019$Ze6= zN|zr~m{E&;T8Jpt zyJMP(w)xKaKWQmOhp&#>}q5PEp=QF}3lKYH`X&UgjMW^q!mIO(nj{ zkb#IGO6(jE#lFm3&eN(T%8_GW)S8Imb6VRM#c?BQ41eXrmrG_gZXmUPwPu4OMZ`;a zy+u@QV5owa7*GaT=e!!Ii5wG=^(H}Je>5Q;NXk_)1sVVW#q&UvoAC@KEWnFtJz$wNstqES-V8#fS@{~fG090aNghLWgL zCDK@$Vo)@m5Z?!$08xp5p#n+inWh>E!Zt^EW}RUu-HuqdYia#lu_n9QAuL}k5ERi$QgGjWwrWR@|;y5^d4j|GmKI^z~%B7wTH z+8{;&2E2!arI-}4`k6pJS{Rb;Cd+KZebuHo&xh3Kn1p2e#(OG%vQs$+AOR%SBh|S1 zDOtpZh(D2Nh-ItX$wn_4+sP`NbB*SPNKjQ*an1T>wbo$LyvV(1b7MPO%~b=Hh~~&6 z6s@zYq=40yF~-cW5~<6|HZy^pr7A^9C2P6nv5~dp3TT|3l3~MA5(y}fmW*YI5%C2w f(zWw_0Qeu*var+;1iCxb00000NkvXXu0mjfsvhi% diff --git a/core/js/aurora.min.js b/core/js/aurora.min.js index 41394e8..bb15181 100755 --- a/core/js/aurora.min.js +++ b/core/js/aurora.min.js @@ -1,14 +1,7 @@ -/*! Sortable 1.4.2 - MIT | git://github.com/rubaxa/Sortable.git */ -!function(a){"use strict";"function"==typeof define&&define.amd?define(a):"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=a():"undefined"!=typeof Package?Sortable=a():window.Sortable=a()}(function(){"use strict";function a(a,b){if(!a||!a.nodeType||1!==a.nodeType)throw"Sortable: `el` must be HTMLElement, and not "+{}.toString.call(a);this.el=a,this.options=b=r({},b),a[L]=this;var c={group:Math.random(),sort:!0,disabled:!1,store:null,handle:null,scroll:!0,scrollSensitivity:30,scrollSpeed:10,draggable:/[uo]l/i.test(a.nodeName)?"li":">*",ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",ignore:"a, img",filter:null,animation:0,setData:function(a,b){a.setData("Text",b.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1};for(var d in c)!(d in b)&&(b[d]=c[d]);V(b);for(var f in this)"_"===f.charAt(0)&&(this[f]=this[f].bind(this));this.nativeDraggable=b.forceFallback?!1:P,e(a,"mousedown",this._onTapStart),e(a,"touchstart",this._onTapStart),this.nativeDraggable&&(e(a,"dragover",this),e(a,"dragenter",this)),T.push(this._onDragOver),b.store&&this.sort(b.store.get(this))}function b(a){v&&v.state!==a&&(h(v,"display",a?"none":""),!a&&v.state&&w.insertBefore(v,s),v.state=a)}function c(a,b,c){if(a){c=c||N,b=b.split(".");var d=b.shift().toUpperCase(),e=new RegExp("\\s("+b.join("|")+")(?=\\s)","g");do if(">*"===d&&a.parentNode===c||(""===d||a.nodeName.toUpperCase()==d)&&(!b.length||((" "+a.className+" ").match(e)||[]).length==b.length))return a;while(a!==c&&(a=a.parentNode))}return null}function d(a){a.dataTransfer&&(a.dataTransfer.dropEffect="move"),a.preventDefault()}function e(a,b,c){a.addEventListener(b,c,!1)}function f(a,b,c){a.removeEventListener(b,c,!1)}function g(a,b,c){if(a)if(a.classList)a.classList[c?"add":"remove"](b);else{var d=(" "+a.className+" ").replace(K," ").replace(" "+b+" "," ");a.className=(d+(c?" "+b:"")).replace(K," ")}}function h(a,b,c){var d=a&&a.style;if(d){if(void 0===c)return N.defaultView&&N.defaultView.getComputedStyle?c=N.defaultView.getComputedStyle(a,""):a.currentStyle&&(c=a.currentStyle),void 0===b?c:c[b];b in d||(b="-webkit-"+b),d[b]=c+("string"==typeof c?"":"px")}}function i(a,b,c){if(a){var d=a.getElementsByTagName(b),e=0,f=d.length;if(c)for(;f>e;e++)c(d[e],e);return d}return[]}function j(a,b,c,d,e,f,g){var h=N.createEvent("Event"),i=(a||b[L]).options,j="on"+c.charAt(0).toUpperCase()+c.substr(1);h.initEvent(c,!0,!0),h.to=b,h.from=e||b,h.item=d||b,h.clone=v,h.oldIndex=f,h.newIndex=g,b.dispatchEvent(h),i[j]&&i[j].call(a,h)}function k(a,b,c,d,e,f){var g,h,i=a[L],j=i.options.onMove;return g=N.createEvent("Event"),g.initEvent("move",!0,!0),g.to=b,g.from=a,g.dragged=c,g.draggedRect=d,g.related=e||b,g.relatedRect=f||b.getBoundingClientRect(),a.dispatchEvent(g),j&&(h=j.call(i,g)),h}function l(a){a.draggable=!1}function m(){R=!1}function n(a,b){var c=a.lastElementChild,d=c.getBoundingClientRect();return(b.clientY-(d.top+d.height)>5||b.clientX-(d.right+d.width)>5)&&c}function o(a){for(var b=a.tagName+a.className+a.src+a.href+a.textContent,c=b.length,d=0;c--;)d+=b.charCodeAt(c);return d.toString(36)}function p(a){var b=0;if(!a||!a.parentNode)return-1;for(;a&&(a=a.previousElementSibling);)"TEMPLATE"!==a.nodeName.toUpperCase()&&b++;return b}function q(a,b){var c,d;return function(){void 0===c&&(c=arguments,d=this,setTimeout(function(){1===c.length?a.call(d,c[0]):a.apply(d,c),c=void 0},b))}}function r(a,b){if(a&&b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}var s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J={},K=/\s+/g,L="Sortable"+(new Date).getTime(),M=window,N=M.document,O=M.parseInt,P=!!("draggable"in N.createElement("div")),Q=function(a){return a=N.createElement("x"),a.style.cssText="pointer-events:auto","auto"===a.style.pointerEvents}(),R=!1,S=Math.abs,T=([].slice,[]),U=q(function(a,b,c){if(c&&b.scroll){var d,e,f,g,h=b.scrollSensitivity,i=b.scrollSpeed,j=a.clientX,k=a.clientY,l=window.innerWidth,m=window.innerHeight;if(z!==c&&(y=b.scroll,z=c,y===!0)){y=c;do if(y.offsetWidth=l-j)-(h>=j),g=(h>=m-k)-(h>=k),(f||g)&&(d=M)),(J.vx!==f||J.vy!==g||J.el!==d)&&(J.el=d,J.vx=f,J.vy=g,clearInterval(J.pid),d&&(J.pid=setInterval(function(){d===M?M.scrollTo(M.pageXOffset+f*i,M.pageYOffset+g*i):(g&&(d.scrollTop+=g*i),f&&(d.scrollLeft+=f*i))},24)))}},30),V=function(a){var b=a.group;b&&"object"==typeof b||(b=a.group={name:b}),["pull","put"].forEach(function(a){a in b||(b[a]=!0)}),a.groups=" "+b.name+(b.put.join?" "+b.put.join(" "):"")+" "};return a.prototype={constructor:a,_onTapStart:function(a){var b=this,d=this.el,e=this.options,f=a.type,g=a.touches&&a.touches[0],h=(g||a).target,i=h,k=e.filter;if(!("mousedown"===f&&0!==a.button||e.disabled)&&(h=c(h,e.draggable,d))){if(D=p(h),"function"==typeof k){if(k.call(this,a,h,this))return j(b,i,"filter",h,d,D),void a.preventDefault()}else if(k&&(k=k.split(",").some(function(a){return a=c(i,a.trim(),d),a?(j(b,a,"filter",h,d,D),!0):void 0})))return void a.preventDefault();(!e.handle||c(i,e.handle,d))&&this._prepareDragStart(a,g,h)}},_prepareDragStart:function(a,b,c){var d,f=this,h=f.el,j=f.options,k=h.ownerDocument;c&&!s&&c.parentNode===h&&(G=a,w=h,s=c,t=s.parentNode,x=s.nextSibling,F=j.group,d=function(){f._disableDelayedDrag(),s.draggable=!0,g(s,f.options.chosenClass,!0),f._triggerDragStart(b)},j.ignore.split(",").forEach(function(a){i(s,a.trim(),l)}),e(k,"mouseup",f._onDrop),e(k,"touchend",f._onDrop),e(k,"touchcancel",f._onDrop),j.delay?(e(k,"mouseup",f._disableDelayedDrag),e(k,"touchend",f._disableDelayedDrag),e(k,"touchcancel",f._disableDelayedDrag),e(k,"mousemove",f._disableDelayedDrag),e(k,"touchmove",f._disableDelayedDrag),f._dragStartTimer=setTimeout(d,j.delay)):d())},_disableDelayedDrag:function(){var a=this.el.ownerDocument;clearTimeout(this._dragStartTimer),f(a,"mouseup",this._disableDelayedDrag),f(a,"touchend",this._disableDelayedDrag),f(a,"touchcancel",this._disableDelayedDrag),f(a,"mousemove",this._disableDelayedDrag),f(a,"touchmove",this._disableDelayedDrag)},_triggerDragStart:function(a){a?(G={target:s,clientX:a.clientX,clientY:a.clientY},this._onDragStart(G,"touch")):this.nativeDraggable?(e(s,"dragend",this),e(w,"dragstart",this._onDragStart)):this._onDragStart(G,!0);try{N.selection?N.selection.empty():window.getSelection().removeAllRanges()}catch(b){}},_dragStarted:function(){w&&s&&(g(s,this.options.ghostClass,!0),a.active=this,j(this,w,"start",s,w,D))},_emulateDragOver:function(){if(H){if(this._lastX===H.clientX&&this._lastY===H.clientY)return;this._lastX=H.clientX,this._lastY=H.clientY,Q||h(u,"display","none");var a=N.elementFromPoint(H.clientX,H.clientY),b=a,c=" "+this.options.group.name,d=T.length;if(b)do{if(b[L]&&b[L].options.groups.indexOf(c)>-1){for(;d--;)T[d]({clientX:H.clientX,clientY:H.clientY,target:a,rootEl:b});break}a=b}while(b=b.parentNode);Q||h(u,"display","")}},_onTouchMove:function(b){if(G){a.active||this._dragStarted(),this._appendGhost();var c=b.touches?b.touches[0]:b,d=c.clientX-G.clientX,e=c.clientY-G.clientY,f=b.touches?"translate3d("+d+"px,"+e+"px,0)":"translate("+d+"px,"+e+"px)";I=!0,H=c,h(u,"webkitTransform",f),h(u,"mozTransform",f),h(u,"msTransform",f),h(u,"transform",f),b.preventDefault()}},_appendGhost:function(){if(!u){var a,b=s.getBoundingClientRect(),c=h(s),d=this.options;u=s.cloneNode(!0),g(u,d.ghostClass,!1),g(u,d.fallbackClass,!0),h(u,"top",b.top-O(c.marginTop,10)),h(u,"left",b.left-O(c.marginLeft,10)),h(u,"width",b.width),h(u,"height",b.height),h(u,"opacity","0.8"),h(u,"position","fixed"),h(u,"zIndex","100000"),h(u,"pointerEvents","none"),d.fallbackOnBody&&N.body.appendChild(u)||w.appendChild(u),a=u.getBoundingClientRect(),h(u,"width",2*b.width-a.width),h(u,"height",2*b.height-a.height)}},_onDragStart:function(a,b){var c=a.dataTransfer,d=this.options;this._offUpEvents(),"clone"==F.pull&&(v=s.cloneNode(!0),h(v,"display","none"),w.insertBefore(v,s)),b?("touch"===b?(e(N,"touchmove",this._onTouchMove),e(N,"touchend",this._onDrop),e(N,"touchcancel",this._onDrop)):(e(N,"mousemove",this._onTouchMove),e(N,"mouseup",this._onDrop)),this._loopId=setInterval(this._emulateDragOver,50)):(c&&(c.effectAllowed="move",d.setData&&d.setData.call(this,c,s)),e(N,"drop",this),setTimeout(this._dragStarted,0))},_onDragOver:function(a){var d,e,f,g=this.el,i=this.options,j=i.group,l=j.put,o=F===j,p=i.sort;if(void 0!==a.preventDefault&&(a.preventDefault(),!i.dragoverBubble&&a.stopPropagation()),I=!0,F&&!i.disabled&&(o?p||(f=!w.contains(s)):F.pull&&l&&(F.name===j.name||l.indexOf&&~l.indexOf(F.name)))&&(void 0===a.rootEl||a.rootEl===this.el)){if(U(a,i,this.el),R)return;if(d=c(a.target,i.draggable,g),e=s.getBoundingClientRect(),f)return b(!0),void(v||x?w.insertBefore(s,v||x):p||w.appendChild(s));if(0===g.children.length||g.children[0]===u||g===a.target&&(d=n(g,a))){if(d){if(d.animated)return;r=d.getBoundingClientRect()}b(o),k(w,g,s,e,d,r)!==!1&&(s.contains(g)||(g.appendChild(s),t=g),this._animate(e,s),d&&this._animate(r,d))}else if(d&&!d.animated&&d!==s&&void 0!==d.parentNode[L]){A!==d&&(A=d,B=h(d),C=h(d.parentNode));var q,r=d.getBoundingClientRect(),y=r.right-r.left,z=r.bottom-r.top,D=/left|right|inline/.test(B.cssFloat+B.display)||"flex"==C.display&&0===C["flex-direction"].indexOf("row"),E=d.offsetWidth>s.offsetWidth,G=d.offsetHeight>s.offsetHeight,H=(D?(a.clientX-r.left)/y:(a.clientY-r.top)/z)>.5,J=d.nextElementSibling,K=k(w,g,s,e,d,r);if(K!==!1){if(R=!0,setTimeout(m,30),b(o),1===K||-1===K)q=1===K;else if(D){var M=s.offsetTop,N=d.offsetTop;q=M===N?d.previousElementSibling===s&&!E||H&&E:N>M}else q=J!==s&&!G||H&&G;s.contains(g)||(q&&!J?g.appendChild(s):d.parentNode.insertBefore(s,q?J:d)),t=s.parentNode,this._animate(e,s),this._animate(r,d)}}}},_animate:function(a,b){var c=this.options.animation;if(c){var d=b.getBoundingClientRect();h(b,"transition","none"),h(b,"transform","translate3d("+(a.left-d.left)+"px,"+(a.top-d.top)+"px,0)"),b.offsetWidth,h(b,"transition","all "+c+"ms"),h(b,"transform","translate3d(0,0,0)"),clearTimeout(b.animated),b.animated=setTimeout(function(){h(b,"transition",""),h(b,"transform",""),b.animated=!1},c)}},_offUpEvents:function(){var a=this.el.ownerDocument;f(N,"touchmove",this._onTouchMove),f(a,"mouseup",this._onDrop),f(a,"touchend",this._onDrop),f(a,"touchcancel",this._onDrop)},_onDrop:function(b){var c=this.el,d=this.options;clearInterval(this._loopId),clearInterval(J.pid),clearTimeout(this._dragStartTimer),f(N,"mousemove",this._onTouchMove),this.nativeDraggable&&(f(N,"drop",this),f(c,"dragstart",this._onDragStart)),this._offUpEvents(),b&&(I&&(b.preventDefault(),!d.dropBubble&&b.stopPropagation()),u&&u.parentNode.removeChild(u),s&&(this.nativeDraggable&&f(s,"dragend",this),l(s),g(s,this.options.ghostClass,!1),g(s,this.options.chosenClass,!1),w!==t?(E=p(s),E>=0&&(j(null,t,"sort",s,w,D,E),j(this,w,"sort",s,w,D,E),j(null,t,"add",s,w,D,E),j(this,w,"remove",s,w,D,E))):(v&&v.parentNode.removeChild(v),s.nextSibling!==x&&(E=p(s),E>=0&&(j(this,w,"update",s,w,D,E),j(this,w,"sort",s,w,D,E)))),a.active&&((null===E||-1===E)&&(E=D),j(this,w,"end",s,w,D,E),this.save())),w=s=t=u=x=v=y=z=G=H=I=E=A=B=F=a.active=null)},handleEvent:function(a){var b=a.type;"dragover"===b||"dragenter"===b?s&&(this._onDragOver(a),d(a)):("drop"===b||"dragend"===b)&&this._onDrop(a)},toArray:function(){for(var a,b=[],d=this.el.children,e=0,f=d.length,g=this.options;f>e;e++)a=d[e],c(a,g.draggable,this.el)&&b.push(a.getAttribute(g.dataIdAttr)||o(a));return b},sort:function(a){var b={},d=this.el;this.toArray().forEach(function(a,e){var f=d.children[e];c(f,this.options.draggable,d)&&(b[a]=f)},this),a.forEach(function(a){b[a]&&(d.removeChild(b[a]),d.appendChild(b[a]))})},save:function(){var a=this.options.store;a&&a.set(this)},closest:function(a,b){return c(a,b||this.options.draggable,this.el)},option:function(a,b){var c=this.options;return void 0===b?c[a]:(c[a]=b,void("group"===a&&V(c)))},destroy:function(){var a=this.el;a[L]=null,f(a,"mousedown",this._onTapStart),f(a,"touchstart",this._onTapStart),this.nativeDraggable&&(f(a,"dragover",this),f(a,"dragenter",this)),Array.prototype.forEach.call(a.querySelectorAll("[draggable]"),function(a){a.removeAttribute("draggable")}),T.splice(T.indexOf(this._onDragOver),1),this._onDrop(),this.el=a=null}},a.utils={on:e,off:f,css:h,find:i,is:function(a,b){return!!c(a,b,a)},extend:r,throttle:q,closest:c,toggleClass:g,index:p},a.create=function(b,c){return new a(b,c)},a.version="1.4.2",a}); +/*! Sortable 1.15.0 - MIT | git://github.com/SortableJS/Sortable.git */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function e(e,t){var n,o=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)),o}function M(o){for(var t=1;tt.length)&&(e=t.length);for(var n=0,o=new Array(e);n"===e[0]&&(e=e.substring(1)),t))try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return}}function N(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"!==e[0]||t.parentNode===n)&&p(t,e)||o&&t===n)return t}while(t!==n&&(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode))}var i;return null}var g,m=/\s+/g;function I(t,e,n){var o;t&&e&&(t.classList?t.classList[n?"add":"remove"](e):(o=(" "+t.className+" ").replace(m," ").replace(" "+e+" "," "),t.className=(o+(n?" "+e:"")).replace(m," ")))}function P(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];o[e=!(e in o||-1!==e.indexOf("webkit"))?"-webkit-"+e:e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=P(t,"transform")}while(o&&"none"!==o&&(n=o+" "+n),!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function b(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i=n.left-e&&i<=n.right+e,e=r>=n.top-e&&r<=n.bottom+e;return o&&e?a=t:void 0}}),a);if(e){var n,o={};for(n in t)t.hasOwnProperty(n)&&(o[n]=t[n]);o.target=o.rootEl=e,o.preventDefault=void 0,o.stopPropagation=void 0,e[j]._onDragOver(o)}}var i,r,a}function Yt(t){q&&q.parentNode[j]._isOutsideThisEl(t.target)}function Bt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[j]=this;var n,o,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return It(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Bt.supportPointer&&"PointerEvent"in window&&!u,emptyInsertThreshold:5};for(n in K.initializePlugins(this,t,i),i)n in e||(e[n]=i[n]);for(o in Pt(e),this)"_"===o.charAt(0)&&"function"==typeof this[o]&&(this[o]=this[o].bind(this));this.nativeDraggable=!e.forceFallback&&Mt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?h(t,"pointerdown",this._onTapStart):(h(t,"mousedown",this._onTapStart),h(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(h(t,"dragover",this),h(t,"dragenter",this)),Et.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,x())}function Ft(t,e,n,o,i,r,a,l){var s,c,u=t[j],d=u.options.onMove;return!window.CustomEvent||y||w?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||k(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),c=d?d.call(u,s,a):c}function jt(t){t.draggable=!1}function Ht(){Ct=!1}function Lt(t){return setTimeout(t,0)}function Kt(t){return clearTimeout(t)}Bt.prototype={constructor:Bt,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(gt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,q):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(!function(t){Tt.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&Tt.push(o)}}(o),!q&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled)&&!s.isContentEditable&&(this.nativeDraggable||!u||!l||"SELECT"!==l.tagName.toUpperCase())&&!((l=N(l,t.draggable,o,!1))&&l.animated||J===l)){if(nt=B(l),it=B(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return U({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),z("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c=c&&c.split(",").some(function(t){if(t=N(s,t.trim(),o,!1))return U({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),z("filter",n,{evt:e}),!0}))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!N(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;n&&!q&&n.parentNode===r&&(o=k(n),$=r,V=(q=n).parentNode,Q=q.nextSibling,J=n,at=a.group,st={target:Bt.dragged=q,clientX:(e||t).clientX,clientY:(e||t).clientY},ht=st.clientX-o.left,ft=st.clientY-o.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,q.style["will-change"]="all",o=function(){z("delayEnded",i,{evt:t}),Bt.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!s&&i.nativeDraggable&&(q.draggable=!0),i._triggerDragStart(t,e),U({sortable:i,name:"choose",originalEvent:t}),I(q,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){b(q,t.trim(),jt)}),h(l,"dragover",Xt),h(l,"mousemove",Xt),h(l,"touchmove",Xt),h(l,"mouseup",i._onDrop),h(l,"touchend",i._onDrop),h(l,"touchcancel",i._onDrop),s&&this.nativeDraggable&&(this.options.touchStartThreshold=4,q.draggable=!0),z("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(w||y)?o():Bt.eventCanceled?this._onDrop():(h(l,"mouseup",i._disableDelayedDrag),h(l,"touchend",i._disableDelayedDrag),h(l,"touchcancel",i._disableDelayedDrag),h(l,"mousemove",i._delayedDragTouchMoveHandler),h(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&h(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)))},_delayedDragTouchMoveHandler:function(t){t=t.touches?t.touches[0]:t;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){q&&jt(q),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;f(t,"mouseup",this._disableDelayedDrag),f(t,"touchend",this._disableDelayedDrag),f(t,"touchcancel",this._disableDelayedDrag),f(t,"mousemove",this._delayedDragTouchMoveHandler),f(t,"touchmove",this._delayedDragTouchMoveHandler),f(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?h(document,"pointermove",this._onTouchMove):h(document,e?"touchmove":"mousemove",this._onTouchMove):(h(q,"dragend",this),h($,"dragstart",this._onDragStart));try{document.selection?Lt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){var n;yt=!1,$&&q?(z("dragStarted",this,{evt:e}),this.nativeDraggable&&h(document,"dragover",Yt),n=this.options,t||I(q,n.dragClass,!1),I(q,n.ghostClass,!0),Bt.active=this,t&&this._appendGhost(),U({sortable:this,name:"start",originalEvent:e})):this._nulling()},_emulateDragOver:function(){if(ct){this._lastX=ct.clientX,this._lastY=ct.clientY,kt();for(var t=document.elementFromPoint(ct.clientX,ct.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(ct.clientX,ct.clientY))!==e;)e=t;if(q.parentNode[j]._isOutsideThisEl(t),e)do{if(e[j])if(e[j]._onDragOver({clientX:ct.clientX,clientY:ct.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}while(e=(t=e).parentNode);Rt()}},_onTouchMove:function(t){if(st){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=Z&&v(Z,!0),a=Z&&r&&r.a,l=Z&&r&&r.d,e=Ot&&bt&&E(bt),a=(i.clientX-st.clientX+o.x)/(a||1)+(e?e[0]-_t[0]:0)/(a||1),l=(i.clientY-st.clientY+o.y)/(l||1)+(e?e[1]-_t[1]:0)/(l||1);if(!Bt.active&&!yt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))n.right+10||t.clientX<=n.right&&t.clientY>n.bottom&&t.clientX>=n.left:t.clientX>n.right&&t.clientY>n.top||t.clientX<=n.right&&t.clientY>n.bottom+10}(n,r,this)&&!g.animated){if(g===q)return O(!1);if((l=g&&a===n.target?g:l)&&(w=k(l)),!1!==Ft($,a,q,o,l,w,n,!!l))return x(),g&&g.nextSibling?a.insertBefore(q,g.nextSibling):a.appendChild(q),V=a,A(),O(!0)}else if(g&&function(t,e,n){n=k(X(n.el,0,n.options,!0));return e?t.clientXacc||curr.checked,false); + if(check == false){ + var not=document.getElementById('module-notification'); + not.innerHTML='At least one option must be selected or completed!'; + not.classList.toggle("d-none"); + event.preventDefault(); + return false; + } + return true; +} function updateChat(){ chatTimer=null; fetch("core/chat.php",{ diff --git a/core/js/service-worker-admin.php b/core/js/service-worker-admin.php index 4b8b056..08165c5 100755 --- a/core/js/service-worker-admin.php +++ b/core/js/service-worker-admin.php @@ -40,7 +40,7 @@ URL, $config['business'].' - Administration - AuroraCMS', '', - 'data:'.mime_content_type('../images/readmelogo.jpg').';base64,'.base64_encode(file_get_contents('../images/readmelogo.jpg')) + 'data:'.mime_content_type('../images/readmelogo.webp').';base64,'.base64_encode(file_get_contents('../images/readmelogo.webp')) ],$html);?> const CACHE=`AuroraCMSadministration`; const offlineFallbackPage=``; diff --git a/core/js/summernote/font/summernote.eot b/core/js/summernote/font/summernote.eot old mode 100644 new mode 100755 diff --git a/core/js/summernote/font/summernote.hash b/core/js/summernote/font/summernote.hash old mode 100644 new mode 100755 diff --git a/core/js/summernote/font/summernote.ttf b/core/js/summernote/font/summernote.ttf old mode 100644 new mode 100755 diff --git a/core/js/summernote/font/summernote.woff b/core/js/summernote/font/summernote.woff old mode 100644 new mode 100755 diff --git a/core/js/summernote/font/summernote.woff2 b/core/js/summernote/font/summernote.woff2 old mode 100644 new mode 100755 diff --git a/core/js/summernote/summernote.min.css b/core/js/summernote/summernote.min.css old mode 100644 new mode 100755 diff --git a/core/js/summernote/summernote.min.js b/core/js/summernote/summernote.min.js old mode 100644 new mode 100755 diff --git a/core/layout/content.php b/core/layout/content.php index 959a527..1f5d326 100755 --- a/core/layout/content.php +++ b/core/layout/content.php @@ -65,7 +65,8 @@ $s->execute([':id'=>$args[1]]); $show='item'; } - if(isset($args[0])&&$args[0]=='settings')require'core/layout/set_content.php'; + if(isset($args[0])&&$args[0]=='settings') + require'core/layout/set_content.php'; else{ if($show=='categories'){ if(isset($args[0])&&$args[0]=='type'){ diff --git a/core/layout/course.php b/core/layout/course.php new file mode 100755 index 0000000..7171e32 --- /dev/null +++ b/core/layout/course.php @@ -0,0 +1,207 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */ +$rank=0; +$show='categories'; +if($view=='add'){ + $stockStatus='none'; + $ti=time(); + $schema=''; + $comments=0; + $q=$db->prepare("INSERT IGNORE INTO `".$prefix."content` (`cid`,`contentType`,`schemaType`,`status`,`options`,`rank`,`ti`) VALUES (0,'course','Course','unpublished','00000000','100',:ti)"); + $q->execute([':ti'=>$ti]); + $id=$db->lastInsertId(); + $s=$db->prepare("UPDATE `".$prefix."content` SET `title`=:title,`urlSlug`=:urlslug WHERE `id`=:id"); + $s->execute([ + ':title'=>'Course '.$id, + ':urlslug'=>'course-'.$id, + ':id'=>$id + ]); + $rank=0; + $args[0]='edit'; + $args[1]=$id; + echo''; +} +if(isset($args[0])&&$args[0]=='edit'){ + $s=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `contentType`='course' AND `id`=:id"); + $s->execute([':id'=>$args[1]]); + $show='item'; +} +if(isset($args[0])&&$args[0]=='settings') + require'core/layout/set_course.php'; +elseif(isset($args[0])&&$args[0]=='module') + require'core/layout/edit_module.php'; +else{ + if($show=='categories'){ + if(isset($args[0])&&$args[0]=='type'){ + if(isset($args[2])&&($args[2]=='archived'||$args[2]=='unpublished'||$args[2]=='autopublish'||$args[2]=='published'||$args[2]=='delete'||$args[2]=='all')){ + if($args[2]=='all')$getStatus=" "; + else$getStatus=" AND `status`='".$args[2]."' "; + }elseif(isset($args[2])&&$args[2]!='cat'){ + $getStatus=" "; + }else$getStatus=" AND `status`!='archived'"; + if(isset($args[2])&&$args[2]=='cat'){ + $s=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `contentType`='course' AND LOWER(`category_1`) LIKE LOWER(:category_1) AND LOWER(`category_2`) LIKE LOWER(:category_2)".$getStatus."ORDER BY `pin` DESC, `ti` DESC, `title` ASC"); + $s->execute([ + ':category_1'=>isset($args[3])&&$args[3]!=''?'%'.str_replace('-','%',$args[3]).'%':'%', + ':category_2'=>isset($args[4])&&$args[4]!=''?'%'.str_replace('-','%',$args[4]).'%':'%', + ]); + }else{ + $s=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `contentType`='course' AND ".$getStatus."ORDER BY `pin` DESC, `ti` DESC, `title` ASC"); + $s->execute(); + } + }elseif(isset($args[1])&&($args[1]=='archived'||$args[1]=='unpublished'||$args[1]=='autopublish'||$args[1]=='published'||$args[1]=='delete'||$args[1]=='all')){ + $getStatus=" AND `status`!='archived'"; + if($args[1]=='all') + $getStatus=" "; + else + $getStatus=" AND `status`='".$args[1]."' "; + $s=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `contentType`='course' AND ".$getStatus."ORDER BY `pin` DESC,`ti` DESC,`title` ASC"); + $s->execute(); + }else{ + if(isset($args[3])){ + $s=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `contentType`='course' AND LOWER(`category_1`) LIKE LOWER(:category_1) AND LOWER(`category_2`) LIKE LOWER(:category_2) ORDER BY `pin` DESC, `ti` DESC, `title` ASC"); + $s->execute([ + ':category_1'=>str_replace('-',' ',strtolower($args[2])), + ':category_2'=>str_replace('-',' ',strtolower($args[3])) + ]); + }elseif(isset($args[2])){ + $s=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `contentType`='course' AND LOWER(`category_1`) LIKE LOWER(:category_1) ORDER BY `pin` DESC, `ti` ASC, `title` ASC"); + $s->execute([ + ':category_1'=>str_replace('-',' ',strtolower($args[2])) + ]); + }else{ + $s=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `contentType`='course' ORDER BY `pin` DESC, `ti` DESC, `title` ASC"); + $s->execute(); + } + }?> +
    +
    +
    +
    +
    +
    +
    + +
    + View: + All  + Published  + Auto Published  + Unpublished  + Deleted  + Archived +
    +
+ + + + +
+
+ +
+ + settings + add':'');?> +
+
+
+ + +
+ fetch(PDO::FETCH_ASSOC)){?> +
+
+ ALT: '.$r['fileALT']:'
ALT: Edit the ALT Text for SEO (Will use above Title instead)').'" href="'.$r['file'].'">'.$r['title'].''; + elseif($r['file']!=''&&file_exists('media/'.basename($r['file']))) + echo''.$r['title'].''; + elseif($r['fileURL']!='') + echo''.$r['title'].''; + else + echo''.$r['title'].'';?> + +
+ +
+
+
+ ':'';echo$r['title'];?> + lightbulb':''; + } + echo'
Available to '.($r['rank']==0?'Everyone':''.ucwords(str_replace('-',' ',rank($r['rank']))).' and above').'';?> +
+ +
+ +
+ + + + + + * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.17 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -106,7 +106,7 @@ function slugify(str){
- + >
@@ -897,51 +897,143 @@ function slugify(str){ $sd->execute([':id'=>$r['id']]); if($sd->rowCount()>0){ while($rd=$sd->fetch(PDO::FETCH_ASSOC)){?> -
-
-
- -
- -
+
+
+
+ +
+ +
-
-
-   disabled> -
-
- -
- -
- -
- -
- - - -
-
-
+
+
+   disabled> +
+
+ +
+ +
+ +
+ +
+ + + +
+
+
-
+ +
+ Links to Services/Content +
+ +
+
+ +
+ +
+ +
+
+   +
+
+ +
+ +
+ +
+ + +
+
+
+ On Page Media
diff --git a/core/layout/edit_course.php b/core/layout/edit_course.php new file mode 100755 index 0000000..1193352 --- /dev/null +++ b/core/layout/edit_course.php @@ -0,0 +1,719 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */ +$r=$s->fetch(PDO::FETCH_ASSOC);?> +
+
+
+
+
+
+
+
+ +
+
+
+ + back + + + add + +
+
+
+
+
+ + + + + + + + + + + + + + + + + +
+
+ + Course MUST contain a Title, to be able to generate a URL Slug or the content won't be accessible. This Title is also used For H1 Headings on pages. +
+
+ + prepare("SELECT `rid` FROM `".$prefix."suggestions` WHERE `rid`=:rid AND `t`=:t AND `c`=:c"); + $ss->execute([ + ':rid'=>$r['id'], + ':t'=>'course', + ':c'=>'title' + ]); + echo$ss->rowCount()>0?'':''; + }?> + > + loremipsum'. + ''. + ''. + '':'';?> +
+ + +
+ +
+
+
+ +
+ > +
+
+
+ +
+ > +
+
+
+
+
+ +
+ > + '; + $sc=$db->prepare("SELECT DISTINCT `title` FROM `".$prefix."choices` WHERE `title`!='' AND `contentType`='category' AND `url`=:url ORDER BY `title` ASC"); + $sc->execute([':url'=>'course']); + if($sc->rowCount()>0){ + while($rc=$sc->fetch(PDO::FETCH_ASSOC))echo'
+
+
+ +
+ > + query("SELECT DISTINCT `category_2` FROM `".$prefix."content` WHERE `category_2`!='' ORDER BY `category_2` ASC"); + if($sc->rowCount()>0){ + echo''; + while($rc=$sc->fetch(PDO::FETCH_ASSOC))echo''; + } + echo''; + }?> +
+
+
+
+ 899?'':'';?> + > + +
+
+
+ +
+
$
+ > + +
+ save':'';?> +
+
+
+ +
+
$
+ > + +
+ save':'';?> +
+
+
+
+ +
+ > + save'; + }?> +
+ '0' Disables Minimum Score. +
+
+ +
+ > + save'; + }?> +
+ '0' Disables Attempts Allowed. +
+
+
+ 899?'':'';?> + '. + '
'; + if($r['suggestions']==1){ + $ss=$db->prepare("SELECT `rid` FROM `".$prefix."suggestions` WHERE `rid`=:rid AND `t`=:t AND `c`=:c"); + $ss->execute([ + ':rid'=>$r['id'], + ':t'=>'course', + ':c'=>'notes' + ]); + echo$ss->rowCount()>0?'':''; + } + echo''. + ''. + ''. + ''. + ''. + '
'. + '
';?> +
+ + + + + + + +
+
+
+ +
+
+
+ +
+
+
+ +
+
+ +
+ > + ':'No Image';?> + save':'';?> +
+ +
+ + + + ALT: '.$r['fileALT']:'
ALT: Edit the ALT Text for SEO (Will use above Title instead)').'" href="'.$r['file'].'">Course: '.$r['title'].'':'No Image'; + echo$user['options'][1]==1?''. + '':'';?> +
+ +
+ + + + ALT: '.$r['fileALT']:'
ALT: Edit the ALT Text for SEO (Will use above Title instead)').'" href="'.$r['thumb'].'">Thumbnail: '.$r['title'].'':'No Image'; + echo$user['options'][1]==1?''. + '':'';?> +
+ +
+ + > + save':'';?> +
+
+ +
+
+ + + + + + +
+
+ prepare("SELECT * FROM `".$prefix."media` WHERE `file`!='' AND `pid`=:id ORDER BY `ord` ASC"); + $sm->execute([':id'=>$r['id']]); + if($sm->rowCount()>0){ + while($rm=$sm->fetch(PDO::FETCH_ASSOC)){ + if(file_exists('media/md/'.basename($rm['file']))) + $thumb='media/md/'.basename($rm['file']); + else + $thumb=ADMINNOIMAGE;?> +
+ +
+
drag
+
view
+ edit + +
+ + + Media <?=$rm['id'];?> + +
+ + + +
+
+ +
+ +
+ > + eraser'. + '':'';?> +
+
+ + + Options for Meta Robots: index, noindex, noimageIndex, none, follow, nofollow, noarchive, nocache, nosnippet, noodp, noydir + +
+
+ + prepare("SELECT `rid` FROM `".$prefix."suggestions` WHERE `rid`=:rid AND `t`=:t AND `c`=:c"); + $ss->execute([ + ':rid'=>$r['id'], + ':t'=>'course', + ':c'=>'metaRobots' + ]); + echo$ss->rowCount()>0?'':''; + } + }?> + > + idea'. + '':'';?> +
+
+ 899?'':'';?> +
+ +
+ +
+ +
+
+
+ + The recommended character count for Title\'s is 65. +
+
+ + +
+ +
+ + + prepare("SELECT `rid` FROM `".$prefix."suggestions` WHERE `rid`=:rid AND `t`=:t AND `c`=:c"); + $ss->execute([ + ':rid'=>$r['id'], + ':t'=>'course', + ':c'=>'seoTitle' + ]); + echo$ss->rowCount()>0?'':''; + } + }?> + > + idea'. + ''. + '':'';?> +
+
+ + The recommended character count for Descriptions is 230. +
+
+ + +
+ +
+ prepare("SELECT `rid` FROM `".$prefix."suggestions` WHERE `rid`=:rid AND `t`=:t AND `c`=:c"); + $ss->execute([ + ':rid'=>$r['id'], + ':t'=>'course', + ':c'=>'seoDescription' + ]); + echo$ss->rowCount()>0?'':''; + } + }?> + > + idea'. + '':'';?> +
+
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+ > +   +
+
+
+ +
+
+ +
+
+ +
Title:
+ + +
+
+
    +prepare("SELECT * FROM `".$prefix."modules` WHERE `rid`=:id ORDER BY `ord` ASC, `title` ASC"); +$sm->execute([':id'=>$r['id']]); +while($rm=$sm->fetch(PDO::FETCH_ASSOC)){?> +
  1. +
    +
    + edit + +
    drag
    +
    +
  2. + +
+
+ + + + +
+ +
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+
+prepare("SELECT * FROM `".$prefix."courseTrack` WHERE `rid`=:rid"); +$sct->execute([':rid'=>$r['id']]);?> +
+ fetch(PDO::FETCH_ASSOC)){?> +
+ prepare("SELECT * FROM `".$prefix."login` WHERE `id`=:uid"); + $scu->execute([':uid'=>$rct['uid']]); + $rcu=$scu->fetch(PDO::FETCH_ASSOC);?> +
+ <?=$rcu['username'];?> + +
+
+prepare("SELECT COUNT(`id`) AS `cnt` FROM `".$prefix."modules` WHERE `id` < :id"); +$mcs->execute([':id'=>$rct['complete']]); +$smc=$db->prepare("SELECT COUNT(`id`) AS `cnt` FROM `".$prefix."modules` WHERE `rid`=:rid"); +$smc->execute([':rid'=>$rct['rid']]); +$rmc=$smc->fetch(PDO::FETCH_ASSOC); + echo$rcu['username'].':'.$rcu['name'].'

'; + echo$rct['complete']=='done'?'Complete
Score '.$rct['score'].'%':($mcs->rowCount()>0?$rct['progress'].' of '.$rmc['cnt'].' Modules Complete':'Not Started');?> +
+ +
+ +
+
+
+
+
+prepare("SELECT * FROM `".$prefix."widgets` WHERE `ref`='content' AND `active`='1' ORDER BY ord ASC"); +$sw->execute(); +if($sw->rowCount()>0){ + echo'
'; + while($rw=$sw->fetch(PDO::FETCH_ASSOC)){ + include'core/layout/widget-'.$rw['file']; + } + echo'
'; +}?> +
+ + +
+
diff --git a/core/layout/edit_module.php b/core/layout/edit_module.php new file mode 100644 index 0000000..b163403 --- /dev/null +++ b/core/layout/edit_module.php @@ -0,0 +1,173 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */ +$s=$db->prepare("SELECT * FROM `".$prefix."modules` WHERE `id`=:id"); +$s->execute([':id'=>$args[1]]); +$r=$s->fetch(PDO::FETCH_ASSOC);?> +
+
+
+
+
+
+
+
+ +
+
+
+ + back + + +
+
+
+
+
+ + + + + +
+
+ +
+
+ > + save':'';?> +
+
+ +
+
+ +
+
+ +
+
+ > + save':'';?> +
+
+ 899?'':'';?> +
+
+
+ + + + +
+
+
+
+ +
+
+ > + save':'';?> +
+ Multiple-Choice Answers +
+ + +
Correct Choice
+ + +
+
+
    +prepare("SELECT * FROM `".$prefix."module_questions` WHERE `rid`=:id ORDER BY `ord` ASC, `title` ASC"); +$sq->execute([':id'=>$r['id']]); +while($rq=$sq->fetch(PDO::FETCH_ASSOC)){?> +
  1. +
    +
    +
    Choice disabled>
    +
    Answer:
    + + +
    drag
    +
    +
  2. + +
+
+ + + +
+
+prepare("SELECT * FROM `".$prefix."widgets` WHERE `ref`='content' AND `active`='1' ORDER BY ord ASC"); +$sw->execute(); +if($sw->rowCount()>0){ + echo'
'; + while($rw=$sw->fetch(PDO::FETCH_ASSOC)){ + include'core/layout/widget-'.$rw['file']; + } + echo'
'; +}?> +
+ +
+
+
diff --git a/core/layout/edit_orders.php b/core/layout/edit_orders.php index e42446b..90023c4 100755 --- a/core/layout/edit_orders.php +++ b/core/layout/edit_orders.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.13 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -279,11 +279,11 @@ -
Inventory/Services/Events
+
Inventory/Services/Events/Courses
> + 899?'':'';?>Export Accounts Information +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ 899?'':'';?>Purchase Item Limits
diff --git a/core/layout/set_course.php b/core/layout/set_course.php new file mode 100755 index 0000000..108d41c --- /dev/null +++ b/core/layout/set_course.php @@ -0,0 +1,307 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */?> +
+
+
+
+
+
+
+ +
+
+
+ + back + + +
+
+
+
+ 899?'':'';?>Related Content +
+ 899?'':'';?> + > + +
+
+ 899?'':'';?> + > + +
+ +
+ +
+ +
+ + +
+ '0' to Disable and display all items. + +
+ + +
+ '0' to Default to 10 items. +
+ 899?'':'';?> + > + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ 899?'':'';?> + > + +
+ +
+ +
+ 899?'':'';?>Categories +
+ 899?'':'';?> + > + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + + +
+
+
+
+
+ prepare("SELECT * FROM `".$prefix."choices` WHERE `contentType`='category' ORDER BY `contentType` ASC,`title` ASC"); + $ss->execute(); + while($rs=$ss->fetch(PDO::FETCH_ASSOC)){?> +
+
+
+ +
+
+
+
+ +
+
+
+
+ Thumbnail':'No Image';?> +
+ + + +
+
+
+
+ +
+ 899?'':'';?>Brands +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + + +
+
+
+
+
+ prepare("SELECT * FROM `".$prefix."choices` WHERE `contentType`='brand' ORDER BY `title` ASC"); + $ss->execute(); + while($rs=$ss->fetch(PDO::FETCH_ASSOC)){?> +
+
+
+ +
+
+
+
+ +
+
+
+
+ Thumbnail':'No Image';?> +
+ + + +
+
+
+
+ +
+ 899?'':'';?>Template Defaults + +
+ + +
+ '0' to Disable. +
+
+
+ +
+ approve +
+
+
+ Theme Generated +
+
+

This selection uses the item template in the theme file.

+
+
+prepare("SELECT * FROM `".$prefix."templates` WHERE `contentType`='all' ORDER BY `contentType` ASC, `section` ASC"); +$st->execute(); +while($rt=$st->fetch(PDO::FETCH_ASSOC)){?> +
+
+ +
+ approve +
+
+
+ +
+
+

+
+
+ +
+ +
+ +
+
+
diff --git a/core/layout/set_orders.php b/core/layout/set_orders.php index 6009625..bc0c0b8 100755 --- a/core/layout/set_orders.php +++ b/core/layout/set_orders.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.12 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ * https://auspost.com.au/forms/pacpcs-registration.html @@ -39,9 +39,20 @@
Code
- + + + +
Title
- + +
Cost
diff --git a/core/newsletter.php b/core/newsletter.php index 0155f69..f356158 100755 --- a/core/newsletter.php +++ b/core/newsletter.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.1.3 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -34,9 +34,11 @@ ':tis'=>time(), ':id'=>$id ]); -require'phpmailer/class.phpmailer.php'; +require'phpmailer/PHPMailer.php'; +require'phpmailer/SMTP.php'; +require'phpmailer/Exception.php'; if($config['email']!=''){ - $mail=new PHPMailer; + $mail = new PHPMailer\PHPMailer\PHPMailer; $body=rawurldecode($news['notes']); // $body=preg_replace("[\]",'',$body); $mail->isSendmail(); diff --git a/core/parser.php b/core/parser.php index 4f17416..f1bf578 100755 --- a/core/parser.php +++ b/core/parser.php @@ -231,7 +231,7 @@ $parsing.=$r['fileURL']; case'avatar': $parsing.=' * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.17 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -491,6 +491,41 @@ if($r['options'][3]==1)$showCountdown=true; }else $item=preg_replace('~.*?<\/countdown>~is','',$item); + + if($r['contentType']=='course'){ + preg_match('/([\w\W]*?)<\/moduleitems>/',$item,$matches); + $moduleitem=$matches[1]; + $scm=$db->prepare("SELECT * FROM `".$prefix."modules` WHERE `rid`=:rid ORDER BY `ord` ASC"); + $scm->execute([':rid'=>$r['id']]); + $mout=''; + $mti=0; + while($rcm=$scm->fetch(PDO::FETCH_ASSOC)){ + $mti=$mti + $rcm['tti']; + $out=preg_replace([ + '//', + $rcm['tti']>0?'//':'~.*?<\/moduletime>~is', + '//' + ],[ + $rcm['title'], + $rcm['tti']>0?secondsToWords($rcm['tti']):'', + $rcm['caption'] + ],$moduleitem); + $mout.=$out; + } + $item=preg_replace([ + '/<[\/]?coursemodules>/', + '~.*?<\/moduleitems>~is', + $mti > 0?'/<[\/]?totaltime>/':'~.*?<\/totaltime>~is', + '//' + ],[ + '', + $mout, + '', + secondsToWords($mti), + ],$item); + }else + $item=preg_replace('~.*?<\/coursemodules>~is','',$item); + $itemQuantity=''; if($r['coming'][0]==1&&$r['contentType']=='inventory'){ $itemQuantity='Coming Soon'; @@ -620,6 +655,7 @@ $item=str_replace('','',$item); }else $item=str_replace('','',$item); + if(stristr($item,'')){ $item=preg_replace([ ($r['options'][7]==1&&$r['geo_position']!=''&&$config['mapapikey']!=''?'/<\/map>/':'~.*?<\/map>~is'), @@ -769,7 +805,7 @@ '"@type":"ImageObject",'. '"url":"'.($r['file']!=''&&file_exists('media/'.basename($r['file']))?'media/'.basename($r['file']):FAVICON).'"'. '},'. - '"author":"'.($ua['name']!=''?$ua['name']:$ua['username']).'",'. + '"author":"'.(isset($ua['name'])&&$ua['name']!=''?$ua['name']:(isset($ua['username'])&&$ua['username']!=''?$ua['username']:'')).'",'. '"genre":"'.($r['category_1']!=''?$r['category_1']:'None').($r['category_2']!=''?' > '.$r['category_2']:'').($r['category_3']!=''?' > '.$r['category_3']:'').($r['category_4']!=''?' > '.$r['category_4']:'').'",'. '"keywords":"'.$seoKeywords.'",'. '"wordcount":"'.strlen(strip_tags(escaper($r['notes']))).'",'. @@ -791,7 +827,7 @@ $item=preg_replace([ '//' ],[ - $ua['name']!=''?htmlspecialchars($ua['name'],ENT_QUOTES,'UTF-8'):htmlspecialchars($ua['username'],ENT_QUOTES,'UTF-8') + isset($ua['name'])&&$ua['name']!=''?htmlspecialchars($ua['name'],ENT_QUOTES,'UTF-8'):(isset($ua['username'])&&$ua['username']!=''?htmlspecialchars($ua['username'],ENT_QUOTES,'UTF-8'):'') ],$item); /* Related */ if($view=='article'||$view=='inventory'||$view=='service'||$view=='portfolio'&&stristr($item,' * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.17 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -68,7 +68,7 @@ (file_exists('media/md/'.basename($cover))?'media/md/'.$cover.' 600w,':''). (file_exists('media/sm/'.basename($cover))?'media/sm/'.$cover.' 400w,':''). (file_exists('media/sm/'.basename($cover))?'media/sm/'.$cover.' '.$config['mediaMaxWidthThumb'].'w':''). - '" src="media/'.$cover.'" sizes="(min-width: '.$config['mediaMaxWidth'].'px) '.$config['mediaMaxWidth'].'px" loading="lazy" alt="'.$page['title'].' Cover Image">'. + '" src="media/'.$cover.'" sizes="(min-width: '.$config['mediaMaxWidth'].'px) '.$config['mediaMaxWidth'].'px" alt="'.$page['title'].' Cover Image">'. ($page['attributionImageTitle']!=''? '
'. $page['attributionImageTitle']. @@ -355,7 +355,7 @@ $su->execute([':id'=>$r['uid']]); $ua=$su->fetch(PDO::FETCH_ASSOC); $itemQuantity=''; - if($r['coming'][0]==1&&$r['contentType']=='inventory') + if($r['coming']==1&&$r['contentType']=='inventory') $itemQuantity='Coming Soon'; else{ if(is_numeric($r['quantity'])) @@ -365,7 +365,7 @@ $r['thumb']=trim(rawurldecode($r['thumb'])); $items=preg_replace([ $r['contentType']=='inventory'&&$config['options'][5]==1?'/<[\/]?quickview>/':'~.*?<\/quickview>~is', - '//', + '//', '//', '//', '//', @@ -397,11 +397,11 @@ ($r['file']!=''&&file_exists('media/'.basename($r['file']))?'media/'.basename($r['file']):NOIMAGE), htmlspecialchars($r['fileALT']!=''?$r['fileALT']:$r['title'],ENT_QUOTES,'UTF-8'), (file_exists('media/'.basename($r['file']))?'media/'.basename($r['file']):NOIMAGE), - htmlspecialchars($r['title'],ENT_QUOTES,'UTF-8'), - URL.'profile/'.strtolower(str_replace(' ','-',htmlspecialchars($r['login_user'],ENT_QUOTES,'UTF-8'))).'/', - URL.str_replace(' ','-',htmlspecialchars($r['contentType'],ENT_QUOTES,'UTF-8')), + $r['title'], + URL.'profile/'.strtolower(str_replace(' ','-',$r['login_user'])).'/', + URL.str_replace(' ','-',$r['contentType']), URL.$r['contentType'].'/'.$r['urlSlug'].'/', - htmlspecialchars(($ua['name']!=''?$ua['name']:$ua['username']),ENT_QUOTES,'UTF-8'), + ($ua['name']!=''?$ua['name']:$ua['username']), date($config['dateFormat'],$r['ti']), date($theme['settings']['dateFormat'],$r['pti']), date($theme['settings']['dateFormat'],$r['eti']), @@ -411,7 +411,7 @@ $r['contentType'], str_replace(' ','-',strtolower($itemQuantity)), $itemQuantity, - $r['rank']>300?ucwords(str_replace('-',' ',rank($r['rank']))):'', + isset($r['rank'])&&$r['rank']>300?ucwords(str_replace('-',' ',rank($r['rank']))):'', rank($r['rank']), ($view=='index'?substr(strip_tags($r['notes']),0,300):strip_tags($r['notes'])) ],$items); /* help */ diff --git a/core/paypalpayment.php b/core/paypalpayment.php index 1cf394e..13142e6 100755 --- a/core/paypalpayment.php +++ b/core/paypalpayment.php @@ -7,27 +7,44 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.13 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ require'db.php'; $config=$db->query("SELECT * FROM `".$prefix."config` WHERE `id`='1'")->fetch(PDO::FETCH_ASSOC); $ti=time(); +$error=''; +if((!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')||$_SERVER['SERVER_PORT']==443){ + if(!defined('PROTOCOL'))define('PROTOCOL','https://'); +}else{ + if(!defined('PROTOCOL'))define('PROTOCOL','http://'); +} +define('URL',PROTOCOL.$_SERVER['HTTP_HOST'].$settings['system']['url'].'/'); $id=filter_input(INPUT_POST,'id',FILTER_SANITIZE_NUMBER_INT); $name=filter_input(INPUT_POST,'name',FILTER_UNSAFE_RAW); $email=filter_input(INPUT_POST,'email',FILTER_UNSAFE_RAW); $txnid=filter_input(INPUT_POST,'txnid',FILTER_UNSAFE_RAW); $paidAmount=filter_input(INPUT_POST,'amount',FILTER_SANITIZE_NUMBER_INT); $act=filter_input(INPUT_POST,'act',FILTER_UNSAFE_RAW; -$msg='error'; -$s=$db->prepare("SELECT * FROM `".$prefix."orders` WHERE `id`=:id"); +$s=$db->prepare("SELECT * FROM `".$prefix."orders` WHERE `id`=:id AND `status`!='archived'"); $s->execute([':id'=>$id]); +$payment_id=0; +$statusMsg=''; +$ordStatus='error'; if($s->rowCount()>0){ $r=$s->fetch(PDO::FETCH_ASSOC); +}else + $error='
Order Does NOT Exist!
'; +if($error==''){ $su=$db->prepare("SELECT * FROM `".$prefix."login` WHERE `id`=:uid"); $su->execute([':uid'=>$r['cid']]); - $ru=$su->fetch(PDO::FETCH_ASSOC); + if($su->rowCount()>0){ + $ru=$su->fetch(PDO::FETCH_ASSOC); + }else + $error='
User Does NOT Exist!
'; +} +if($error==''){ $st=$db->prepare("UPDATE `".$prefix."orders` SET `paid_via`=:paid_via,`txn_id`=:txn_id,`paid_email`=:paid_email,`paid_name`=:paid_name,`paid_amount`=:paid_amount,`payment_status`=:payment_status,`paid_ti`=:paid_ti,`status`=:status WHERE `id`=:id"); $st->execute([ ':id'=>$r['id'], @@ -40,8 +57,9 @@ ':paid_ti'=>time(), ':status'=>'paid' ]); - $sp=$db->prepare("SELECT `id`,`points`,`quantity` FROM `".$prefix."orderitems` WHERE `oid`=:oid"); - $sp->execute([':oid'=>$r['id']]); + $payment_id=$r['id']; + $sp=$db->prepare("SELECT `id`,`points`,`quantity` FROM `".$prefix."content` WHERE `id`=:id"); + $sp->execute([':id'=>$r['id']]); $points=0; while($rp=$sp->fetch(PDO::FETCH_ASSOC)){ if($rp['points']>0)$points=$points+($rp['points']*$rp['quantity']); @@ -51,44 +69,145 @@ ':id'=>$ru['id'], ':spent'=>$ru['spent']+$paidAmount, ':points'=>$ru['points']+$points, - ':pti'=>time() + ':pti'=>$ti ]); - $msg='success'; + $ordStatus="success"; + $statusMsg="Your Payment has been Successfull!"; $i=1; if($ru['email']!=''){ - $extlink=''; + require'phpmailer/PHPmailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; + $mail = new PHPMailer\PHPMailer\PHPMailer; + $mail->isSendMail(); + $mail->SetFrom($config['email'],$config['business']); + $mail->AddAddress($ru['email']); + $mail->isHTML(true); + $mail->Subject='Payment Confirmation from '.$config['business']; + $name=explode(' ',$ru['name']); + $msgd=''; + $msgl=''; + $msge=''; + $msgc=''; + $msg=($config['orderEmailLayout']!=''?$config['orderEmailLayout']:'

Hi {first},

Thank you for your payment.

{downloads}{links}{events}{courses}

You can view your invoice here: {order_link}

Kind Regards,
{business}

'); $soi=$db->prepare("SELECT `iid` FROM `".$prefix."orderitems` WHERE `oid`=:oid"); - $soi->execute([':oid'=>$r['id']]); - while($roi=$so->fetch(PDO::FETCH_ASSOC)){ - $si=$db->prepare("SELECT `contentType`,`title`,`exturl` FROM `".$prefix."content` WHERE `id`=:id"); - $si->execute([':id'=>$roi['iid']]); - while($ri=$si->fetch(PDO::FETCH_ASSOC)){ - $extlink.='Link for '.$ri['title'].'
'.$ri['exturl'].'

'; - $i++; + $soi->execute([':oid'=>$r['iid']]); + while($roi=$soi->fetch(PDO::FETCH_ASSOC)){ + $sd=$db->prepare("SELECT * FROM `".$prefix."choices` WHERE `rid`=:id AND `contentType`='download'"); + $sd->execute([':id'=>$roi['iid']]); + if($sd->rowCount()>0){ + while($rd=$sd->fetch(PDO::FETCH_ASSOC)){ + $msgd.='Test Link for '.($rd['title']!=''?$rd['title']:$rd['url']).' available'; + if($rd['tie']==0)$msgd.=' forever'; + if($rd['tie']==3600)$msgd.=' for 1 Hour'; + if($rd['tie']==7200)$msgd.=' for 2 Hours'; + if($rd['tie']==14400)$msgd.=' for 4 Hours'; + if($rd['tie']==28800)$msgd.=' for 8 Hours'; + if($rd['tie']==86400)$msgd.=' for 24 Hours'; + if($rd['tie']==172800)$msgd.=' for 48 Hours'; + if($rd['tie']==604800)$msgd.=' for 1 Week'; + if($rd['tie']==1209600)$msgd.=' for 2 Weeks'; + if($rd['tie']==2592000)$msgd.=' for 1 Month'; + if($rd['tie']==7776000)$msgd.=' for 3 Months'; + if($rd['tie']==15552000)$msgd.=' for 6 Months'; + if($rd['tie']==31536000)$msgd.=' for 1 Year'; + $msgd.='
'; + $i++; + } } - } - if($extlink!=''){ - require'phpmailer/class.phpmailer.php'; - $mail-new PHPMailer; - $mail-isSendMail(); - $mail->SetFrom($config['email'],$config['business']); - $mail->AddAddress($ru['email']); - $mail->isHTML(true); - $mail->Subject='Payment Confirmation and Event Link from '.$config['business']; - $name=explode(' ',$ru['name']); - $msg='Hi '.$name[0].'
'. - 'Thank you for your payment for the below event'.($i>1?'s':'')'.
'. - $extlink. - 'You can view your invoice via #'.$r['iid'].'
'. - 'Please contact us if you have further enquiries.

'. - 'Kind Regards,
'. - $config['business']; - $mail->Body=$msg; - $mail->AltBody=strip_tags(preg_replace('//i',"\n",$msg)); - if($mail->Send()){ - $msg='eventpaidlink'; + $sl=$db->prepare("SELECT * FROM `".$prefix."choices` WHERE `rid`=:id AND `contentType`='link'"); + $sl->execute([':id'=>$roi['iid']]); + if($sl->rowCount()>0){ + while($rl=$sl->fetch(PDO::FETCH_ASSOC)){ + $msgl.='Link for '.$rl['url'].' available'; + if($rl['tie']==0)$msgl.=' forever'; + if($rl['tie']==3600)$msgl.=' for 1 Hour'; + if($rl['tie']==7200)$msgl.=' for 2 Hours'; + if($rl['tie']==14400)$msgl.=' for 4 Hours'; + if($rl['tie']==28800)$msgl.=' for 8 Hours'; + if($rl['tie']==86400)$msgl.=' for 24 Hours'; + if($rl['tie']==172800)$msgl.=' for 48 Hours'; + if($rl['tie']==604800)$msgl.=' for 1 Week'; + if($rl['tie']==1209600)$msgl.=' for 2 Weeks'; + if($rl['tie']==2592000)$msgl.=' for 1 Month'; + if($rl['tie']==7776000)$msgl.=' for 3 Months'; + if($rl['tie']==15552000)$msgl.=' for 6 Months'; + if($rl['tie']==31536000)$msgl.=' for 1 Year'; + $msgl.='
'; + $i++; + } } + $se=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `id`=:id"); + $se->execute([':id'=>$roi['iid']]); + if($se->rowCount()>0){ + while($re=$se->fetch(PDO::FETCH_ASSOC)){ + if($re['contentType']=='event'){ + $msge.='Link for '.$re['title'].'
'.$re['title'].'
'; + } + if($re['contentType']=='course'){ + $sct=$db->prepare("INSERT INTO `".$prefix."courseTrack` (`rid`,`uid`,`complete`,`progress`,`attempts`,`score`,`ti`) VALUES (:rid,:uid,'',0,:attempts,0,:ti)"); + $sct->execute([ + ':rid'=>$re['id'], + ':uid'=>$ru['id'], + ':attempts'=>$re['attempts'], + ':ti'=>$ti + ]); + $msgc='

To access the Course/s purchased, it is required to be logged in. You can view purchased Courses via the "Courses" option in the logged in menu area.

'; + } + $i++; + } + } + } + $msg=str_replace([ + '{first}', + '{last}', + '{name}', + '{downloads}', + '{links}', + '{events}', + '{courses}', + '{order_link}', + '{business}', + ],[ + $name[0], + $name[1], + $ru['name'], + ($msgd!=''?'

Please use the link/s below to access your downloadable purchases:
'.$msgd.'

':''), + ($msgl!=''?'

Please use the link/s below to access your purchased links:
'.$msgl.'

':''), + ($msge!=''?$msge:''), + ($msgc!=''?$msgc:''), + '#'.$r['iid'].'', + $config['business'] + ],$msg); + $mail->Body=$msg; + $mail->AltBody=strip_tags(preg_replace('//i',"\n",$msg)); + if($mail->Send()){ + $msg='eventpaidlink'; } } +}else + $statusMsg="Your Payment has Failed!"; +$html=''; +$el='payment-info'; +if($error==''){ + if($payment_id>0){ + $html.='
'. + $statusMsg. + ($msgd!=''?'
Download links to your purchase are within the Confirmation Email that has been sent to the email associated with your account':''). + ($msgl!=''?'
Links associated with your purchase are within the Confirmation Email that has been sent to the email associated with your account':''). + ($msge!=''?'
Event links to your purchase are within the Confirmation Email that has been sent to the email associated with your account':''). + ($msgc!=''?'
You can access purchased Course/s via the Courses link in the logged in bar at the top of the page when logged in.
':''). + '

'. + 'Back to Order Page'. + '
'; + }else{ + $html.='
'. + 'There was an Issue Processing Your Payment!

'. + 'Back to Order Page'. + '
'; + } +}else{ + $el='payment-info'; + $html=$error; } -echo$msg; +echo''; diff --git a/core/phpmailer/Exception.php b/core/phpmailer/Exception.php new file mode 100644 index 0000000..52eaf95 --- /dev/null +++ b/core/phpmailer/Exception.php @@ -0,0 +1,40 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +namespace PHPMailer\PHPMailer; + +/** + * PHPMailer exception handler. + * + * @author Marcus Bointon + */ +class Exception extends \Exception +{ + /** + * Prettify error message output. + * + * @return string + */ + public function errorMessage() + { + return '' . htmlspecialchars($this->getMessage(), ENT_COMPAT | ENT_HTML401) . "
\n"; + } +} diff --git a/core/phpmailer/OAuth.php b/core/phpmailer/OAuth.php new file mode 100644 index 0000000..c1d5b77 --- /dev/null +++ b/core/phpmailer/OAuth.php @@ -0,0 +1,139 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +namespace PHPMailer\PHPMailer; + +use League\OAuth2\Client\Grant\RefreshToken; +use League\OAuth2\Client\Provider\AbstractProvider; +use League\OAuth2\Client\Token\AccessToken; + +/** + * OAuth - OAuth2 authentication wrapper class. + * Uses the oauth2-client package from the League of Extraordinary Packages. + * + * @see http://oauth2-client.thephpleague.com + * + * @author Marcus Bointon (Synchro/coolbru) + */ +class OAuth implements OAuthTokenProvider +{ + /** + * An instance of the League OAuth Client Provider. + * + * @var AbstractProvider + */ + protected $provider; + + /** + * The current OAuth access token. + * + * @var AccessToken + */ + protected $oauthToken; + + /** + * The user's email address, usually used as the login ID + * and also the from address when sending email. + * + * @var string + */ + protected $oauthUserEmail = ''; + + /** + * The client secret, generated in the app definition of the service you're connecting to. + * + * @var string + */ + protected $oauthClientSecret = ''; + + /** + * The client ID, generated in the app definition of the service you're connecting to. + * + * @var string + */ + protected $oauthClientId = ''; + + /** + * The refresh token, used to obtain new AccessTokens. + * + * @var string + */ + protected $oauthRefreshToken = ''; + + /** + * OAuth constructor. + * + * @param array $options Associative array containing + * `provider`, `userName`, `clientSecret`, `clientId` and `refreshToken` elements + */ + public function __construct($options) + { + $this->provider = $options['provider']; + $this->oauthUserEmail = $options['userName']; + $this->oauthClientSecret = $options['clientSecret']; + $this->oauthClientId = $options['clientId']; + $this->oauthRefreshToken = $options['refreshToken']; + } + + /** + * Get a new RefreshToken. + * + * @return RefreshToken + */ + protected function getGrant() + { + return new RefreshToken(); + } + + /** + * Get a new AccessToken. + * + * @return AccessToken + */ + protected function getToken() + { + return $this->provider->getAccessToken( + $this->getGrant(), + ['refresh_token' => $this->oauthRefreshToken] + ); + } + + /** + * Generate a base64-encoded OAuth token. + * + * @return string + */ + public function getOauth64() + { + //Get a new token if it's not available or has expired + if (null === $this->oauthToken || $this->oauthToken->hasExpired()) { + $this->oauthToken = $this->getToken(); + } + + return base64_encode( + 'user=' . + $this->oauthUserEmail . + "\001auth=Bearer " . + $this->oauthToken . + "\001\001" + ); + } +} diff --git a/core/phpmailer/OAuthTokenProvider.php b/core/phpmailer/OAuthTokenProvider.php new file mode 100644 index 0000000..1155507 --- /dev/null +++ b/core/phpmailer/OAuthTokenProvider.php @@ -0,0 +1,44 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +namespace PHPMailer\PHPMailer; + +/** + * OAuthTokenProvider - OAuth2 token provider interface. + * Provides base64 encoded OAuth2 auth strings for SMTP authentication. + * + * @see OAuth + * @see SMTP::authenticate() + * + * @author Peter Scopes (pdscopes) + * @author Marcus Bointon (Synchro/coolbru) + */ +interface OAuthTokenProvider +{ + /** + * Generate a base64-encoded OAuth token ensuring that the access token has not expired. + * The string to be base 64 encoded should be in the form: + * "user=\001auth=Bearer \001\001" + * + * @return string + */ + public function getOauth64(); +} diff --git a/core/phpmailer/PHPMailer.php b/core/phpmailer/PHPMailer.php new file mode 100644 index 0000000..6590a0e --- /dev/null +++ b/core/phpmailer/PHPMailer.php @@ -0,0 +1,5077 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +namespace PHPMailer\PHPMailer; + +/** + * PHPMailer - PHP email creation and transport class. + * + * @author Marcus Bointon (Synchro/coolbru) + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + */ +class PHPMailer +{ + const CHARSET_ASCII = 'us-ascii'; + const CHARSET_ISO88591 = 'iso-8859-1'; + const CHARSET_UTF8 = 'utf-8'; + + const CONTENT_TYPE_PLAINTEXT = 'text/plain'; + const CONTENT_TYPE_TEXT_CALENDAR = 'text/calendar'; + const CONTENT_TYPE_TEXT_HTML = 'text/html'; + const CONTENT_TYPE_MULTIPART_ALTERNATIVE = 'multipart/alternative'; + const CONTENT_TYPE_MULTIPART_MIXED = 'multipart/mixed'; + const CONTENT_TYPE_MULTIPART_RELATED = 'multipart/related'; + + const ENCODING_7BIT = '7bit'; + const ENCODING_8BIT = '8bit'; + const ENCODING_BASE64 = 'base64'; + const ENCODING_BINARY = 'binary'; + const ENCODING_QUOTED_PRINTABLE = 'quoted-printable'; + + const ENCRYPTION_STARTTLS = 'tls'; + const ENCRYPTION_SMTPS = 'ssl'; + + const ICAL_METHOD_REQUEST = 'REQUEST'; + const ICAL_METHOD_PUBLISH = 'PUBLISH'; + const ICAL_METHOD_REPLY = 'REPLY'; + const ICAL_METHOD_ADD = 'ADD'; + const ICAL_METHOD_CANCEL = 'CANCEL'; + const ICAL_METHOD_REFRESH = 'REFRESH'; + const ICAL_METHOD_COUNTER = 'COUNTER'; + const ICAL_METHOD_DECLINECOUNTER = 'DECLINECOUNTER'; + + /** + * Email priority. + * Options: null (default), 1 = High, 3 = Normal, 5 = low. + * When null, the header is not set at all. + * + * @var int|null + */ + public $Priority; + + /** + * The character set of the message. + * + * @var string + */ + public $CharSet = self::CHARSET_ISO88591; + + /** + * The MIME Content-type of the message. + * + * @var string + */ + public $ContentType = self::CONTENT_TYPE_PLAINTEXT; + + /** + * The message encoding. + * Options: "8bit", "7bit", "binary", "base64", and "quoted-printable". + * + * @var string + */ + public $Encoding = self::ENCODING_8BIT; + + /** + * Holds the most recent mailer error message. + * + * @var string + */ + public $ErrorInfo = ''; + + /** + * The From email address for the message. + * + * @var string + */ + public $From = ''; + + /** + * The From name of the message. + * + * @var string + */ + public $FromName = ''; + + /** + * The envelope sender of the message. + * This will usually be turned into a Return-Path header by the receiver, + * and is the address that bounces will be sent to. + * If not empty, will be passed via `-f` to sendmail or as the 'MAIL FROM' value over SMTP. + * + * @var string + */ + public $Sender = ''; + + /** + * The Subject of the message. + * + * @var string + */ + public $Subject = ''; + + /** + * An HTML or plain text message body. + * If HTML then call isHTML(true). + * + * @var string + */ + public $Body = ''; + + /** + * The plain-text message body. + * This body can be read by mail clients that do not have HTML email + * capability such as mutt & Eudora. + * Clients that can read HTML will view the normal Body. + * + * @var string + */ + public $AltBody = ''; + + /** + * An iCal message part body. + * Only supported in simple alt or alt_inline message types + * To generate iCal event structures, use classes like EasyPeasyICS or iCalcreator. + * + * @see http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/ + * @see http://kigkonsult.se/iCalcreator/ + * + * @var string + */ + public $Ical = ''; + + /** + * Value-array of "method" in Contenttype header "text/calendar" + * + * @var string[] + */ + protected static $IcalMethods = [ + self::ICAL_METHOD_REQUEST, + self::ICAL_METHOD_PUBLISH, + self::ICAL_METHOD_REPLY, + self::ICAL_METHOD_ADD, + self::ICAL_METHOD_CANCEL, + self::ICAL_METHOD_REFRESH, + self::ICAL_METHOD_COUNTER, + self::ICAL_METHOD_DECLINECOUNTER, + ]; + + /** + * The complete compiled MIME message body. + * + * @var string + */ + protected $MIMEBody = ''; + + /** + * The complete compiled MIME message headers. + * + * @var string + */ + protected $MIMEHeader = ''; + + /** + * Extra headers that createHeader() doesn't fold in. + * + * @var string + */ + protected $mailHeader = ''; + + /** + * Word-wrap the message body to this number of chars. + * Set to 0 to not wrap. A useful value here is 78, for RFC2822 section 2.1.1 compliance. + * + * @see static::STD_LINE_LENGTH + * + * @var int + */ + public $WordWrap = 0; + + /** + * Which method to use to send mail. + * Options: "mail", "sendmail", or "smtp". + * + * @var string + */ + public $Mailer = 'mail'; + + /** + * The path to the sendmail program. + * + * @var string + */ + public $Sendmail = '/usr/sbin/sendmail'; + + /** + * Whether mail() uses a fully sendmail-compatible MTA. + * One which supports sendmail's "-oi -f" options. + * + * @var bool + */ + public $UseSendmailOptions = true; + + /** + * The email address that a reading confirmation should be sent to, also known as read receipt. + * + * @var string + */ + public $ConfirmReadingTo = ''; + + /** + * The hostname to use in the Message-ID header and as default HELO string. + * If empty, PHPMailer attempts to find one with, in order, + * $_SERVER['SERVER_NAME'], gethostname(), php_uname('n'), or the value + * 'localhost.localdomain'. + * + * @see PHPMailer::$Helo + * + * @var string + */ + public $Hostname = ''; + + /** + * An ID to be used in the Message-ID header. + * If empty, a unique id will be generated. + * You can set your own, but it must be in the format "", + * as defined in RFC5322 section 3.6.4 or it will be ignored. + * + * @see https://tools.ietf.org/html/rfc5322#section-3.6.4 + * + * @var string + */ + public $MessageID = ''; + + /** + * The message Date to be used in the Date header. + * If empty, the current date will be added. + * + * @var string + */ + public $MessageDate = ''; + + /** + * SMTP hosts. + * Either a single hostname or multiple semicolon-delimited hostnames. + * You can also specify a different port + * for each host by using this format: [hostname:port] + * (e.g. "smtp1.example.com:25;smtp2.example.com"). + * You can also specify encryption type, for example: + * (e.g. "tls://smtp1.example.com:587;ssl://smtp2.example.com:465"). + * Hosts will be tried in order. + * + * @var string + */ + public $Host = 'localhost'; + + /** + * The default SMTP server port. + * + * @var int + */ + public $Port = 25; + + /** + * The SMTP HELO/EHLO name used for the SMTP connection. + * Default is $Hostname. If $Hostname is empty, PHPMailer attempts to find + * one with the same method described above for $Hostname. + * + * @see PHPMailer::$Hostname + * + * @var string + */ + public $Helo = ''; + + /** + * What kind of encryption to use on the SMTP connection. + * Options: '', static::ENCRYPTION_STARTTLS, or static::ENCRYPTION_SMTPS. + * + * @var string + */ + public $SMTPSecure = ''; + + /** + * Whether to enable TLS encryption automatically if a server supports it, + * even if `SMTPSecure` is not set to 'tls'. + * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid. + * + * @var bool + */ + public $SMTPAutoTLS = true; + + /** + * Whether to use SMTP authentication. + * Uses the Username and Password properties. + * + * @see PHPMailer::$Username + * @see PHPMailer::$Password + * + * @var bool + */ + public $SMTPAuth = false; + + /** + * Options array passed to stream_context_create when connecting via SMTP. + * + * @var array + */ + public $SMTPOptions = []; + + /** + * SMTP username. + * + * @var string + */ + public $Username = ''; + + /** + * SMTP password. + * + * @var string + */ + public $Password = ''; + + /** + * SMTP auth type. + * Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2, attempted in that order if not specified. + * + * @var string + */ + public $AuthType = ''; + + /** + * An implementation of the PHPMailer OAuthTokenProvider interface. + * + * @var OAuthTokenProvider + */ + protected $oauth; + + /** + * The SMTP server timeout in seconds. + * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2. + * + * @var int + */ + public $Timeout = 300; + + /** + * Comma separated list of DSN notifications + * 'NEVER' under no circumstances a DSN must be returned to the sender. + * If you use NEVER all other notifications will be ignored. + * 'SUCCESS' will notify you when your mail has arrived at its destination. + * 'FAILURE' will arrive if an error occurred during delivery. + * 'DELAY' will notify you if there is an unusual delay in delivery, but the actual + * delivery's outcome (success or failure) is not yet decided. + * + * @see https://tools.ietf.org/html/rfc3461 See section 4.1 for more information about NOTIFY + */ + public $dsn = ''; + + /** + * SMTP class debug output mode. + * Debug output level. + * Options: + * @see SMTP::DEBUG_OFF: No output + * @see SMTP::DEBUG_CLIENT: Client messages + * @see SMTP::DEBUG_SERVER: Client and server messages + * @see SMTP::DEBUG_CONNECTION: As SERVER plus connection status + * @see SMTP::DEBUG_LOWLEVEL: Noisy, low-level data output, rarely needed + * + * @see SMTP::$do_debug + * + * @var int + */ + public $SMTPDebug = 0; + + /** + * How to handle debug output. + * Options: + * * `echo` Output plain-text as-is, appropriate for CLI + * * `html` Output escaped, line breaks converted to `
`, appropriate for browser output + * * `error_log` Output to error log as configured in php.ini + * By default PHPMailer will use `echo` if run from a `cli` or `cli-server` SAPI, `html` otherwise. + * Alternatively, you can provide a callable expecting two params: a message string and the debug level: + * + * ```php + * $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";}; + * ``` + * + * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug` + * level output is used: + * + * ```php + * $mail->Debugoutput = new myPsr3Logger; + * ``` + * + * @see SMTP::$Debugoutput + * + * @var string|callable|\Psr\Log\LoggerInterface + */ + public $Debugoutput = 'echo'; + + /** + * Whether to keep the SMTP connection open after each message. + * If this is set to true then the connection will remain open after a send, + * and closing the connection will require an explicit call to smtpClose(). + * It's a good idea to use this if you are sending multiple messages as it reduces overhead. + * See the mailing list example for how to use it. + * + * @var bool + */ + public $SMTPKeepAlive = false; + + /** + * Whether to split multiple to addresses into multiple messages + * or send them all in one message. + * Only supported in `mail` and `sendmail` transports, not in SMTP. + * + * @var bool + * + * @deprecated 6.0.0 PHPMailer isn't a mailing list manager! + */ + public $SingleTo = false; + + /** + * Storage for addresses when SingleTo is enabled. + * + * @var array + */ + protected $SingleToArray = []; + + /** + * Whether to generate VERP addresses on send. + * Only applicable when sending via SMTP. + * + * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path + * @see http://www.postfix.org/VERP_README.html Postfix VERP info + * + * @var bool + */ + public $do_verp = false; + + /** + * Whether to allow sending messages with an empty body. + * + * @var bool + */ + public $AllowEmpty = false; + + /** + * DKIM selector. + * + * @var string + */ + public $DKIM_selector = ''; + + /** + * DKIM Identity. + * Usually the email address used as the source of the email. + * + * @var string + */ + public $DKIM_identity = ''; + + /** + * DKIM passphrase. + * Used if your key is encrypted. + * + * @var string + */ + public $DKIM_passphrase = ''; + + /** + * DKIM signing domain name. + * + * @example 'example.com' + * + * @var string + */ + public $DKIM_domain = ''; + + /** + * DKIM Copy header field values for diagnostic use. + * + * @var bool + */ + public $DKIM_copyHeaderFields = true; + + /** + * DKIM Extra signing headers. + * + * @example ['List-Unsubscribe', 'List-Help'] + * + * @var array + */ + public $DKIM_extraHeaders = []; + + /** + * DKIM private key file path. + * + * @var string + */ + public $DKIM_private = ''; + + /** + * DKIM private key string. + * + * If set, takes precedence over `$DKIM_private`. + * + * @var string + */ + public $DKIM_private_string = ''; + + /** + * Callback Action function name. + * + * The function that handles the result of the send email action. + * It is called out by send() for each email sent. + * + * Value can be any php callable: http://www.php.net/is_callable + * + * Parameters: + * bool $result result of the send action + * array $to email addresses of the recipients + * array $cc cc email addresses + * array $bcc bcc email addresses + * string $subject the subject + * string $body the email body + * string $from email address of sender + * string $extra extra information of possible use + * "smtp_transaction_id' => last smtp transaction id + * + * @var string + */ + public $action_function = ''; + + /** + * What to put in the X-Mailer header. + * Options: An empty string for PHPMailer default, whitespace/null for none, or a string to use. + * + * @var string|null + */ + public $XMailer = ''; + + /** + * Which validator to use by default when validating email addresses. + * May be a callable to inject your own validator, but there are several built-in validators. + * The default validator uses PHP's FILTER_VALIDATE_EMAIL filter_var option. + * + * @see PHPMailer::validateAddress() + * + * @var string|callable + */ + public static $validator = 'php'; + + /** + * An instance of the SMTP sender class. + * + * @var SMTP + */ + protected $smtp; + + /** + * The array of 'to' names and addresses. + * + * @var array + */ + protected $to = []; + + /** + * The array of 'cc' names and addresses. + * + * @var array + */ + protected $cc = []; + + /** + * The array of 'bcc' names and addresses. + * + * @var array + */ + protected $bcc = []; + + /** + * The array of reply-to names and addresses. + * + * @var array + */ + protected $ReplyTo = []; + + /** + * An array of all kinds of addresses. + * Includes all of $to, $cc, $bcc. + * + * @see PHPMailer::$to + * @see PHPMailer::$cc + * @see PHPMailer::$bcc + * + * @var array + */ + protected $all_recipients = []; + + /** + * An array of names and addresses queued for validation. + * In send(), valid and non duplicate entries are moved to $all_recipients + * and one of $to, $cc, or $bcc. + * This array is used only for addresses with IDN. + * + * @see PHPMailer::$to + * @see PHPMailer::$cc + * @see PHPMailer::$bcc + * @see PHPMailer::$all_recipients + * + * @var array + */ + protected $RecipientsQueue = []; + + /** + * An array of reply-to names and addresses queued for validation. + * In send(), valid and non duplicate entries are moved to $ReplyTo. + * This array is used only for addresses with IDN. + * + * @see PHPMailer::$ReplyTo + * + * @var array + */ + protected $ReplyToQueue = []; + + /** + * The array of attachments. + * + * @var array + */ + protected $attachment = []; + + /** + * The array of custom headers. + * + * @var array + */ + protected $CustomHeader = []; + + /** + * The most recent Message-ID (including angular brackets). + * + * @var string + */ + protected $lastMessageID = ''; + + /** + * The message's MIME type. + * + * @var string + */ + protected $message_type = ''; + + /** + * The array of MIME boundary strings. + * + * @var array + */ + protected $boundary = []; + + /** + * The array of available text strings for the current language. + * + * @var array + */ + protected $language = []; + + /** + * The number of errors encountered. + * + * @var int + */ + protected $error_count = 0; + + /** + * The S/MIME certificate file path. + * + * @var string + */ + protected $sign_cert_file = ''; + + /** + * The S/MIME key file path. + * + * @var string + */ + protected $sign_key_file = ''; + + /** + * The optional S/MIME extra certificates ("CA Chain") file path. + * + * @var string + */ + protected $sign_extracerts_file = ''; + + /** + * The S/MIME password for the key. + * Used only if the key is encrypted. + * + * @var string + */ + protected $sign_key_pass = ''; + + /** + * Whether to throw exceptions for errors. + * + * @var bool + */ + protected $exceptions = false; + + /** + * Unique ID used for message ID and boundaries. + * + * @var string + */ + protected $uniqueid = ''; + + /** + * The PHPMailer Version number. + * + * @var string + */ + const VERSION = '6.6.3'; + + /** + * Error severity: message only, continue processing. + * + * @var int + */ + const STOP_MESSAGE = 0; + + /** + * Error severity: message, likely ok to continue processing. + * + * @var int + */ + const STOP_CONTINUE = 1; + + /** + * Error severity: message, plus full stop, critical error reached. + * + * @var int + */ + const STOP_CRITICAL = 2; + + /** + * The SMTP standard CRLF line break. + * If you want to change line break format, change static::$LE, not this. + */ + const CRLF = "\r\n"; + + /** + * "Folding White Space" a white space string used for line folding. + */ + const FWS = ' '; + + /** + * SMTP RFC standard line ending; Carriage Return, Line Feed. + * + * @var string + */ + protected static $LE = self::CRLF; + + /** + * The maximum line length supported by mail(). + * + * Background: mail() will sometimes corrupt messages + * with headers headers longer than 65 chars, see #818. + * + * @var int + */ + const MAIL_MAX_LINE_LENGTH = 63; + + /** + * The maximum line length allowed by RFC 2822 section 2.1.1. + * + * @var int + */ + const MAX_LINE_LENGTH = 998; + + /** + * The lower maximum line length allowed by RFC 2822 section 2.1.1. + * This length does NOT include the line break + * 76 means that lines will be 77 or 78 chars depending on whether + * the line break format is LF or CRLF; both are valid. + * + * @var int + */ + const STD_LINE_LENGTH = 76; + + /** + * Constructor. + * + * @param bool $exceptions Should we throw external exceptions? + */ + public function __construct($exceptions = null) + { + if (null !== $exceptions) { + $this->exceptions = (bool) $exceptions; + } + //Pick an appropriate debug output format automatically + $this->Debugoutput = (strpos(PHP_SAPI, 'cli') !== false ? 'echo' : 'html'); + } + + /** + * Destructor. + */ + public function __destruct() + { + //Close any open SMTP connection nicely + $this->smtpClose(); + } + + /** + * Call mail() in a safe_mode-aware fashion. + * Also, unless sendmail_path points to sendmail (or something that + * claims to be sendmail), don't pass params (not a perfect fix, + * but it will do). + * + * @param string $to To + * @param string $subject Subject + * @param string $body Message Body + * @param string $header Additional Header(s) + * @param string|null $params Params + * + * @return bool + */ + private function mailPassthru($to, $subject, $body, $header, $params) + { + //Check overloading of mail function to avoid double-encoding + if (ini_get('mbstring.func_overload') & 1) { + $subject = $this->secureHeader($subject); + } else { + $subject = $this->encodeHeader($this->secureHeader($subject)); + } + //Calling mail() with null params breaks + $this->edebug('Sending with mail()'); + $this->edebug('Sendmail path: ' . ini_get('sendmail_path')); + $this->edebug("Envelope sender: {$this->Sender}"); + $this->edebug("To: {$to}"); + $this->edebug("Subject: {$subject}"); + $this->edebug("Headers: {$header}"); + if (!$this->UseSendmailOptions || null === $params) { + $result = @mail($to, $subject, $body, $header); + } else { + $this->edebug("Additional params: {$params}"); + $result = @mail($to, $subject, $body, $header, $params); + } + $this->edebug('Result: ' . ($result ? 'true' : 'false')); + return $result; + } + + /** + * Output debugging info via a user-defined method. + * Only generates output if debug output is enabled. + * + * @see PHPMailer::$Debugoutput + * @see PHPMailer::$SMTPDebug + * + * @param string $str + */ + protected function edebug($str) + { + if ($this->SMTPDebug <= 0) { + return; + } + //Is this a PSR-3 logger? + if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) { + $this->Debugoutput->debug($str); + + return; + } + //Avoid clash with built-in function names + if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) { + call_user_func($this->Debugoutput, $str, $this->SMTPDebug); + + return; + } + switch ($this->Debugoutput) { + case 'error_log': + //Don't output, just log + /** @noinspection ForgottenDebugOutputInspection */ + error_log($str); + break; + case 'html': + //Cleans up output a bit for a better looking, HTML-safe output + echo htmlentities( + preg_replace('/[\r\n]+/', '', $str), + ENT_QUOTES, + 'UTF-8' + ), "
\n"; + break; + case 'echo': + default: + //Normalize line breaks + $str = preg_replace('/\r\n|\r/m', "\n", $str); + echo gmdate('Y-m-d H:i:s'), + "\t", + //Trim trailing space + trim( + //Indent for readability, except for trailing break + str_replace( + "\n", + "\n \t ", + trim($str) + ) + ), + "\n"; + } + } + + /** + * Sets message type to HTML or plain. + * + * @param bool $isHtml True for HTML mode + */ + public function isHTML($isHtml = true) + { + if ($isHtml) { + $this->ContentType = static::CONTENT_TYPE_TEXT_HTML; + } else { + $this->ContentType = static::CONTENT_TYPE_PLAINTEXT; + } + } + + /** + * Send messages using SMTP. + */ + public function isSMTP() + { + $this->Mailer = 'smtp'; + } + + /** + * Send messages using PHP's mail() function. + */ + public function isMail() + { + $this->Mailer = 'mail'; + } + + /** + * Send messages using $Sendmail. + */ + public function isSendmail() + { + $ini_sendmail_path = ini_get('sendmail_path'); + + if (false === stripos($ini_sendmail_path, 'sendmail')) { + $this->Sendmail = '/usr/sbin/sendmail'; + } else { + $this->Sendmail = $ini_sendmail_path; + } + $this->Mailer = 'sendmail'; + } + + /** + * Send messages using qmail. + */ + public function isQmail() + { + $ini_sendmail_path = ini_get('sendmail_path'); + + if (false === stripos($ini_sendmail_path, 'qmail')) { + $this->Sendmail = '/var/qmail/bin/qmail-inject'; + } else { + $this->Sendmail = $ini_sendmail_path; + } + $this->Mailer = 'qmail'; + } + + /** + * Add a "To" address. + * + * @param string $address The email address to send to + * @param string $name + * + * @throws Exception + * + * @return bool true on success, false if address already used or invalid in some way + */ + public function addAddress($address, $name = '') + { + return $this->addOrEnqueueAnAddress('to', $address, $name); + } + + /** + * Add a "CC" address. + * + * @param string $address The email address to send to + * @param string $name + * + * @throws Exception + * + * @return bool true on success, false if address already used or invalid in some way + */ + public function addCC($address, $name = '') + { + return $this->addOrEnqueueAnAddress('cc', $address, $name); + } + + /** + * Add a "BCC" address. + * + * @param string $address The email address to send to + * @param string $name + * + * @throws Exception + * + * @return bool true on success, false if address already used or invalid in some way + */ + public function addBCC($address, $name = '') + { + return $this->addOrEnqueueAnAddress('bcc', $address, $name); + } + + /** + * Add a "Reply-To" address. + * + * @param string $address The email address to reply to + * @param string $name + * + * @throws Exception + * + * @return bool true on success, false if address already used or invalid in some way + */ + public function addReplyTo($address, $name = '') + { + return $this->addOrEnqueueAnAddress('Reply-To', $address, $name); + } + + /** + * Add an address to one of the recipient arrays or to the ReplyTo array. Because PHPMailer + * can't validate addresses with an IDN without knowing the PHPMailer::$CharSet (that can still + * be modified after calling this function), addition of such addresses is delayed until send(). + * Addresses that have been added already return false, but do not throw exceptions. + * + * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo' + * @param string $address The email address + * @param string $name An optional username associated with the address + * + * @throws Exception + * + * @return bool true on success, false if address already used or invalid in some way + */ + protected function addOrEnqueueAnAddress($kind, $address, $name) + { + $pos = false; + if ($address !== null) { + $address = trim($address); + $pos = strrpos($address, '@'); + } + if (false === $pos) { + //At-sign is missing. + $error_message = sprintf( + '%s (%s): %s', + $this->lang('invalid_address'), + $kind, + $address + ); + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new Exception($error_message); + } + + return false; + } + if ($name !== null) { + $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim + } else { + $name = ''; + } + $params = [$kind, $address, $name]; + //Enqueue addresses with IDN until we know the PHPMailer::$CharSet. + //Domain is assumed to be whatever is after the last @ symbol in the address + if (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) { + if ('Reply-To' !== $kind) { + if (!array_key_exists($address, $this->RecipientsQueue)) { + $this->RecipientsQueue[$address] = $params; + + return true; + } + } elseif (!array_key_exists($address, $this->ReplyToQueue)) { + $this->ReplyToQueue[$address] = $params; + + return true; + } + + return false; + } + + //Immediately add standard addresses without IDN. + return call_user_func_array([$this, 'addAnAddress'], $params); + } + + /** + * Add an address to one of the recipient arrays or to the ReplyTo array. + * Addresses that have been added already return false, but do not throw exceptions. + * + * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo' + * @param string $address The email address to send, resp. to reply to + * @param string $name + * + * @throws Exception + * + * @return bool true on success, false if address already used or invalid in some way + */ + protected function addAnAddress($kind, $address, $name = '') + { + if (!in_array($kind, ['to', 'cc', 'bcc', 'Reply-To'])) { + $error_message = sprintf( + '%s: %s', + $this->lang('Invalid recipient kind'), + $kind + ); + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new Exception($error_message); + } + + return false; + } + if (!static::validateAddress($address)) { + $error_message = sprintf( + '%s (%s): %s', + $this->lang('invalid_address'), + $kind, + $address + ); + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new Exception($error_message); + } + + return false; + } + if ('Reply-To' !== $kind) { + if (!array_key_exists(strtolower($address), $this->all_recipients)) { + $this->{$kind}[] = [$address, $name]; + $this->all_recipients[strtolower($address)] = true; + + return true; + } + } elseif (!array_key_exists(strtolower($address), $this->ReplyTo)) { + $this->ReplyTo[strtolower($address)] = [$address, $name]; + + return true; + } + + return false; + } + + /** + * Parse and validate a string containing one or more RFC822-style comma-separated email addresses + * of the form "display name
" into an array of name/address pairs. + * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available. + * Note that quotes in the name part are removed. + * + * @see http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation + * + * @param string $addrstr The address list string + * @param bool $useimap Whether to use the IMAP extension to parse the list + * @param string $charset The charset to use when decoding the address list string. + * + * @return array + */ + public static function parseAddresses($addrstr, $useimap = true, $charset = self::CHARSET_ISO88591) + { + $addresses = []; + if ($useimap && function_exists('imap_rfc822_parse_adrlist')) { + //Use this built-in parser if it's available + $list = imap_rfc822_parse_adrlist($addrstr, ''); + // Clear any potential IMAP errors to get rid of notices being thrown at end of script. + imap_errors(); + foreach ($list as $address) { + if ( + '.SYNTAX-ERROR.' !== $address->host && + static::validateAddress($address->mailbox . '@' . $address->host) + ) { + //Decode the name part if it's present and encoded + if ( + property_exists($address, 'personal') && + //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled + defined('MB_CASE_UPPER') && + preg_match('/^=\?.*\?=$/s', $address->personal) + ) { + $origCharset = mb_internal_encoding(); + mb_internal_encoding($charset); + //Undo any RFC2047-encoded spaces-as-underscores + $address->personal = str_replace('_', '=20', $address->personal); + //Decode the name + $address->personal = mb_decode_mimeheader($address->personal); + mb_internal_encoding($origCharset); + } + + $addresses[] = [ + 'name' => (property_exists($address, 'personal') ? $address->personal : ''), + 'address' => $address->mailbox . '@' . $address->host, + ]; + } + } + } else { + //Use this simpler parser + $list = explode(',', $addrstr); + foreach ($list as $address) { + $address = trim($address); + //Is there a separate name part? + if (strpos($address, '<') === false) { + //No separate name, just use the whole thing + if (static::validateAddress($address)) { + $addresses[] = [ + 'name' => '', + 'address' => $address, + ]; + } + } else { + list($name, $email) = explode('<', $address); + $email = trim(str_replace('>', '', $email)); + $name = trim($name); + if (static::validateAddress($email)) { + //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled + //If this name is encoded, decode it + if (defined('MB_CASE_UPPER') && preg_match('/^=\?.*\?=$/s', $name)) { + $origCharset = mb_internal_encoding(); + mb_internal_encoding($charset); + //Undo any RFC2047-encoded spaces-as-underscores + $name = str_replace('_', '=20', $name); + //Decode the name + $name = mb_decode_mimeheader($name); + mb_internal_encoding($origCharset); + } + $addresses[] = [ + //Remove any surrounding quotes and spaces from the name + 'name' => trim($name, '\'" '), + 'address' => $email, + ]; + } + } + } + } + + return $addresses; + } + + /** + * Set the From and FromName properties. + * + * @param string $address + * @param string $name + * @param bool $auto Whether to also set the Sender address, defaults to true + * + * @throws Exception + * + * @return bool + */ + public function setFrom($address, $name = '', $auto = true) + { + $address = trim($address); + $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim + //Don't validate now addresses with IDN. Will be done in send(). + $pos = strrpos($address, '@'); + if ( + (false === $pos) + || ((!$this->has8bitChars(substr($address, ++$pos)) || !static::idnSupported()) + && !static::validateAddress($address)) + ) { + $error_message = sprintf( + '%s (From): %s', + $this->lang('invalid_address'), + $address + ); + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new Exception($error_message); + } + + return false; + } + $this->From = $address; + $this->FromName = $name; + if ($auto && empty($this->Sender)) { + $this->Sender = $address; + } + + return true; + } + + /** + * Return the Message-ID header of the last email. + * Technically this is the value from the last time the headers were created, + * but it's also the message ID of the last sent message except in + * pathological cases. + * + * @return string + */ + public function getLastMessageID() + { + return $this->lastMessageID; + } + + /** + * Check that a string looks like an email address. + * Validation patterns supported: + * * `auto` Pick best pattern automatically; + * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0; + * * `pcre` Use old PCRE implementation; + * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL; + * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements. + * * `noregex` Don't use a regex: super fast, really dumb. + * Alternatively you may pass in a callable to inject your own validator, for example: + * + * ```php + * PHPMailer::validateAddress('user@example.com', function($address) { + * return (strpos($address, '@') !== false); + * }); + * ``` + * + * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator. + * + * @param string $address The email address to check + * @param string|callable $patternselect Which pattern to use + * + * @return bool + */ + public static function validateAddress($address, $patternselect = null) + { + if (null === $patternselect) { + $patternselect = static::$validator; + } + //Don't allow strings as callables, see SECURITY.md and CVE-2021-3603 + if (is_callable($patternselect) && !is_string($patternselect)) { + return call_user_func($patternselect, $address); + } + //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321 + if (strpos($address, "\n") !== false || strpos($address, "\r") !== false) { + return false; + } + switch ($patternselect) { + case 'pcre': //Kept for BC + case 'pcre8': + /* + * A more complex and more permissive version of the RFC5322 regex on which FILTER_VALIDATE_EMAIL + * is based. + * In addition to the addresses allowed by filter_var, also permits: + * * dotless domains: `a@b` + * * comments: `1234 @ local(blah) .machine .example` + * * quoted elements: `'"test blah"@example.org'` + * * numeric TLDs: `a@b.123` + * * unbracketed IPv4 literals: `a@192.168.0.1` + * * IPv6 literals: 'first.last@[IPv6:a1::]' + * Not all of these will necessarily work for sending! + * + * @see http://squiloople.com/2009/12/20/email-address-validation/ + * @copyright 2009-2010 Michael Rushton + * Feel free to use and redistribute this code. But please keep this copyright notice. + */ + return (bool) preg_match( + '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' . + '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' . + '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' . + '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' . + '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' . + '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' . + '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' . + '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' . + '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD', + $address + ); + case 'html5': + /* + * This is the pattern used in the HTML5 spec for validation of 'email' type form input elements. + * + * @see https://html.spec.whatwg.org/#e-mail-state-(type=email) + */ + return (bool) preg_match( + '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' . + '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD', + $address + ); + case 'php': + default: + return filter_var($address, FILTER_VALIDATE_EMAIL) !== false; + } + } + + /** + * Tells whether IDNs (Internationalized Domain Names) are supported or not. This requires the + * `intl` and `mbstring` PHP extensions. + * + * @return bool `true` if required functions for IDN support are present + */ + public static function idnSupported() + { + return function_exists('idn_to_ascii') && function_exists('mb_convert_encoding'); + } + + /** + * Converts IDN in given email address to its ASCII form, also known as punycode, if possible. + * Important: Address must be passed in same encoding as currently set in PHPMailer::$CharSet. + * This function silently returns unmodified address if: + * - No conversion is necessary (i.e. domain name is not an IDN, or is already in ASCII form) + * - Conversion to punycode is impossible (e.g. required PHP functions are not available) + * or fails for any reason (e.g. domain contains characters not allowed in an IDN). + * + * @see PHPMailer::$CharSet + * + * @param string $address The email address to convert + * + * @return string The encoded address in ASCII form + */ + public function punyencodeAddress($address) + { + //Verify we have required functions, CharSet, and at-sign. + $pos = strrpos($address, '@'); + if ( + !empty($this->CharSet) && + false !== $pos && + static::idnSupported() + ) { + $domain = substr($address, ++$pos); + //Verify CharSet string is a valid one, and domain properly encoded in this CharSet. + if ($this->has8bitChars($domain) && @mb_check_encoding($domain, $this->CharSet)) { + //Convert the domain from whatever charset it's in to UTF-8 + $domain = mb_convert_encoding($domain, self::CHARSET_UTF8, $this->CharSet); + //Ignore IDE complaints about this line - method signature changed in PHP 5.4 + $errorcode = 0; + if (defined('INTL_IDNA_VARIANT_UTS46')) { + //Use the current punycode standard (appeared in PHP 7.2) + $punycode = idn_to_ascii( + $domain, + \IDNA_DEFAULT | \IDNA_USE_STD3_RULES | \IDNA_CHECK_BIDI | + \IDNA_CHECK_CONTEXTJ | \IDNA_NONTRANSITIONAL_TO_ASCII, + \INTL_IDNA_VARIANT_UTS46 + ); + } elseif (defined('INTL_IDNA_VARIANT_2003')) { + //Fall back to this old, deprecated/removed encoding + $punycode = idn_to_ascii($domain, $errorcode, \INTL_IDNA_VARIANT_2003); + } else { + //Fall back to a default we don't know about + $punycode = idn_to_ascii($domain, $errorcode); + } + if (false !== $punycode) { + return substr($address, 0, $pos) . $punycode; + } + } + } + + return $address; + } + + /** + * Create a message and send it. + * Uses the sending method specified by $Mailer. + * + * @throws Exception + * + * @return bool false on error - See the ErrorInfo property for details of the error + */ + public function send() + { + try { + if (!$this->preSend()) { + return false; + } + + return $this->postSend(); + } catch (Exception $exc) { + $this->mailHeader = ''; + $this->setError($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + + return false; + } + } + + /** + * Prepare a message for sending. + * + * @throws Exception + * + * @return bool + */ + public function preSend() + { + if ( + 'smtp' === $this->Mailer + || ('mail' === $this->Mailer && (\PHP_VERSION_ID >= 80000 || stripos(PHP_OS, 'WIN') === 0)) + ) { + //SMTP mandates RFC-compliant line endings + //and it's also used with mail() on Windows + static::setLE(self::CRLF); + } else { + //Maintain backward compatibility with legacy Linux command line mailers + static::setLE(PHP_EOL); + } + //Check for buggy PHP versions that add a header with an incorrect line break + if ( + 'mail' === $this->Mailer + && ((\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70017) + || (\PHP_VERSION_ID >= 70100 && \PHP_VERSION_ID < 70103)) + && ini_get('mail.add_x_header') === '1' + && stripos(PHP_OS, 'WIN') === 0 + ) { + trigger_error($this->lang('buggy_php'), E_USER_WARNING); + } + + try { + $this->error_count = 0; //Reset errors + $this->mailHeader = ''; + + //Dequeue recipient and Reply-To addresses with IDN + foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) { + $params[1] = $this->punyencodeAddress($params[1]); + call_user_func_array([$this, 'addAnAddress'], $params); + } + if (count($this->to) + count($this->cc) + count($this->bcc) < 1) { + throw new Exception($this->lang('provide_address'), self::STOP_CRITICAL); + } + + //Validate From, Sender, and ConfirmReadingTo addresses + foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) { + $this->{$address_kind} = trim($this->{$address_kind}); + if (empty($this->{$address_kind})) { + continue; + } + $this->{$address_kind} = $this->punyencodeAddress($this->{$address_kind}); + if (!static::validateAddress($this->{$address_kind})) { + $error_message = sprintf( + '%s (%s): %s', + $this->lang('invalid_address'), + $address_kind, + $this->{$address_kind} + ); + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new Exception($error_message); + } + + return false; + } + } + + //Set whether the message is multipart/alternative + if ($this->alternativeExists()) { + $this->ContentType = static::CONTENT_TYPE_MULTIPART_ALTERNATIVE; + } + + $this->setMessageType(); + //Refuse to send an empty message unless we are specifically allowing it + if (!$this->AllowEmpty && empty($this->Body)) { + throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL); + } + + //Trim subject consistently + $this->Subject = trim($this->Subject); + //Create body before headers in case body makes changes to headers (e.g. altering transfer encoding) + $this->MIMEHeader = ''; + $this->MIMEBody = $this->createBody(); + //createBody may have added some headers, so retain them + $tempheaders = $this->MIMEHeader; + $this->MIMEHeader = $this->createHeader(); + $this->MIMEHeader .= $tempheaders; + + //To capture the complete message when using mail(), create + //an extra header list which createHeader() doesn't fold in + if ('mail' === $this->Mailer) { + if (count($this->to) > 0) { + $this->mailHeader .= $this->addrAppend('To', $this->to); + } else { + $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;'); + } + $this->mailHeader .= $this->headerLine( + 'Subject', + $this->encodeHeader($this->secureHeader($this->Subject)) + ); + } + + //Sign with DKIM if enabled + if ( + !empty($this->DKIM_domain) + && !empty($this->DKIM_selector) + && (!empty($this->DKIM_private_string) + || (!empty($this->DKIM_private) + && static::isPermittedPath($this->DKIM_private) + && file_exists($this->DKIM_private) + ) + ) + ) { + $header_dkim = $this->DKIM_Add( + $this->MIMEHeader . $this->mailHeader, + $this->encodeHeader($this->secureHeader($this->Subject)), + $this->MIMEBody + ); + $this->MIMEHeader = static::stripTrailingWSP($this->MIMEHeader) . static::$LE . + static::normalizeBreaks($header_dkim) . static::$LE; + } + + return true; + } catch (Exception $exc) { + $this->setError($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + + return false; + } + } + + /** + * Actually send a message via the selected mechanism. + * + * @throws Exception + * + * @return bool + */ + public function postSend() + { + try { + //Choose the mailer and send through it + switch ($this->Mailer) { + case 'sendmail': + case 'qmail': + return $this->sendmailSend($this->MIMEHeader, $this->MIMEBody); + case 'smtp': + return $this->smtpSend($this->MIMEHeader, $this->MIMEBody); + case 'mail': + return $this->mailSend($this->MIMEHeader, $this->MIMEBody); + default: + $sendMethod = $this->Mailer . 'Send'; + if (method_exists($this, $sendMethod)) { + return $this->{$sendMethod}($this->MIMEHeader, $this->MIMEBody); + } + + return $this->mailSend($this->MIMEHeader, $this->MIMEBody); + } + } catch (Exception $exc) { + if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true) { + $this->smtp->reset(); + } + $this->setError($exc->getMessage()); + $this->edebug($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + } + + return false; + } + + /** + * Send mail using the $Sendmail program. + * + * @see PHPMailer::$Sendmail + * + * @param string $header The message headers + * @param string $body The message body + * + * @throws Exception + * + * @return bool + */ + protected function sendmailSend($header, $body) + { + if ($this->Mailer === 'qmail') { + $this->edebug('Sending with qmail'); + } else { + $this->edebug('Sending with sendmail'); + } + $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; + //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver + //A space after `-f` is optional, but there is a long history of its presence + //causing problems, so we don't use one + //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html + //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html + //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html + //Example problem: https://www.drupal.org/node/1057954 + + //PHP 5.6 workaround + $sendmail_from_value = ini_get('sendmail_from'); + if (empty($this->Sender) && !empty($sendmail_from_value)) { + //PHP config has a sender address we can use + $this->Sender = ini_get('sendmail_from'); + } + //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. + if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) { + if ($this->Mailer === 'qmail') { + $sendmailFmt = '%s -f%s'; + } else { + $sendmailFmt = '%s -oi -f%s -t'; + } + } else { + //allow sendmail to choose a default envelope sender. It may + //seem preferable to force it to use the From header as with + //SMTP, but that introduces new problems (see + //), and + //it has historically worked this way. + $sendmailFmt = '%s -oi -t'; + } + + $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender); + $this->edebug('Sendmail path: ' . $this->Sendmail); + $this->edebug('Sendmail command: ' . $sendmail); + $this->edebug('Envelope sender: ' . $this->Sender); + $this->edebug("Headers: {$header}"); + + if ($this->SingleTo) { + foreach ($this->SingleToArray as $toAddr) { + $mail = @popen($sendmail, 'w'); + if (!$mail) { + throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + $this->edebug("To: {$toAddr}"); + fwrite($mail, 'To: ' . $toAddr . "\n"); + fwrite($mail, $header); + fwrite($mail, $body); + $result = pclose($mail); + $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet); + $this->doCallback( + ($result === 0), + [[$addrinfo['address'], $addrinfo['name']]], + $this->cc, + $this->bcc, + $this->Subject, + $body, + $this->From, + [] + ); + $this->edebug("Result: " . ($result === 0 ? 'true' : 'false')); + if (0 !== $result) { + throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + } + } else { + $mail = @popen($sendmail, 'w'); + if (!$mail) { + throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + fwrite($mail, $header); + fwrite($mail, $body); + $result = pclose($mail); + $this->doCallback( + ($result === 0), + $this->to, + $this->cc, + $this->bcc, + $this->Subject, + $body, + $this->From, + [] + ); + $this->edebug("Result: " . ($result === 0 ? 'true' : 'false')); + if (0 !== $result) { + throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + } + + return true; + } + + /** + * Fix CVE-2016-10033 and CVE-2016-10045 by disallowing potentially unsafe shell characters. + * Note that escapeshellarg and escapeshellcmd are inadequate for our purposes, especially on Windows. + * + * @see https://github.com/PHPMailer/PHPMailer/issues/924 CVE-2016-10045 bug report + * + * @param string $string The string to be validated + * + * @return bool + */ + protected static function isShellSafe($string) + { + //It's not possible to use shell commands safely (which includes the mail() function) without escapeshellarg, + //but some hosting providers disable it, creating a security problem that we don't want to have to deal with, + //so we don't. + if (!function_exists('escapeshellarg') || !function_exists('escapeshellcmd')) { + return false; + } + + if ( + escapeshellcmd($string) !== $string + || !in_array(escapeshellarg($string), ["'$string'", "\"$string\""]) + ) { + return false; + } + + $length = strlen($string); + + for ($i = 0; $i < $length; ++$i) { + $c = $string[$i]; + + //All other characters have a special meaning in at least one common shell, including = and +. + //Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here. + //Note that this does permit non-Latin alphanumeric characters based on the current locale. + if (!ctype_alnum($c) && strpos('@_-.', $c) === false) { + return false; + } + } + + return true; + } + + /** + * Check whether a file path is of a permitted type. + * Used to reject URLs and phar files from functions that access local file paths, + * such as addAttachment. + * + * @param string $path A relative or absolute path to a file + * + * @return bool + */ + protected static function isPermittedPath($path) + { + //Matches scheme definition from https://tools.ietf.org/html/rfc3986#section-3.1 + return !preg_match('#^[a-z][a-z\d+.-]*://#i', $path); + } + + /** + * Check whether a file path is safe, accessible, and readable. + * + * @param string $path A relative or absolute path to a file + * + * @return bool + */ + protected static function fileIsAccessible($path) + { + if (!static::isPermittedPath($path)) { + return false; + } + $readable = file_exists($path); + //If not a UNC path (expected to start with \\), check read permission, see #2069 + if (strpos($path, '\\\\') !== 0) { + $readable = $readable && is_readable($path); + } + return $readable; + } + + /** + * Send mail using the PHP mail() function. + * + * @see http://www.php.net/manual/en/book.mail.php + * + * @param string $header The message headers + * @param string $body The message body + * + * @throws Exception + * + * @return bool + */ + protected function mailSend($header, $body) + { + $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; + + $toArr = []; + foreach ($this->to as $toaddr) { + $toArr[] = $this->addrFormat($toaddr); + } + $to = implode(', ', $toArr); + + $params = null; + //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver + //A space after `-f` is optional, but there is a long history of its presence + //causing problems, so we don't use one + //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html + //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html + //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html + //Example problem: https://www.drupal.org/node/1057954 + //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. + + //PHP 5.6 workaround + $sendmail_from_value = ini_get('sendmail_from'); + if (empty($this->Sender) && !empty($sendmail_from_value)) { + //PHP config has a sender address we can use + $this->Sender = ini_get('sendmail_from'); + } + if (!empty($this->Sender) && static::validateAddress($this->Sender)) { + if (self::isShellSafe($this->Sender)) { + $params = sprintf('-f%s', $this->Sender); + } + $old_from = ini_get('sendmail_from'); + ini_set('sendmail_from', $this->Sender); + } + $result = false; + if ($this->SingleTo && count($toArr) > 1) { + foreach ($toArr as $toAddr) { + $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params); + $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet); + $this->doCallback( + $result, + [[$addrinfo['address'], $addrinfo['name']]], + $this->cc, + $this->bcc, + $this->Subject, + $body, + $this->From, + [] + ); + } + } else { + $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params); + $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From, []); + } + if (isset($old_from)) { + ini_set('sendmail_from', $old_from); + } + if (!$result) { + throw new Exception($this->lang('instantiate'), self::STOP_CRITICAL); + } + + return true; + } + + /** + * Get an instance to use for SMTP operations. + * Override this function to load your own SMTP implementation, + * or set one with setSMTPInstance. + * + * @return SMTP + */ + public function getSMTPInstance() + { + if (!is_object($this->smtp)) { + $this->smtp = new SMTP(); + } + + return $this->smtp; + } + + /** + * Provide an instance to use for SMTP operations. + * + * @return SMTP + */ + public function setSMTPInstance(SMTP $smtp) + { + $this->smtp = $smtp; + + return $this->smtp; + } + + /** + * Send mail via SMTP. + * Returns false if there is a bad MAIL FROM, RCPT, or DATA input. + * + * @see PHPMailer::setSMTPInstance() to use a different class. + * + * @uses \PHPMailer\PHPMailer\SMTP + * + * @param string $header The message headers + * @param string $body The message body + * + * @throws Exception + * + * @return bool + */ + protected function smtpSend($header, $body) + { + $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; + $bad_rcpt = []; + if (!$this->smtpConnect($this->SMTPOptions)) { + throw new Exception($this->lang('smtp_connect_failed'), self::STOP_CRITICAL); + } + //Sender already validated in preSend() + if ('' === $this->Sender) { + $smtp_from = $this->From; + } else { + $smtp_from = $this->Sender; + } + if (!$this->smtp->mail($smtp_from)) { + $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError())); + throw new Exception($this->ErrorInfo, self::STOP_CRITICAL); + } + + $callbacks = []; + //Attempt to send to all recipients + foreach ([$this->to, $this->cc, $this->bcc] as $togroup) { + foreach ($togroup as $to) { + if (!$this->smtp->recipient($to[0], $this->dsn)) { + $error = $this->smtp->getError(); + $bad_rcpt[] = ['to' => $to[0], 'error' => $error['detail']]; + $isSent = false; + } else { + $isSent = true; + } + + $callbacks[] = ['issent' => $isSent, 'to' => $to[0], 'name' => $to[1]]; + } + } + + //Only send the DATA command if we have viable recipients + if ((count($this->all_recipients) > count($bad_rcpt)) && !$this->smtp->data($header . $body)) { + throw new Exception($this->lang('data_not_accepted'), self::STOP_CRITICAL); + } + + $smtp_transaction_id = $this->smtp->getLastTransactionID(); + + if ($this->SMTPKeepAlive) { + $this->smtp->reset(); + } else { + $this->smtp->quit(); + $this->smtp->close(); + } + + foreach ($callbacks as $cb) { + $this->doCallback( + $cb['issent'], + [[$cb['to'], $cb['name']]], + [], + [], + $this->Subject, + $body, + $this->From, + ['smtp_transaction_id' => $smtp_transaction_id] + ); + } + + //Create error message for any bad addresses + if (count($bad_rcpt) > 0) { + $errstr = ''; + foreach ($bad_rcpt as $bad) { + $errstr .= $bad['to'] . ': ' . $bad['error']; + } + throw new Exception($this->lang('recipients_failed') . $errstr, self::STOP_CONTINUE); + } + + return true; + } + + /** + * Initiate a connection to an SMTP server. + * Returns false if the operation failed. + * + * @param array $options An array of options compatible with stream_context_create() + * + * @throws Exception + * + * @uses \PHPMailer\PHPMailer\SMTP + * + * @return bool + */ + public function smtpConnect($options = null) + { + if (null === $this->smtp) { + $this->smtp = $this->getSMTPInstance(); + } + + //If no options are provided, use whatever is set in the instance + if (null === $options) { + $options = $this->SMTPOptions; + } + + //Already connected? + if ($this->smtp->connected()) { + return true; + } + + $this->smtp->setTimeout($this->Timeout); + $this->smtp->setDebugLevel($this->SMTPDebug); + $this->smtp->setDebugOutput($this->Debugoutput); + $this->smtp->setVerp($this->do_verp); + $hosts = explode(';', $this->Host); + $lastexception = null; + + foreach ($hosts as $hostentry) { + $hostinfo = []; + if ( + !preg_match( + '/^(?:(ssl|tls):\/\/)?(.+?)(?::(\d+))?$/', + trim($hostentry), + $hostinfo + ) + ) { + $this->edebug($this->lang('invalid_hostentry') . ' ' . trim($hostentry)); + //Not a valid host entry + continue; + } + //$hostinfo[1]: optional ssl or tls prefix + //$hostinfo[2]: the hostname + //$hostinfo[3]: optional port number + //The host string prefix can temporarily override the current setting for SMTPSecure + //If it's not specified, the default value is used + + //Check the host name is a valid name or IP address before trying to use it + if (!static::isValidHost($hostinfo[2])) { + $this->edebug($this->lang('invalid_host') . ' ' . $hostinfo[2]); + continue; + } + $prefix = ''; + $secure = $this->SMTPSecure; + $tls = (static::ENCRYPTION_STARTTLS === $this->SMTPSecure); + if ('ssl' === $hostinfo[1] || ('' === $hostinfo[1] && static::ENCRYPTION_SMTPS === $this->SMTPSecure)) { + $prefix = 'ssl://'; + $tls = false; //Can't have SSL and TLS at the same time + $secure = static::ENCRYPTION_SMTPS; + } elseif ('tls' === $hostinfo[1]) { + $tls = true; + //TLS doesn't use a prefix + $secure = static::ENCRYPTION_STARTTLS; + } + //Do we need the OpenSSL extension? + $sslext = defined('OPENSSL_ALGO_SHA256'); + if (static::ENCRYPTION_STARTTLS === $secure || static::ENCRYPTION_SMTPS === $secure) { + //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled + if (!$sslext) { + throw new Exception($this->lang('extension_missing') . 'openssl', self::STOP_CRITICAL); + } + } + $host = $hostinfo[2]; + $port = $this->Port; + if ( + array_key_exists(3, $hostinfo) && + is_numeric($hostinfo[3]) && + $hostinfo[3] > 0 && + $hostinfo[3] < 65536 + ) { + $port = (int) $hostinfo[3]; + } + if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) { + try { + if ($this->Helo) { + $hello = $this->Helo; + } else { + $hello = $this->serverHostname(); + } + $this->smtp->hello($hello); + //Automatically enable TLS encryption if: + //* it's not disabled + //* we have openssl extension + //* we are not already using SSL + //* the server offers STARTTLS + if ($this->SMTPAutoTLS && $sslext && 'ssl' !== $secure && $this->smtp->getServerExt('STARTTLS')) { + $tls = true; + } + if ($tls) { + if (!$this->smtp->startTLS()) { + $message = $this->getSmtpErrorMessage('connect_host'); + throw new Exception($message); + } + //We must resend EHLO after TLS negotiation + $this->smtp->hello($hello); + } + if ( + $this->SMTPAuth && !$this->smtp->authenticate( + $this->Username, + $this->Password, + $this->AuthType, + $this->oauth + ) + ) { + throw new Exception($this->lang('authenticate')); + } + + return true; + } catch (Exception $exc) { + $lastexception = $exc; + $this->edebug($exc->getMessage()); + //We must have connected, but then failed TLS or Auth, so close connection nicely + $this->smtp->quit(); + } + } + } + //If we get here, all connection attempts have failed, so close connection hard + $this->smtp->close(); + //As we've caught all exceptions, just report whatever the last one was + if ($this->exceptions && null !== $lastexception) { + throw $lastexception; + } + if ($this->exceptions) { + // no exception was thrown, likely $this->smtp->connect() failed + $message = $this->getSmtpErrorMessage('connect_host'); + throw new Exception($message); + } + + return false; + } + + /** + * Close the active SMTP session if one exists. + */ + public function smtpClose() + { + if ((null !== $this->smtp) && $this->smtp->connected()) { + $this->smtp->quit(); + $this->smtp->close(); + } + } + + /** + * Set the language for error messages. + * The default language is English. + * + * @param string $langcode ISO 639-1 2-character language code (e.g. French is "fr") + * Optionally, the language code can be enhanced with a 4-character + * script annotation and/or a 2-character country annotation. + * @param string $lang_path Path to the language file directory, with trailing separator (slash) + * Do not set this from user input! + * + * @return bool Returns true if the requested language was loaded, false otherwise. + */ + public function setLanguage($langcode = 'en', $lang_path = '') + { + //Backwards compatibility for renamed language codes + $renamed_langcodes = [ + 'br' => 'pt_br', + 'cz' => 'cs', + 'dk' => 'da', + 'no' => 'nb', + 'se' => 'sv', + 'rs' => 'sr', + 'tg' => 'tl', + 'am' => 'hy', + ]; + + if (array_key_exists($langcode, $renamed_langcodes)) { + $langcode = $renamed_langcodes[$langcode]; + } + + //Define full set of translatable strings in English + $PHPMAILER_LANG = [ + 'authenticate' => 'SMTP Error: Could not authenticate.', + 'buggy_php' => 'Your version of PHP is affected by a bug that may result in corrupted messages.' . + ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' . + ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.', + 'connect_host' => 'SMTP Error: Could not connect to SMTP host.', + 'data_not_accepted' => 'SMTP Error: data not accepted.', + 'empty_message' => 'Message body empty', + 'encoding' => 'Unknown encoding: ', + 'execute' => 'Could not execute: ', + 'extension_missing' => 'Extension missing: ', + 'file_access' => 'Could not access file: ', + 'file_open' => 'File Error: Could not open file: ', + 'from_failed' => 'The following From address failed: ', + 'instantiate' => 'Could not instantiate mail function.', + 'invalid_address' => 'Invalid address: ', + 'invalid_header' => 'Invalid header name or value', + 'invalid_hostentry' => 'Invalid hostentry: ', + 'invalid_host' => 'Invalid host: ', + 'mailer_not_supported' => ' mailer is not supported.', + 'provide_address' => 'You must provide at least one recipient email address.', + 'recipients_failed' => 'SMTP Error: The following recipients failed: ', + 'signing' => 'Signing Error: ', + 'smtp_code' => 'SMTP code: ', + 'smtp_code_ex' => 'Additional SMTP info: ', + 'smtp_connect_failed' => 'SMTP connect() failed.', + 'smtp_detail' => 'Detail: ', + 'smtp_error' => 'SMTP server error: ', + 'variable_set' => 'Cannot set or reset variable: ', + ]; + if (empty($lang_path)) { + //Calculate an absolute path so it can work if CWD is not here + $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR; + } + + //Validate $langcode + $foundlang = true; + $langcode = strtolower($langcode); + if ( + !preg_match('/^(?P[a-z]{2})(?P'; } +if($tbl=='courseTrack'){ + $s=$db->prepare("DELETE FROM `".$prefix."courseTrack` WHERE `id`=:id"); + $s->execute([':id'=>$id]); + echo''; +} +if($tbl=='modules'){ + echo''; +} diff --git a/core/reordermodules.php b/core/reordermodules.php new file mode 100644 index 0000000..20618d6 --- /dev/null +++ b/core/reordermodules.php @@ -0,0 +1,23 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */ +require'db.php'; +$i=0; +foreach($_POST['modules'] as$id){ + $s=$db->prepare("UPDATE `".$prefix."modules` SET `ord`=:ord WHERE `id`=:id"); + $s->execute([ + ':ord'=>$i, + ':id'=>$id + ]); + $i++; +} diff --git a/core/reorderquestions.php b/core/reorderquestions.php new file mode 100644 index 0000000..0a91f63 --- /dev/null +++ b/core/reorderquestions.php @@ -0,0 +1,23 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */ +require'db.php'; +$i=0; +foreach($_POST['questions'] as$id){ + $s=$db->prepare("UPDATE `".$prefix."module_questions` SET `ord`=:ord WHERE `id`=:id"); + $s->execute([ + ':ord'=>$i, + ':id'=>$id + ]); + $i++; +} diff --git a/core/reset_password.php b/core/reset_password.php index c657a7c..572147d 100755 --- a/core/reset_password.php +++ b/core/reset_password.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.13 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -67,8 +67,10 @@ ':password'=>$hashpwd, ':id'=>$c['id'] ]); - require'phpmailer/class.phpmailer.php'; - $mail=new PHPMailer; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $toname=$c['name']; $mail->SetFrom($config['email'],$config['business']); diff --git a/core/rst.php b/core/rst.php index 71ccf9c..85b4d9d 100755 --- a/core/rst.php +++ b/core/rst.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.13 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -47,8 +47,10 @@ ':password'=>$hash, ':id'=>$c['id'] ]); - require'phpmailer/class.phpmailer.php'; - $mail=new PHPMailer; + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $toname=$c['name']; $mail->SetFrom($config['email'],$config['business']); diff --git a/core/stripepayment.php b/core/stripepayment.php index 0bcf601..f558b96 100755 --- a/core/stripepayment.php +++ b/core/stripepayment.php @@ -7,34 +7,37 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.13 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ require'db.php'; -$error=''; $config=$db->query("SELECT * FROM `".$prefix."config` WHERE `id`=1")->fetch(PDO::FETCH_ASSOC); +$ti=time(); +$error=''; if((!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')||$_SERVER['SERVER_PORT']==443){ if(!defined('PROTOCOL'))define('PROTOCOL','https://'); }else{ if(!defined('PROTOCOL'))define('PROTOCOL','http://'); } define('URL',PROTOCOL.$_SERVER['HTTP_HOST'].$settings['system']['url'].'/'); -$orderID=filter_input(INPUT_POST,'orderID',FILTER_UNSAFE_RAW); -$s=$db->prepare("SELECT * FROM `".$prefix."orders` WHERE `qid`=:id OR `iid`=:id AND `status`!='archived'"); -$s->execute([':id'=>$orderID]); +$oid=filter_input(INPUT_POST,'oid',FILTER_UNSAFE_RAW); +$s=$db->prepare("SELECT * FROM `".$prefix."orders` WHERE `qid`=:oid OR `iid`=:oid AND `status`!='archived'"); +$s->execute([':oid'=>$oid]); $payment_id=0; $statusMsg=''; $ordStatus='error'; if($s->rowCount()>0){ $r=$s->fetch(PDO::FETCH_ASSOC); -}else$error='
Order Does NOT Exist!
'; +}else + $error='
Order Does NOT Exist!
'; if($error==''){ $su=$db->prepare("SELECT * FROM `".$prefix."login` WHERE `id`=:uid"); $su->execute([':uid'=>$r['cid']]); if($su->rowCount()>0){ $ru=$su->fetch(PDO::FETCH_ASSOC); - }else$error='
User Does Not Exist!
'; + }else + $error='
User Does Not Exist!
'; } if($error==''){ $itemName=$r['qid'].$r['iid']; @@ -75,23 +78,25 @@ 'amount'=>$itemPriceCents, 'currency'=>$currency, 'description'=>$itemName - ], - ); + ]); }catch(Exception $e){ $api_error=$e->getMessage(); } if(empty($api_error)&&$charge){ $chargeJson=$charge->jsonSerialize(); - if($chargeJson['amount_refunded']==0 && empty($chargeJson['failure_code']) && $chargeJson['paid'] == 1 && $chargeJson['captured']==1){ + if($chargeJson['amount_refunded']==0&& empty($chargeJson['failure_code'])&&$chargeJson['paid']==1&&$chargeJson['captured']==1){ $transactionID=$chargeJson['balance_transaction']; $paidAmount=$chargeJson['amount']; $paidAmount=($paidAmount/100); $paidCurrency=$chargeJson['currency']; $payment_status=$chargeJson['status']; if($payment_status=='succeeded'){ - $st=$db->prepare("UPDATE `".$prefix."orders` SET `paid_via`=:paid_via,`txn_id`=:txn_id,`paid_email`=:paid_email,`paid_name`=:paid_name,`paid_amount`=:paid_amount,`payment_status`=:payment_status,`paid_ti`=:paid_ti,`status`=:status WHERE `id`=:id"); + $st=$db->prepare("UPDATE `".$prefix."orders` SET `iid`=:iid,`iid_ti`=:iid_ti,`qid`='',`qid_ti`='0',`paid_via`=:paid_via,`txn_id`=:txn_id,`paid_email`=:paid_email,`paid_name`=:paid_name,`paid_amount`=:paid_amount,`payment_status`=:payment_status,`paid_ti`=:paid_ti,`status`=:status WHERE `id`=:id"); + $r['iid']='I'.date("ymd",$ti).sprintf("%06d",$r['id'],6); $st->execute([ ':id'=>$r['id'], + ':iid'=>$r['iid'], + ':iid_ti'=>$ti, ':paid_via'=>'stripe', ':txn_id'=>$transactionID, ':paid_email'=>$email, @@ -102,8 +107,8 @@ ':status'=>($payment_status=='succeeded'?'paid':$r['status']) ]); $payment_id=$r['id']; - $sp=$db->prepare("SELECT `id`,`points`,`quantity` WHERE `oid`=:oid"); - $sp->execute([':oid'=>$r['id']]); + $sp=$db->prepare("SELECT `id`,`points`,`quantity` FROM `".$prefix."content` WHERE `id`=:id"); + $sp->execute([':id'=>$r['id']]); $points=0; while($rp=$sp->fetch(PDO::FETCH_ASSOC)){ if($rp['points']>0)$points=$points+($rp['points']*$rp['quantity']); @@ -113,10 +118,122 @@ ':id'=>$ru['id'], ':spent'=>$ru['spent']+$paidAmount, ':points'=>$ru['points']+$points, - ':pti'=>time() + ':pti'=>$ti ]); $ordStatus="success"; $statusMsg="Your Payment has been Successful!"; + $i=1; + if($ru['email']!=''){ + require'phpmailer/PHPMailer.php'; + require'phpmailer/SMTP.php'; + require'phpmailer/Exception.php'; + $mail = new PHPMailer\PHPMailer\PHPMailer; + $mail->isSendMail(); + $mail->SetFrom($config['email'],$config['business']); + $mail->AddAddress($ru['email']); + $mail->isHTML(true); + $mail->Subject='Payment Confirmation from '.$config['business']; + $name=explode(' ',$ru['name']); + $msgd=''; + $msgl=''; + $msge=''; + $msgc=''; + $msg=($config['orderEmailLayout']!=''?$config['orderEmailLayout']:'

Hi {first},

Thank you for your payment.

{downloads}{links}{events}{courses}

You can view your invoice here: {order_link}

Kind Regards,
{business}

'); + $soi=$db->prepare("SELECT `iid` FROM `".$prefix."orderitems` WHERE `oid`=:oid"); + $soi->execute([':oid'=>$r['id']]); + while($roi=$soi->fetch(PDO::FETCH_ASSOC)){ + $sd=$db->prepare("SELECT * FROM `".$prefix."choices` WHERE `rid`=:id AND `contentType`='download'"); + $sd->execute([':id'=>$roi['iid']]); + if($sd->rowCount()>0){ + while($rd=$sd->fetch(PDO::FETCH_ASSOC)){ + $msgd.='Link for '.($rd['title']!=''?$rd['title']:$rd['url']).' available'; + if($rd['tie']==0)$msgd.=' forever'; + if($rd['tie']==3600)$msgd.=' for 1 Hour'; + if($rd['tie']==7200)$msgd.=' for 2 Hours'; + if($rd['tie']==14400)$msgd.=' for 4 Hours'; + if($rd['tie']==28800)$msgd.=' for 8 Hours'; + if($rd['tie']==86400)$msgd.=' for 24 Hours'; + if($rd['tie']==172800)$msgd.=' for 48 Hours'; + if($rd['tie']==604800)$msgd.=' for 1 Week'; + if($rd['tie']==1209600)$msgd.=' for 2 Weeks'; + if($rd['tie']==2592000)$msgd.=' for 1 Month'; + if($rd['tie']==7776000)$msgd.=' for 3 Months'; + if($rd['tie']==15552000)$msgd.=' for 6 Months'; + if($rd['tie']==31536000)$msgd.=' for 1 Year'; + $msgd.='
'; + $i++; + } + } + $sl=$db->prepare("SELECT * FROM `".$prefix."choices` WHERE `rid`=:id AND `contentType`='link'"); + $sl->execute([':id'=>$roi['iid']]); + if($sl->rowCount()>0){ + while($rl=$sl->fetch(PDO::FETCH_ASSOC)){ + $msgl.='Link for '.($rl['title']!=''?$rl['title']:$rl['url']).' available'; + if($rl['tie']==0)$msgl.=' forever'; + if($rl['tie']==3600)$msgl.=' for 1 Hour'; + if($rl['tie']==7200)$msgl.=' for 2 Hours'; + if($rl['tie']==14400)$msgl.=' for 4 Hours'; + if($rl['tie']==28800)$msgl.=' for 8 Hours'; + if($rl['tie']==86400)$msgl.=' for 24 Hours'; + if($rl['tie']==172800)$msgl.=' for 48 Hours'; + if($rl['tie']==604800)$msgl.=' for 1 Week'; + if($rl['tie']==1209600)$msgl.=' for 2 Weeks'; + if($rl['tie']==2592000)$msgl.=' for 1 Month'; + if($rl['tie']==7776000)$msgl.=' for 3 Months'; + if($rl['tie']==15552000)$msgl.=' for 6 Months'; + if($rl['tie']==31536000)$msgl.=' for 1 Year'; + $msgl.='
'; + $i++; + } + } + $se=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `id`=:id"); + $se->execute([':id'=>$roi['iid']]); + if($se->rowCount()>0){ + while($re=$se->fetch(PDO::FETCH_ASSOC)){ + if($re['contentType']=='event'){ + $msge.='Link for '.$re['title'].'
'.$re['title'].'
'; + } + if($re['contentType']=='course'){ + $sct=$db->prepare("INSERT INTO `".$prefix."courseTrack` (`rid`,`uid`,`complete`,`progress`,`attempts`,`score`,`ti`) VALUES (:rid,:uid,'',0,:attempts,0,:ti)"); + $sct->execute([ + ':rid'=>$re['id'], + ':uid'=>$ru['id'], + ':attempts'=>$re['attempts'], + ':ti'=>$ti + ]); + $msgc='

To access the Course/s purchased, it is required to be logged in. You can view purchased Courses via the "Courses" option in the logged in menu area.

'; + } + $i++; + } + } + } + $msg=str_replace([ + '{first}', + '{last}', + '{name}', + '{downloads}', + '{links}', + '{events}', + '{courses}', + '{order_link}', + '{business}', + ],[ + $name[0], + $name[1], + $ru['name'], + ($msgd!=''?'

Please use the link/s below to access your downloadable purchases:
'.$msgd.'

':''), + ($msgl!=''?'

Please use the link/s below to access your purchased link/s:
'.$msgl.'

':''), + ($msge!=''?$msge:''), + ($msgc!=''?$msgc:''), + '#'.$r['iid'].'', + $config['business'] + ],$msg); + $mail->Body=$msg; + $mail->AltBody=strip_tags(preg_replace('//i',"\n",$msg)); + if($mail->Send()){ + $msg='eventpaidlink'; + } + } }else $statusMsg="Your Payment has Failed!"; }else @@ -129,22 +246,26 @@ $statusMsg="Error on form submission."; } $html=''; +$el='payment-info'; if($error==''){ if($payment_id>0){ - $el='payment-info'; - $html.='
'. - $statusMsg.'

'. + $html.='
'. + $statusMsg. + ($msgd!=''?'
Download links to your purchase are within the Confirmation Email that has been sent to the email associated with your account':''). + ($msgl!=''?'
Links associated with your purchase are within the Confirmation Email that has been sent to the email associated with your account':''). + ($msge!=''?'
Event links to your purchase are within the Confirmation Email that has been sent to the email associated with your account':''). + ($msgc!=''?'
You can access purchased Course/s via the Courses link in the logged in bar at the top of the page when logged in.
':''). + '

'. 'Back to Order Page'. '
'; }else{ - $el='paymentFrm'; $html.='
'. 'There was an Issue Processing Your Payment!

'. 'Back to Order Page'. '
'; } }else{ - $el='paymentFrm'; + $el='payment-info'; $html=$error; } -echo''; +echo''; diff --git a/core/update.php b/core/update.php index 6bf488f..6ec29e2 100755 --- a/core/update.php +++ b/core/update.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2021 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.17 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -44,7 +44,7 @@ function htmlentitiesOutsideHTMLTags($htmlText,$ent){ $id=isset($_POST['id'])?filter_input(INPUT_POST,'id',FILTER_SANITIZE_NUMBER_INT):filter_input(INPUT_GET,'id',FILTER_SANITIZE_NUMBER_INT); $tbl=isset($_POST['t'])?filter_input(INPUT_POST,'t',FILTER_UNSAFE_RAW):filter_input(INPUT_GET,'t',FILTER_UNSAFE_RAW); $col=isset($_POST['c'])?filter_input(INPUT_POST,'c',FILTER_UNSAFE_RAW):filter_input(INPUT_GET,'c',FILTER_UNSAFE_RAW); -if($tbl=='seo'||$tbl=='content'||$tbl=='menu'||$tbl=='config'||$tbl=='login'||$tbl=='orders'&&$col=='tis'||$col=='tie'||$col=='pti'||$col=='paid_ti'||$col=='notes'||$col=='notes2'||$col=='PasswordResetLayout'||$col=='orderEmailLayout'||$tbl=='forumCategory'||$tbl=='forumTopics'||$col=='orderEmailNotes'||$col=='passwordResetLayout'||$col=='accountActivationLayout'||$col=='bookingEmailLayout'||$col=='bookingAutoReplyLayout'||$col=='contactAutoReplyLayout'||$col=='dateFormat'||$col=='newslettersOptOutLayout'||$col=='php_quicklink'||$col=='ga_tracking'||$col=='messengerFBCode'||$col=='signature'||$col=='defaultPage'||$col=='hostStatus'||$col=='siteStatus'||$col=='heading'||$col=='inventoryFallbackStatus'||$col=='templatelist'||$col=='trackOption'||$col=='trackNumber'||$col=='exturl'){ +if($tbl=='seo'||$tbl=='content'||$tbl=='course'||$tbl=='modules'||$tbl=='menu'||$tbl=='config'||$tbl=='login'||$tbl=='orders'&&$col=='tis'||$col=='tie'||$col=='pti'||$col=='paid_ti'||$col=='notes'||$col=='notes2'||$col=='PasswordResetLayout'||$col=='orderEmailLayout'||$tbl=='forumCategory'||$tbl=='forumTopics'||$col=='orderEmailNotes'||$col=='passwordResetLayout'||$col=='accountActivationLayout'||$col=='bookingEmailLayout'||$col=='bookingAutoReplyLayout'||$col=='contactAutoReplyLayout'||$col=='dateFormat'||$col=='newslettersOptOutLayout'||$col=='php_quicklink'||$col=='ga_tracking'||$col=='messengerFBCode'||$col=='signature'||$col=='defaultPage'||$col=='hostStatus'||$col=='siteStatus'||$col=='heading'||$col=='inventoryFallbackStatus'||$col=='templatelist'||$col=='trackOption'||$col=='trackNumber'||$col=='exturl'){ $da=isset($_POST['da'])?filter_input(INPUT_POST,'da',FILTER_UNSAFE_RAW):filter_input(INPUT_GET,'da',FILTER_UNSAFE_RAW); if($col=='messengerFBCode')$da=rawurldecode($da); }else{ diff --git a/core/view/cart.php b/core/view/cart.php index f6f8d3d..6328930 100755 --- a/core/view/cart.php +++ b/core/view/cart.php @@ -7,12 +7,14 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.16 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ require'core/puconverter.php'; -require'core/phpmailer/class.phpmailer.php'; +require'core/phpmailer/PHPMailer.php'; +require'core/phpmailer/SMTP.php'; +require'core/phpmailer/Exception.php'; $ip=$_SERVER['REMOTE_ADDR']=='::1'?'127.0.0.1':$_SERVER['REMOTE_ADDR']; $hash=md5($ip); $html=preg_replace([ @@ -45,8 +47,8 @@ $limit=$user['purchaseLimit']; else{ if($rank==200)$limit=$config['memberLimit']; - if($rank==210)$limit=$config['memberLimitSilver']; - if($rank==220)$limit=$config['memberLimitBronze']; + if($rank==210)$limit=$config['memberLimitBronze']; + if($rank==220)$limit=$config['memberLimitSilver']; if($rank==230)$limit=$config['memberLimitGold']; if($rank==240)$limit=$config['memberLimitPlatinum']; if($rank==310)$limit=$config['wholesaleLimit']; @@ -89,7 +91,7 @@ } $uid=isset($_SESSION['uid'])?$_SESSION['uid']:0; if(filter_var($email,FILTER_VALIDATE_EMAIL)){ - $s=$db->prepare("SELECT `id`,`status` FROM `".$prefix."login` WHERE `email`=:email"); + $s=$db->prepare("SELECT * FROM `".$prefix."login` WHERE `email`=:email"); $s->execute([':email'=>$email]); if($s->rowCount()>0){ $ru=$s->fetch(PDO::FETCH_ASSOC); @@ -134,9 +136,9 @@ ':id'=>$uid, ':username'=>$username[0].$uid ]); - if($email!=''){ + if($email!=''&&$config['options'][3]==1){ $name=$name!=''?$name:$business; - $mail=new PHPMailer; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $mail->SetFrom($config['email'],$config['business']); $mail->AddAddress($email,$name); @@ -144,7 +146,7 @@ $mail->Subject='Order at '.$config['business']; $msg='Thank you for placing an Order at '.$config['business'].'
You can view your order after logging in using the below credentials.
Username: '.$username[0].$uid.'
Password: '.$pass.'
We suggest changing this once you log in to something you will more easily remember.'; $mail->Body=$msg; - $mail->AltBody=strip_tags(preg_replace('//i',"\n",$msg));; + $mail->AltBody=strip_tags(preg_replace('//i',"\n",$msg)); if($mail->Send()){} } } @@ -184,12 +186,24 @@ $oid=$db->lastInsertId(); $s=$db->prepare("SELECT * FROM `".$prefix."cart` WHERE `si`=:si"); $s->execute([':si'=>SESSIONID]); + $total=0; while($r=$s->fetch(PDO::FETCH_ASSOC)){ - $si=$db->prepare("SELECT `title`,`quantity`,`sold`,`points` FROM `".$prefix."content` WHERE `id`=:id"); + $si=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `id`=:id"); $si->execute([':id'=>$r['iid']]); $i=$si->fetch(PDO::FETCH_ASSOC); $quantity=$i['quantity']-$r['quantity']; $sold=$i['quantity']+$r['quantity']; + $gst=0; + if($i['status']!='pre order'||$i['status']!='back order'){ + if($config['gst']>0){ + $gst=$i['cost']*($config['gst']/100); + if($i['quantity']>1) + $gst=$gst*$r['quantity']; + $gst=number_format((float)$gst, 2, '.', ''); + } + } + if($i['status']!='pre order'||$i['status']!='back order') + $total=$total+($r['cost']*$r['quantity'])+$gst; $qry=$db->prepare("UPDATE `".$prefix."content` SET `quantity`=:quantity,`sold`=:sold WHERE `id`=:id"); $qry->execute([ ':quantity'=>$quantity<1?0:$quantity, @@ -209,11 +223,16 @@ ':ti'=>$ti ]); } + $q=$db->prepare("UPDATE `".$prefix."orders` SET `total`=:total WHERE `id`=:id"); + $q->execute([ + ':id'=>$oid, + ':total'=>$total + ]); $q=$db->prepare("DELETE FROM `".$prefix."cart` WHERE `si`=:si"); $q->execute([':si'=>SESSIONID]); $config=$db->query("SELECT * FROM `".$prefix."config` WHERE `id`='1'")->fetch(PDO::FETCH_ASSOC); if($config['email']!=''){ - $mail=new PHPMailer; + $mail = new PHPMailer\PHPMailer\PHPMailer; $mail->isSendmail(); $mail->SetFrom($config['email'],$config['business']); $mail->AddAddress($config['email']); @@ -224,7 +243,7 @@ $mail->AltBody=strip_tags(preg_replace('//i',"\n",$msg));; if($mail->Send()){} } - $notification.=preg_replace(['//'],['success','Thank you for placing an Order, a representative will process your order as soon as humanly possible'],$theme['settings']['alert']); + $notification.=preg_replace(['//','//'],['success','Thank you for placing an Order.
Once payment is made, you will receive an invoice, containing links to content associated with your purchase.

'.(isset($qid)&&$qid!=0?'You can use this link to view your order:
Order #'.$qid.'

':'').'Proceed to Checkout'],$theme['settings']['alert']); }else $notification.=preg_replace(['//','//'],['danger','The account associated with the details provided has been suspended, or the email supplied is invalid.'],$theme['settings']['alert']); $html=preg_replace('~.*?<\/emptycart>~is',$notification,$html,1); @@ -286,8 +305,12 @@ $image, htmlspecialchars($i['code'],ENT_QUOTES,'UTF-8'), ($i['code']!=''?' : ':'').htmlspecialchars($i['title'],ENT_QUOTES,'UTF-8'), - $i['weight'].$i['weightunit'], - 'W:'.$i['width'].$i['widthunit'].' x L:'.$i['length'].$i['lengthunit'].' H:'.$i['height'].$i['heightunit'], + $i['weight']>0?'Weight: '.$i['weight'].$i['weightunit'].'
':'', + ($i['width']>0||$i['length']>0||$i['height']>0?'Dimensions:'. + ($i['width']>0?' W:'.$i['width'].$i['widthunit']:''). + ($i['length']>0?' L:'.$i['length'].$i['lengthunit']:''). + ($i['height']>0?' H:'.$i['height'].$i['heightunit']:'') + :''), isset($c['title'])&&$c['title']!=''?' : '.htmlspecialchars($c['title'],ENT_QUOTES,'UTF-8'):'', $ci['id'], $ci['cost'], @@ -313,8 +336,12 @@ '//' ],[ $cartitems, - 'W: '.$dimW.'cm X L: '.$dimL.'cm X H: '.$dimH.'cm', - $weight.'kg'.($weight>22?'
As the weight of your items exceeds 22kg you will not be able to use Australia Post.
':''), + ($dimW>0||$dimL>0||$dimH>0?'Estimated Dimensions:'. + ($dimW>0?' W: '.$dimW.'cm':''). + ($dimL>0?' L: '.$dimL.'cm':''). + ($dimH>0?' H: '.$dimH.'cm':''). + '':''), + ($weight>0?'Total Weight: '.$weight.'kg'.($weight>22?'
As the weight of your items exceeds 22kg you will not be able to use Australia Post.
':''):''), $total ],$html); @@ -330,7 +357,7 @@ '' ],$html); }else{ - if($user['rank']>300&&$user['rank']<400){ + if(isset($user['rank'])&&$user['rank']>300&&$user['rank']<400){ $html=preg_replace([ '~.*?<\/postageoptions>~is', '/<[\/]?emptycart>/', @@ -342,12 +369,13 @@ ], $html); }else{ - $sco=$db->prepare("SELECT * FROM `".$prefix."choices` WHERE `contentType`='postoption' ORDER BY `title` ASC"); - $sco->execute(); - $postageoptions=''. // AUS_PARCEL_REGULAR - ''; // AUS_PARCEL_EXPRESS - if($sco->rowCount()>0){ - while($rco=$sco->fetch(PDO::FETCH_ASSOC))$postageoptions.=''; + $spo=$db->prepare("SELECT * FROM `".$prefix."choices` WHERE `contentType`='postoption' ORDER BY `title` ASC"); + $spo->execute(); + $postageoptions=''; +// $postageoptions=''. // AUS_PARCEL_REGULAR +// ''; // AUS_PARCEL_EXPRESS + if($spo->rowCount()>0){ + while($rpo=$spo->fetch(PDO::FETCH_ASSOC))$postageoptions.=''; } $sco=$db->prepare("SELECT * FROM `".$prefix."choices` WHERE `contentType`='payoption' ORDER BY `title` ASC"); $sco->execute(); @@ -360,14 +388,14 @@ } $html=preg_replace([ $sco->rowCount()>0?'/<[\/]?paymentoptions>/':'~.*?<\/paymentoptions>~is', + $spo->rowCount()>0?'/<[\/]?postageoptions>/':'~.*?<\/postageoptions>~is', '//', - '/<[\/]?postageoptions>/', '//', '/<[\/]?emptycart>/' ],[ $sco->rowCount()>0?'':'', + $spo->rowCount()>0?'':'', $postageoptions, - '', $payoptions, '' ],$html); diff --git a/core/view/checkout.php b/core/view/checkout.php index b9b70d5..abba65e 100755 --- a/core/view/checkout.php +++ b/core/view/checkout.php @@ -7,11 +7,14 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.12 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ require'core/puconverter.php'; +require'core/phpmailer/PHPMailer.php'; +require'core/phpmailer/SMTP.php'; +require'core/phpmailer/Exception.php'; $html=preg_replace([ '//', '//', @@ -21,46 +24,200 @@ $page['notes'], '' ],$html); -$s=$db->prepare("SELECT * FROM `".$prefix."orders` WHERE `qid`=:id OR `iid`=:id AND `status`!='archived'"); +$s=$db->prepare("SELECT * FROM `".$prefix."orders` WHERE `qid`=:id AND `status`!='archived' AND `status`!='paid'"); $s->execute([':id'=>$args[0]]); $r=$s->fetch(PDO::FETCH_ASSOC); -if($s->rowCount()>0&&$r['status']!='paid'){ +if($s->rowCount()==1){ $su=$db->prepare("SELECT * FROM `".$prefix."login` WHERE `id`=:uid"); $su->execute([':uid'=>$r['cid']]); $ru=$su->fetch(PDO::FETCH_ASSOC); - $html=preg_replace([ - '//', - $config['bank']==''?'~.*?~is':'/<[\/]?direct>/', - '//', - '//', - '//', - '//', - $config['payPalClientID']==''?'~.*?~is':'/<[\/]?paypal>/', - '//', - '//', - $config['options'][16]==1?'/<[\/]?afterpay>/':'~.*?~is', - $config['stripe_publishkey']==''?'~.*?~is':'/<[\/]?stripe>/', - '//', - '//', - '//', - '//', - ],[ - '', - '', - htmlspecialchars($config['bank'],ENT_QUOTES,'UTF-8'), - htmlspecialchars($config['bankAccountName'],ENT_QUOTES,'UTF-8'), - htmlspecialchars($config['bankAccountNumber'],ENT_QUOTES,'UTF-8'), - htmlspecialchars($config['bankBSB'],ENT_QUOTES,'UTF-8'), - '', - $config['payPalClientID'], - URL, - '', - '', - $r['total'], - $r['id'], - $r['qid'].$r['iid'], - $config['stripe_publishkey'], - ],$html); + if($r['total']==0){ + $st=$db->prepare("UPDATE `".$prefix."orders` SET `iid`=:iid,`iid_ti`=:iid_ti,`qid`='',`qid_ti`='0',`paid_via`=:paid_via,`txn_id`=:txn_id,`paid_email`=:paid_email,`paid_name`=:paid_name,`paid_amount`=:paid_amount,`payment_status`=:payment_status,`paid_ti`=:paid_ti,`status`=:status WHERE `id`=:id"); + $r['iid']='I'.date("ymd",$ti).sprintf("%06d",$r['id'],6); + $st->execute([ + ':id'=>$r['id'], + ':iid'=>$r['iid'], + ':iid_ti'=>$ti, + ':paid_via'=>'', + ':txn_id'=>'', + ':paid_email'=>'', + ':paid_name'=>'', + ':paid_amount'=>'', + ':payment_status'=>'paid', + ':paid_ti'=>time(), + ':status'=>'paid' + ]); + $payment_id=$r['id']; + $sp=$db->prepare("SELECT `id`,`points`,`quantity` FROM `".$prefix."content` WHERE `id`=:id"); + $sp->execute([':id'=>$r['id']]); + $points=0; + while($rp=$sp->fetch(PDO::FETCH_ASSOC)){ + if($rp['points']>0) + $points=$points+($rp['points']*$rp['quantity']); + } + $sc=$db->prepare("UPDATE `".$prefix."login` SET `spent`=:spent,`points`=:points,`pti`=:pti WHERE `id`=:id"); + $sc->execute([ + ':id'=>$ru['id'], + ':spent'=>$ru['spent'], + ':points'=>$ru['points']+$points, + ':pti'=>$ti + ]); + $ordStatus="success"; + $statusMsg="Your Payment has been Successful!"; + $i=1; + if($ru['email']!=''){ + $mail = new PHPMailer\PHPMailer\PHPMailer; + $mail->isSendMail(); + $mail->SetFrom($config['email'],$config['business']); + $mail->AddAddress($ru['email']); + $mail->isHTML(true); + $mail->Subject='Payment Confirmation from '.$config['business']; + $name=explode(' ',$ru['name']); + $msgd=$msgl=$msge=$msgc=''; + $msg=($config['orderEmailLayout']!=''?$config['orderEmailLayout']:'

Hi {first},

Thank you for your payment.

{downloads}{links}{events}{courses}

You can view your invoice here: {order_link}

Kind Regards,
{business}

'); + $soi=$db->prepare("SELECT `iid` FROM `".$prefix."orderitems` WHERE `oid`=:oid"); + $soi->execute([':oid'=>$r['id']]); + while($roi=$soi->fetch(PDO::FETCH_ASSOC)){ + $sd=$db->prepare("SELECT `contentType`,`title`,`url`,`tie` FROM `".$prefix."choices` WHERE `contentType`='download' AND `rid`=:id"); + $sd->execute([':id'=>$roi['iid']]); + if($sd->rowCount()>0){ + while($rd=$sd->fetch(PDO::FETCH_ASSOC)){ + $msgd.='Link for '.($rd['title']!=''?$rd['title']:$rd['url']).' available'; + if($rd['tie']==0)$msgd.=' forever'; + if($rd['tie']==3600)$msgd.=' for 1 Hour'; + if($rd['tie']==7200)$msgd.=' for 2 Hours'; + if($rd['tie']==14400)$msgd.=' for 4 Hours'; + if($rd['tie']==28800)$msgd.=' for 8 Hours'; + if($rd['tie']==86400)$msgd.=' for 24 Hours'; + if($rd['tie']==172800)$msgd.=' for 48 Hours'; + if($rd['tie']==604800)$msgd.=' for 1 Week'; + if($rd['tie']==1209600)$msgd.=' for 2 Weeks'; + if($rd['tie']==2592000)$msgd.=' for 1 Month'; + if($rd['tie']==7776000)$msgd.=' for 3 Months'; + if($rd['tie']==15552000)$msgd.=' for 6 Months'; + if($rd['tie']==31536000)$msgd.=' for 1 Year'; + $msgd.='
'; + $i++; + } + } + $sl=$db->prepare("SELECT `contentType`,`title`,`url`,`tie` FROM `".$prefix."choices` WHERE `contentType`='link' AND `rid`=:id"); + $sl->execute([':id'=>$roi['iid']]); + if($sl->rowCount()>0){ + while($rl=$sl->fetch(PDO::FETCH_ASSOC)){ + $msgl.='Link for '.($rl['title']!=''?$rl['title']:$rl['url']).' available'; + if($rl['tie']==0)$msgl.=' forever'; + if($rl['tie']==3600)$msgl.=' for 1 Hour'; + if($rl['tie']==7200)$msgl.=' for 2 Hours'; + if($rl['tie']==14400)$msgl.=' for 4 Hours'; + if($rl['tie']==28800)$msgl.=' for 8 Hours'; + if($rl['tie']==86400)$msgl.=' for 24 Hours'; + if($rl['tie']==172800)$msgl.=' for 48 Hours'; + if($rl['tie']==604800)$msgl.=' for 1 Week'; + if($rl['tie']==1209600)$msgl.=' for 2 Weeks'; + if($rl['tie']==2592000)$msgl.=' for 1 Month'; + if($rl['tie']==7776000)$msgl.=' for 3 Months'; + if($rl['tie']==15552000)$msgl.=' for 6 Months'; + if($rl['tie']==31536000)$msgl.=' for 1 Year'; + $msgl.='
'; + $i++; + } + } + $se=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `id`=:id"); + $se->execute([':id'=>$roi['iid']]); + if($se->rowCount()>0){ + while($re=$se->fetch(PDO::FETCH_ASSOC)){ + if($re['contentType']=='event'){ + $msge.='Link for '.$re['title'].'
'.$re['title'].'
'; + } + if($re['contentType']=='course'){ + $sct=$db->prepare("INSERT INTO `".$prefix."courseTrack` (`rid`,`uid`,`complete`,`progress`,`attempts`,`score`,`ti`) VALUES (:rid,:uid,'',0,:attempts,0,:ti)"); + $sct->execute([ + ':rid'=>$re['id'], + ':uid'=>$ru['id'], + ':attempts'=>$re['attempts'], + ':ti'=>$ti + ]); + $msgc='

To access the Course/s purchased, it is required to be logged in. You can view purchased Courses via the "Courses" in the logged in menu area.

'; + } + $i++; + } + } + } + $msg=str_replace([ + '{first}', + '{last}', + '{name}', + '{downloads}', + '{links}', + '{events}', + '{courses}', + '{order_link}', + '{business}', + ],[ + $name[0], + $name[1], + $ru['name'], + ($msgd!=''?'

Please use the link/s below to access your downloadable purchases:
'.$msgd.'

':''), + ($msgl!=''?'

Please use the link/s below to access your purchased links:
'.$msgl.'

':''), + ($msge!=''?$msge:''), + ($msgc!=''?$msgc:''), + '#'.$r['iid'].'', + $config['business'] + ],$msg); + $mail->Body=$msg; + $mail->AltBody=strip_tags(preg_replace('//i',"\n",$msg)); + if($mail->Send()){ + $msg='eventpaidlink'; + } + } + $html=preg_replace([ + '//', + '//', + '~.*?~is', + '~.*?~is', + '~.*?~is', + ],[ + $r['iid'], + '
Order #'.$r['iid'].' has a total cost of $0.00, has been converted to an invoice, with a confirmation email sent for access to purchased content!
', + '', + '', + '' + ],$html); + }else{ + $html=preg_replace([ + '//', + $config['bank']==''?'~.*?~is':'/<[\/]?direct>/', + '//', + '//', + '//', + '//', + $config['payPalClientID']==''?'~.*?~is':'/<[\/]?paypal>/', + '//', + '//', + $config['options'][16]==1?'/<[\/]?afterpay>/':'~.*?~is', + $config['stripe_publishkey']==''?'~.*?~is':'/<[\/]?stripe>/', + '//', + '//', + '//', + '//', + ],[ + '', + '', + htmlspecialchars($config['bank'],ENT_QUOTES,'UTF-8'), + htmlspecialchars($config['bankAccountName'],ENT_QUOTES,'UTF-8'), + htmlspecialchars($config['bankAccountNumber'],ENT_QUOTES,'UTF-8'), + htmlspecialchars($config['bankBSB'],ENT_QUOTES,'UTF-8'), + '', + $config['payPalClientID'], + URL, + '', + '', + $r['total'], + $r['id'], + $r['qid'].$r['iid'], + $config['stripe_publishkey'], + ],$html); + } }else{ $html=preg_replace([ '//', diff --git a/core/view/contactus.php b/core/view/contactus.php index 1dd319d..6c0eff5 100755 --- a/core/view/contactus.php +++ b/core/view/contactus.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.12 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -39,6 +39,7 @@ '//', '//', '//', + '//', '//', ],[ '', @@ -46,6 +47,7 @@ htmlspecialchars($config['address'],ENT_QUOTES,'UTF-8'), htmlspecialchars($config['suburb'],ENT_QUOTES,'UTF-8'), $config['postcode']==0?'':htmlspecialchars($config['postcode'],ENT_QUOTES,'UTF-8'), + htmlspecialchars($config['state'],ENT_QUOTES,'UTF-8'), htmlspecialchars($config['country'],ENT_QUOTES,'UTF-8') ],$html); } diff --git a/core/view/courses.php b/core/view/courses.php new file mode 100644 index 0000000..41d106b --- /dev/null +++ b/core/view/courses.php @@ -0,0 +1,268 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */ +$rank=0; +$show=''; +$currentPassCSS=$matchPassCSS=''; +$currentPassHidden=$matchPassHidden=$successHidden=$success=$theme['settings']['hidden']; +$successShow=$theme['settings']['show']; +if(isset($args[1])&&$args[1]=='redo'){ + $sqm=$db->prepare("DELETE FROM `".$prefix."moduleQuestionsTrack` WHERE `uid`=:uid AND `cid`=:cid"); + $sqm->execute([ + ':uid'=>$user['id'], + ':cid'=>$args[0] + ]); + unset($args[1]); +} +if((isset($_SESSION['loggedin'])&&$_SESSION['loggedin']==true)&&(isset($user)&&$user['rank']>0)){ + $html=preg_replace([ + '//', + '//', + $page['notes']!=''?'/<[\/]?pagenotes>/':'~.*?<\/pagenotes>~is' + ],[ + htmlspecialchars(($page['heading']==''?$page['seoTitle']:$page['heading']),ENT_QUOTES,'UTF-8'), + $page['notes'], + '' + ],$html); + if(!isset($args[0])){ + preg_match('/([\w\W]*?)<\/items>/',$html,$match); + $items=$match[1]; + $output=''; + $sc=$db->prepare("SELECT * FROM `".$prefix."courseTrack` WHERE `uid`=:uid"); + $sc->execute([':uid'=>$user['id']]); + while($rc=$sc->fetch(PDO::FETCH_ASSOC)){ + $scc=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `id`=:id ORDER BY `ti` DESC"); + $scc->execute([':id'=>$rc['rid']]); + $rcc=$scc->fetch(PDO::FETCH_ASSOC); + $mcs=$db->prepare("SELECT COUNT(`id`) AS `cnt` FROM `".$prefix."modules` WHERE `id` < :id"); + $mcs->execute([':id'=>$rc['complete']]); + $rcs=$mcs->fetch(PDO::FETCH_ASSOC); + $snext=$db->prepare("SELECT `id` FROM `".$prefix."modules` WHERE `rid`=:rid AND `id`>:id ORDER BY `ord` ASC LIMIT 1"); + $snext->execute([ + ':rid'=>$rc['rid'], + ':id'=>$rc['complete'] + ]); + $next=$snext->fetch(PDO::FETCH_ASSOC); + $smc=$db->prepare("SELECT COUNT(`id`) AS `cnt` FROM `".$prefix."modules` WHERE `rid`=:rid"); + $smc->execute([':rid'=>$rc['rid']]); + $rmc=$smc->fetch(PDO::FETCH_ASSOC); + $out=''; + $out=preg_replace([ + '//', + '//', + '//', + '//', + '//', + '//', + '//', + '//' + ],[ + ($rcc['thumb']!=''&&file_exists('media/sm/'.basename($rcc['thumb']))?'media/sm/'.basename($rcc['thumb']):NOIMAGESM), + '', // image + $rcc['title'], + $rcc['title'], + $rc['complete']=='done'?'Complete
Score '.$rc['score'].'%':($mcs->rowCount()>0?$rc['progress'].' of '.$rmc['cnt'].' Modules Complete':'Not Started'), + $rc['complete']=='done'?URL.'courses/'.$rc['id'].'/assessment':($snext->rowCount()>0?URL.'courses/'.$rc['id'].'/'.$next['id']:URL.'courses/'.$rc['id']), + '', + $next['id'] + ],$items); + $output.=$out; + } + $html=preg_replace([ + '~.*?<\/assessment>~is', + '~.*?<\/item>~is', + '/<[\/]?contentitems>/', + '~.*?<\/items>~is' + ],[ + '', + '', + '', + $output + ],$html); + } + if(isset($args[1])&&$args[1]=='assessment'){ + $moduleQuestions=''; + $score=0; + $qcount=0; + $sc=$db->prepare("SELECT * FROM `".$prefix."courseTrack` WHERE `id`=:id"); + $sc->execute([':id'=>$args[0]]); + $rc=$sc->fetch(PDO::FETCH_ASSOC); + $sm=$db->prepare("SELECT * FROM `".$prefix."modules` WHERE `rid`=:rid ORDER BY `ord` ASC"); + $sm->execute([':rid'=>$rc['rid']]); + if($sm->rowCount()>0){ + while($rm=$sm->fetch(PDO::FETCH_ASSOC)){ + $smq=$db->prepare("SELECT * FROM `".$prefix."moduleQuestions` WHERE `rid`=:rid ORDER BY `ord` ASC"); + $smq->execute([':rid'=>$rm['id']]); + if($smq->rowCount()>0){ + $moduleQuestions.='
Module - '.$rm['title'].'
'; + } + while($rq=$smq->fetch(PDO::FETCH_ASSOC)){ + if($rq['check_answer']==1)$qcount++; + $smqt=$db->prepare("SELECT * FROM `".$prefix."moduleQuestionsTrack` WHERE `uid`=:uid AND `mid`=:mid AND `qid`=:qid"); + $smqt->execute([ + ':uid'=>$user['id'], + ':mid'=>$rm['id'], + ':qid'=>$rq['id'] + ]); + $moduleQuestions.='
    '. + '
  1. '.$rq['title']; + if($smqt->rowCount()==1){ + $moduleQuestions.=' - '.($rq['check_answer']==1?'Correct':'Incorrect'); + if($rq['check_answer']==1)$score++; + } + $moduleQuestions.='
  2. '. + '
'; + } + } + } + $html=preg_replace([ + '//', + $moduleQuestions==''?'~.*?<\/questions>~is':'/<[\/]?questions>/' + ],[ + $moduleQuestions, + '' + ],$html); + $totalscore=($score / $qcount) * 100; + $sc=$db->prepare("UPDATE `".$prefix."courseTrack` SET `complete`='done', `score`=:score, `attempts`=GREATEST(0, `attempts` - 1) WHERE `id`=:id"); + $sc->execute([ + ':id'=>$args[0], + ':score'=>$totalscore + ]); + $scc=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `id`=:rid"); + $scc->execute([':rid'=>$rc['rid']]); + $rcc=$scc->fetch(PDO::FETCH_ASSOC); + $html=preg_replace([ + '~.*?<\/item>~is', + '~.*?<\/contentitems>~is', + '/<[\/]?assessment>/', + $totalscore>$rcc['rating']?'~.*?<\/fail>~is':'/<[\/]?fail>/', + $totalscore>$rcc['rating']?'/<[\/]?success>/':'~.*?<\/success>~is', + '/<[\/]?score>/', + '//', + '//', + '//', + '//' + ],[ + '', + '', + '', + '', + '', + '', + URL.'core/view_certificate.php?id='.$rc['rid'].'&uid='.$user['id'], + $totalscore.'%', + $rcc['rating'].'%', + $rc['attempts']!=0?'However, you have '.$rc['attempts'].' attempts left.

Click here to try again.':'Unfortunately you have no more attempts left' + ],$html); + }elseif(isset($args[0])){ + $act=isset($_POST['act'])?$_POST['act']:''; + if(isset($_POST['cid']))$args[0]=$_POST['cid']; + if(isset($_POST['nid']))$args[1]=$_POST['nid']; + $mid=isset($_POST['mid'])?$_POST['mid']:''; + if($act=='questions'){ + $q=isset($_POST['q'])?$_POST['q']:''; + if(isset($q)&&count($q)>0){ + for($i=0;$iprepare("INSERT IGNORE INTO `".$prefix."moduleQuestionsTrack` (`uid`,`cid`,`mid`,`qid`) VALUES (:uid,:cid,:mid,:qid)"); + $sq->execute([ + ':uid'=>$user['id'], + ':cid'=>$args[0], + ':mid'=>$mid, + ':qid'=>$q[$i] + ]); + } + } + } + $sc=$db->prepare("SELECT * FROM `".$prefix."courseTrack` WHERE `id`=:id AND `uid`=:uid"); + $sc->execute([ + ':id'=>$args[0], + ':uid'=>$user['id'] + ]); + $rc=$sc->fetch(PDO::FETCH_ASSOC); + $scc=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `id`=:id"); + $scc->execute([':id'=>$rc['rid']]); + $rcc=$scc->fetch(PDO::FETCH_ASSOC); + if(isset($args[1])){ + $sm=$db->prepare("SELECT * FROM `".$prefix."modules` WHERE `id`=:id"); + $sm->execute([':id'=>$args[1]]); + $rm=$sm->fetch(PDO::FETCH_ASSOC); + $progress=$rc['progress'] + 1; + }else{ + $sm=$db->prepare("SELECT * FROM `".$prefix."modules` WHERE `rid`=:rid ORDER BY `ord` ASC"); + $sm->execute([':rid'=>$rc['rid']]); + $rm=$sm->fetch(PDO::FETCH_ASSOC); + $progress=0; + } + $sq=$db->prepare("UPDATE `".$prefix."courseTrack` SET `complete`=:mid, `progress`=:progress WHERE `id`=:id"); + $sq->execute([ + ':id'=>$args[0], + ':mid'=>$mid, + ':progress'=>$progress + ]); + $snext=$db->prepare("SELECT * FROM `".$prefix."modules` WHERE `rid`=:rid AND `id`>:id ORDER BY `ord` ASC LIMIT 1"); + $snext->execute([ + ':rid'=>$rcc['id'], + ':id'=>isset($args[1])?$args[1]:$rm['id'] + ]); + $next=$snext->fetch(PDO::FETCH_ASSOC); + $questions=''; + $sq=$db->prepare("SELECT * FROM `".$prefix."moduleQuestions` WHERE `rid`=:rid ORDER BY `ord` ASC"); + $sq->execute([':rid'=>isset($args[1])?$args[1]:$rm['id']]); + while($rq=$sq->fetch(PDO::FETCH_ASSOC)){ + $questions.= + '
'. + '
'. + ''. + ''. + '
'. + '
'; + } + $html=preg_replace([ + '~.*?<\/contentitems>~is', + '~.*?<\/assessment>~is', + '/<[\/]?item>/', + '//', + '//', + '//', + '//', + '//', + '//', + '//', + $sq->rowCount()>0?'/<[\/]?questions>/':'~.*?<\/questions>~is', + '//', + $sq->rowCount()>0?'~.*?<\/nextmodule>~is':'/<[\/]?nextmodule>/', + '//', + '//' + ],[ + '', + '', + '', + $rcc['title'], + $rm['title'], + $rm['notes'], + $rc['id'], + $rm['id'], + URL.'courses/'.$rc['id'].'/', + $rm['question'], + '', + $questions, + '', + $next['id']!=''?$next['id']:'assessment', + $next['id']!=''?'Proceed to Module '.$next['title']:'Proceed to Assessment' + ],$html); + } +}else{ + if(file_exists(THEME.'/noaccess.html')) + $html=file_get_contents(THEME.'/noaccess.html'); +} +$content.=$html; diff --git a/core/view/footer.php b/core/view/footer.php index c8942ea..ddd35ac 100755 --- a/core/view/footer.php +++ b/core/view/footer.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.8 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -29,6 +29,7 @@ '//', '//', '//', + '//', '//', '//', '//', @@ -65,6 +66,7 @@ htmlspecialchars($config['address'],ENT_QUOTES,'UTF-8'), htmlspecialchars($config['suburb'],ENT_QUOTES,'UTF-8'), $config['postcode']==0?'':htmlspecialchars($config['postcode'],ENT_QUOTES,'UTF-8'), + htmlspecialchars($config['state'],ENT_QUOTES,'UTF-8'), htmlspecialchars($config['country'],ENT_QUOTES,'UTF-8'), $config['phone']!=''?''.htmlspecialchars($config['phone'],ENT_QUOTES,'UTF-8').'':'', $config['mobile']!=''?''.htmlspecialchars($config['mobile'],ENT_QUOTES,'UTF-8').'':'', diff --git a/core/view/header.php b/core/view/header.php index 232f13f..364b910 100755 --- a/core/view/header.php +++ b/core/view/header.php @@ -115,7 +115,7 @@ $menuURL.=URL.$r['contentType'].'/'; if(!in_array( $r['contentType'], - ['aboutus','activities','article','biography','bookings','cart','contactus','distributors', + ['aboutus','activities','article','biography','bookings','cart','contactus','course','distributors', 'events','forum','gallery','inventory','news','newsletters','portfolio', 'proofs','search','service','testimonials','tos'], true) @@ -163,7 +163,7 @@ $subURL.=URL.$rm['contentType'].'/'; if(!in_array( $rm['contentType'], - ['aboutus','article','biography','bookings','cart','contactus','distributors', + ['aboutus','article','biography','bookings','cart','contactus','course','distributors', 'events','gallery','inventory','news','newsletters','portfolio', 'proofs','search','service','testimonials','tos'], true) diff --git a/core/view/inc-hours.php b/core/view/inc-hours.php index a9f3010..67c8141 100755 --- a/core/view/inc-hours.php +++ b/core/view/inc-hours.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.2 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -49,10 +49,10 @@ '//', '//' ],[ - ucfirst(($config['options'][20]==1?substr($r['username'],0,3):$r['username'])), - ($r['password']==$r['username']?'':'-'.ucfirst(($config['options'][20]==1?substr($r['password'],0,3):$r['password']))), - $hourFrom, - ($r['tie']>0?'-'.$hourTo:''), + ucfirst(($config['options'][20]==1?substr($r['username'],0,3):$r['username'])).($r['password']!=$r['username']?' - ':' '), + ($r['password']==$r['username']?'':ucfirst(($config['options'][20]==1?substr($r['password'],0,3):$r['password']))), + ($r['password']!=''?' - ':'').$hourFrom, + ($r['tie']>0?' - '.$hourTo:''), ($r['title']!=''?ucfirst($r['title']):'') ],$buildHours); $hoursItems.=$buildHours; diff --git a/core/view/orders.php b/core/view/orders.php index facbe56..8b69ea9 100755 --- a/core/view/orders.php +++ b/core/view/orders.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.12 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -80,6 +80,7 @@ } } $order=preg_replace([ + ($r['notes']==''?'~.*?<\/orderNotes>~is':'/<[\/]?orderNotes>/'), '//', '//', '//', @@ -111,6 +112,7 @@ '//', '//' ],[ + '', $r['notes'], htmlspecialchars($config['business'],ENT_QUOTES,'UTF-8'), htmlspecialchars($config['abn'],ENT_QUOTES,'UTF-8'), @@ -208,8 +210,8 @@ '//', '//' ],[ - 'W: '.$dimW.'cm X L: '.$dimL.'cm X H: '.$dimH.'cm', - $weight.'kg'.($weight>22?'
As the weight of your items exceeds 22kg you will not be able to use Australia Post.
':'') + ($dimW>0&&$dimL>0&&$dimH>0?'Estimated Dimensions: W: '.$dimW.'cm X L: '.$dimL.'cm X H: '.$dimH.'cm':''), + ($weight>0?'Total Weight: '.$weight.'kg'.($weight>22?'
As the weight of your items exceeds 22kg you will not be able to use Australia Post.
':''):'') ],$order); $sr=$db->prepare("SELECT * FROM `".$prefix."rewards` WHERE `id`=:id"); $sr->execute([':id'=>$r['rid']]); @@ -334,18 +336,22 @@ ':total'=>$total ]); $html=preg_replace('~~is',$order,$html,1); - if(($config['iconsColor'][0]==1&&$ru['rank']<310)&&$ru['address']==''||$ru['city']==''||$ru['suburb']==''||$ru['country']=''||$ru['state']==''||$ru['postcode']==0){ - $html=preg_replace([ - '~.*?<\/bankdetails>~is', - '//', - ], - 'Please fill in Address Information for Shipping', - $html,1); + if($config['iconsColor'][0]==1){ + if($ru['address']==''||$ru['city']==''||$ru['suburb']==''||$ru['country']=''||$ru['state']==''||$ru['postcode']==0){ + $html=preg_replace([ + '~.*?<\/bankdetails>~is', + '//', + ], + 'Please fill in Address Information for Shipping', + $html,1); + } }else{ $html=preg_replace([ + ($r['status']!='paid'?'/<[\/]?ordercheckout>/':'~.*?<\/ordercheckout>~is'), '//', - '/<[\/]?bankdetails>/' + '~.*?<\/bankdetails>~is' ],[ + '', $r['status']!='paid'?'Proceed to Checkout':'
Order Already Paid
', '' ],$html,1); diff --git a/core/view/side_courses.php b/core/view/side_courses.php new file mode 100644 index 0000000..e807e11 --- /dev/null +++ b/core/view/side_courses.php @@ -0,0 +1,59 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */ +$sideTemp=''; +if(file_exists(THEME.'/side_courses.html')){ + $sideTemp=file_get_contents(THEME.'/side_courses.html'); + $uid=isset($_SESSION['uid'])?$_SESSION['uid']:0; + $ru=[ + 'options'=>'00000000000000000000000000000000', + 'rank'=>0 + ]; + if($uid!=0){ + $su=$db->prepare("SELECT `options`,`rank` FROM `".$prefix."login` WHERE `id`=:id"); + $su->execute([':id'=>$uid]); + $ru=$su->fetch(PDO::FETCH_ASSOC); + }else $sideTemp=''; + $sortOptions= + ''. + ''. + ''. + ''. + ''. + ''. + ''. + ''; + $sct=$db->prepare("SELECT COUNT(`id`) AS `cnt` FROM `".$prefix."courseTrack` WHERE `complete`='done' AND `uid`=:uid"); + $sct->execute([ + ':uid'=>$user['id'] + ]); + $rct=$sct->fetch(PDO::FETCH_ASSOC); + $sideTemp=preg_replace([ + isset($args[0])?'~.*?<\/sort>~is':'/<[\/]?sort>/', + isset($args[0])?'~.*?<\/stats>~is':'/<[\/]?stats>/', + '//', + '//', + $config['showItems']>0?'/<[\/]?showItems>/':'~.*?<\/showItems>~is', + '//', + '//' + ],[ + '', + '', + (((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://").$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], + $sortOptions, + '', + $config['showItems'], + $rct['cnt'] + ],$sideTemp); +} +$content.=$sideTemp; diff --git a/core/view/side_menu.php b/core/view/side_menu.php index a1dac5a..fc65cdb 100755 --- a/core/view/side_menu.php +++ b/core/view/side_menu.php @@ -7,7 +7,7 @@ * @author Dennis Suitters * @copyright 2014-2019 Diemen Design * @license http://opensource.org/licenses/MIT MIT License - * @version 0.2.17 + * @version 0.2.18 * @link https://github.com/DiemenDesign/AuroraCMS * @notes This PHP Script is designed to be executed using PHP 7+ */ @@ -45,7 +45,7 @@ ],$sideTemp); if($show=='item') $sideTemp=preg_replace('~.*?<\/sort>~is','',$sideTemp); - if($show=='item'&&($view=='service'||$view=='inventory'||$view=='events'||$view=='activities')){ + if($show=='item'&&($view=='service'||$view=='inventory'||$view=='events'||$view=='activities'||$view=='course')){ $sideCost=''; if($r['options'][0]==1){ if(is_numeric($r['cost'])&&$r['cost']!=0){ @@ -76,19 +76,7 @@ '
'; } } - $sideTemp=preg_replace([ - '//', - '//', - '//', - $r['points']>0&&$config['options'][0]==1?'/<[\/]?points>/':'~.*?<\/points>~is', - '//' - ],[ - $r['stockStatus']=='quantity'?($r['quantity']==0?'out of stock':'in stock'):($r['stockStatus']!='none'?'':$r['stockStatus']), - $sideCost, - $r['id'], - '', - number_format((float)$r['points']) - ],$sideTemp); + if(isset($_SESSION['rank'])){ if($_SESSION['rank']>309&&$_SESSION['rank']<349){ if($r['rank']!=$_SESSION['rank']){ @@ -104,56 +92,43 @@ }else $sideTemp=preg_replace('/<[\/]?addtocart>/','',$sideTemp); $sideQuantity=''; + $quantity=''; + $sideTemp=preg_replace([ + ($r['coming'][0]==1?'~.*?<\/quantity>~is':'/<[\/]?quantity>/'), + '//', + '//', + $r['itemCondition']!=''?'/<[\/]?condition>/':'~.*?<\/condition>~is', + '//', + $r['weight']!=''?'/<[\/]?weight>/':'~.*?<\/weight>~is', + '//', + ($r['width']!=''&&$r['height']!=''&&$r['length']!=''?'/<[\/]?size>/':'~.*?<\/size>~is'), + '//', + '//', + '//', + '//', + '//', + '//', + $r['points']>0&&$config['options'][0]==1?'/<[\/]?points>/':'~.*?<\/points>~is', + '//' + ],[ + '', + ($r['contentType']=='course'?($r['attempts']==0?'':$r['attempts'].' attempts are available with this course'):($r['quantity']==0?($r['stockStatus']=='sold out'?'
Sold Out
':''):$r['quantity'])), + ($r['stockStatus']=='quantity'?($r['quantity']>0?'in stock':'out of stock'):($r['stockStatus']=='none'?'':$r['stockStatus'])).'.'.($r['cartonQuantity']>0?' ('.$r['cartonQuantity'].'per carton.)':''), + '', + $r['itemCondition'], + '', + $r['weight'].$r['weightunit'], + '', + $r['width'].$r['widthunit'], + $r['height'].$r['heightunit'], + $r['length'].$r['lengthunit'], + $r['stockStatus']=='quantity'?($r['quantity']==0?'out of stock':'in stock'):($r['stockStatus']!='none'?'':$r['stockStatus']), + $sideCost, + $r['id'], + '', + number_format((float)$r['points']) + ],$sideTemp); if(isset($r['contentType'])&&$r['contentType']=='inventory'){ - $sideTemp=preg_replace([ - ($r['coming'][0]==1?'~.*?<\/quantity>~is':'/<[\/]?quantity>/'), - '//', - '//' - ],[ - '', - ($r['quantity']==0?($r['stockStatus']=='sold out'?'
Sold Out
':''):$r['quantity']), - ($r['stockStatus']=='quantity'?($r['quantity']>0?'in stock':'out of stock'):($r['stockStatus']=='none'?'':$r['stockStatus'])).'.'.($r['cartonQuantity']>0?' ('.$r['cartonQuantity'].'per carton.)':'') - ],$sideTemp); - if(stristr($sideTemp,'')){ - if($r['itemCondition']!=''){ - $sideTemp=preg_replace([ - '/<[\/]?condition>/', - '//' - ],[ - '', - $r['itemCondition'], - ],$sideTemp); - }else - $sideTemp=preg_replace('~.*?<\/condition>~is','',$sideTemp); - } - if(stristr($sideTemp,'')){ - if($r['weight']!=''){ - $sideTemp=preg_replace([ - '/<[\/]?weight>/', - '//' - ],[ - '', - $r['weight'].$r['weightunit'], - ],$sideTemp); - }else - $sideTemp=preg_replace('~.*?<\/weight>~is','',$sideTemp); - } - if(stristr($sideTemp,'')){ - if($r['width']!=''&&$r['height']!=''&&$r['length']!=''){ - $sideTemp=preg_replace([ - '/<[\/]?size>/', - '//', - '//', - '//' - ],[ - '', - $r['width'].$r['widthunit'], - $r['height'].$r['heightunit'], - $r['length'].$r['lengthunit'] - ],$sideTemp); - }else - $sideTemp=preg_replace('~.*?<\/size>~is','',$sideTemp); - } if(stristr($sideTemp,'')){ if($r['brand']!=0){ $sb=$db->prepare("SELECT `id`,`title`,`url`,`icon` FROM `".$prefix."choices` WHERE `contentType`='brand' AND `id`=:id"); @@ -180,20 +155,27 @@ $choices.=''; } $choices.=''; - $sideTemp=str_replace('',$choices,$sideTemp); + $sideTemp=preg_replace('//',$choices,$sideTemp); }else - $sideTemp=str_replace('','',$sideTemp); + $sideTemp=preg_replace('//','',$sideTemp); }else{ $sideTemp=preg_replace([ - '', + '//', '~.*?<\/inventory>~is' ], '', $sideTemp); } - }else - $sideTemp=preg_replace('~.*?<\/quantity>~is','',$sideTemp); - if($r['contentType']=='service'||$r['contentType']=='events'||$r['contentType']=='activities'){ + }else{ + $sideTemp=preg_replace([ + '/<[\/]?choices>/', + '~.*?<\/brand>~is', + '~.*?<\/quantity>~is' + ], + '' + ,$sideTemp); + } + if($r['contentType']=='service'||$r['contentType']=='events'||$r['contentType']=='activities'||$r['contentType']=='course'){ if($r['bookable']==1){ if(stristr($sideTemp,'')){ $sideTemp=preg_replace([ @@ -210,13 +192,13 @@ $sideTemp=preg_replace('~.*?<\/service>~is','',$sideTemp,1); }else $sideTemp=preg_replace('~.*?<\/service>~is','',$sideTemp,1); - if($r['contentType']=='inventory'&&is_numeric($r['cost'])){ + if($r['contentType']=='inventory'||$r['contentType']=='course'&&is_numeric($r['cost'])){ if(stristr($sideTemp,'')){ $sideTemp=preg_replace([ ($r['coming'][0]==1?'~.*?<\/inventory>~is':'/<[\/]?inventory>/'), '~.*?<\/service>~is' ],'',$sideTemp); - }elseif(stristr($sideTemp,'')&&$r['contentType']!='inventory') + }elseif(stristr($sideTemp,'')&&$r['contentType']!='inventory'||$r['contentType']!='course') $sideTemp=preg_replace('~.*?<\/inventory>~is','',$sideTemp,1); }else $sideTemp=preg_replace('~.*?<\/inventory>~is','',$sideTemp,1); @@ -232,9 +214,9 @@ if(stristr($sideTemp,'')){ if($show=='item') $sideTemp=preg_replace('~.*?<\/sort>~is','',$sideTemp); - elseif($view=='inventory'||$view=='service'||$view=='article'||$view=='news'||$view=='events'||$view=='portfolio'||$view=='gallery'){ + elseif($view=='course'||$view=='inventory'||$view=='service'||$view=='article'||$view=='news'||$view=='events'||$view=='portfolio'||$view=='gallery'){ $sortOptions=''; - if($view=='inventory'){ + if($view=='inventory'||$view=='course'){ $sortOptions= ''. ''. @@ -275,7 +257,7 @@ '/<[\/]?sort>/', '//', '//', - $config['showItems']>0?'/<[]\/]?showItems>/':'~.*?<\/showItems>~is', + $config['showItems']>0?'/<[\/]?showItems>/':'~.*?<\/showItems>~is', '//' ],[ '', diff --git a/core/view_certificate.php b/core/view_certificate.php new file mode 100644 index 0000000..480909f --- /dev/null +++ b/core/view_certificate.php @@ -0,0 +1,49 @@ + + * @copyright 2014-2019 Diemen Design + * @license http://opensource.org/licenses/MIT MIT License + * @version 0.2.18 + * @link https://github.com/DiemenDesign/AuroraCMS + * @notes This PHP Script is designed to be executed using PHP 7+ + */ +require'db.php'; +$config=$db->query("SELECT * FROM `".$prefix."config` WHERE `id`=1")->fetch(PDO::FETCH_ASSOC); +$id=isset($_GET['id'])?$_GET['id']:0; +$uid=isset($_GET['uid'])?$_GET['uid']:0; +if($uid==0){ + $user=[ + 'id'=>0, + 'username'=>'Anonymous', + 'name'=>'Anonymous' + ]; +}else{ + $su=$db->prepare("SELECT `id`,`username`,`name` FROM `".$prefix."login` WHERE `id`=:id"); + $su->execute([':id'=>$uid]); + $user=$su->fetch(PDO::FETCH_ASSOC); +} +$s=$db->prepare("SELECT * FROM `".$prefix."content` WHERE `id`=:id"); +$s->execute([':id'=>$id]); +$r=$s->fetch(PDO::FETCH_ASSOC); +if(file_exists('../media/certificate/certificate-'.$r['cid'].'.html')){ + $html=file_get_contents('../media/certificate/certificate-'.$r['cid'].'.html'); + $html=preg_replace([ + '//', + '//', + '//', + '//', + '//' + ],[ + $config['business'], + $r['title'], + date('jS F Y',time()), // 22nd October 2020 + $user['username'], + $user['name']!=''?$user['name']:$user['username'] + ],$html); + print$html; +}else + echo'Template file for Certificate '.$r['cid'].' does not exist!'; diff --git a/layout/default/aboutus.html b/layout/default/aboutus.html index 6c91f2e..49db852 100755 --- a/layout/default/aboutus.html +++ b/layout/default/aboutus.html @@ -17,14 +17,14 @@ -
+

-
+
diff --git a/layout/default/biography.html b/layout/default/biography.html index f75fea6..bc35800 100755 --- a/layout/default/biography.html +++ b/layout/default/biography.html @@ -26,7 +26,7 @@

-
+
@@ -44,7 +44,7 @@

-
+
diff --git a/layout/default/bookings.html b/layout/default/bookings.html index cf74ad5..b4746c7 100755 --- a/layout/default/bookings.html +++ b/layout/default/bookings.html @@ -17,7 +17,7 @@ -
+

diff --git a/layout/default/cart.html b/layout/default/cart.html index e8c341e..dc98633 100755 --- a/layout/default/cart.html +++ b/layout/default/cart.html @@ -1,15 +1,15 @@ - -
-
-

- -
-
-
-
+
+
+

+ + + +
+
+
@@ -47,8 +47,8 @@

Your Cart

- Weight:
- Dimensions: + +
@@ -76,14 +76,14 @@

Your Cart

- Estimated Dimensions: + - Total Weight: + @@ -94,91 +94,95 @@

Your Cart

Prices are in Australian Dollars (AUD)
-
- - - - - - -

Create or Add to Existing Account

- - -
- - -
- -
- - -
- -
- -
- -
- -
Must be a valid phone number.
-
- -
- -
- -
- - -
- -
- -
- -
- - - -
- -
- -
- -
- -
-
- -
- -
- - - - Note: Delivery prices are estimates, and may change depending on order items and location of delivery. - - - - - Note: Payment Option Selected may change the overall cost, which will be reflected on the Order. - - - +
+
+ + +
+ + + + +

Create or Add to Existing Account

+ + +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ +
Must be a valid phone number.
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + + +
+ +
+ +
+ +
+ +
+
+ +
+ +
+ + + + Note: Delivery prices are estimates, and may change depending on order items and location of delivery. + + + + + Note: Payment Option Selected may change the overall cost, which will be reflected on the Order. + + +
+
+
diff --git a/layout/default/checkout.html b/layout/default/checkout.html index 58e8c89..264c92e 100755 --- a/layout/default/checkout.html +++ b/layout/default/checkout.html @@ -4,13 +4,11 @@

Options to Pay Order #

+ + +
- -
-
-
- - +
@@ -47,7 +45,7 @@

Options to Pay Order #

type:"POST", url:"core/paypalpayment.php", data:{ - id:, + id:, name:name, email:email, txnid:txnid, @@ -73,9 +71,7 @@

Options to Pay Order #

initPayPalButton();
- - -
+

Direct Deposit

Bank:
@@ -87,16 +83,13 @@

Direct Deposit

Note: When paying via Direct Deposit, please use the Order Number above in the payment description so we can easily determine your payment.

-
-
- -
+
Pay via AfterPay
- +
@@ -109,11 +102,11 @@

Direct Deposit

-
+
-
+
@@ -222,8 +215,7 @@

Direct Deposit

} setOutcome(event); }); - - +
diff --git a/layout/default/content.html b/layout/default/content.html index bd6b898..15aa510 100755 --- a/layout/default/content.html +++ b/layout/default/content.html @@ -17,7 +17,7 @@ -
+
-
+
@@ -90,43 +89,6 @@

- - -
-
-
-
-
-
- - Book Now - - - - - Earn points when purchasing this item. - - - -
Condition:
-
- -
Weight:
-
- -
Size: - Width:
- Height:
- Length: -
-
- -
-
-
-
-
-
+ +
Course Modules:
+
    + +
  1. + + + Estimated time: +
  2. +
    +
+ +

Estimated total time to complete:

+
+
diff --git a/layout/default/courses.html b/layout/default/courses.html new file mode 100644 index 0000000..47150b3 --- /dev/null +++ b/layout/default/courses.html @@ -0,0 +1,124 @@ + + + +
+ +
+
+

+

+ +
+ + + + + + +
+
Questions
+
+

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

+

Assessment

+ +
Questions Answered
+ +
+ +
You Scored
+
+
+ +
+ Congratulations!
+ You Passed
+
+ View your newly acquired Certificate +
+
+ +
+ A score of at least is required to pass this course.
+ +
+
+
+
+
+ +
+ +
+

+ +
+
+ +
+ +
+
+
+ +
+
+ <print course=imageALT> +
+
+ +
+
+
+ +
+ +
+
+
+
+ + +
+ + diff --git a/layout/default/faq.html b/layout/default/faq.html index a336899..53c93d3 100755 --- a/layout/default/faq.html +++ b/layout/default/faq.html @@ -18,14 +18,14 @@ -
+

-
+
> diff --git a/layout/default/header.html b/layout/default/header.html index cb90ce2..0eabde9 100755 --- a/layout/default/header.html +++ b/layout/default/header.html @@ -11,11 +11,11 @@
  • Administration
  • -
  • +
  • + -
    @@ -80,7 +80,7 @@ cart - Make a Booking + Make a Booking
    diff --git a/layout/default/noaccess.html b/layout/default/noaccess.html index a142da1..8cffad8 100755 --- a/layout/default/noaccess.html +++ b/layout/default/noaccess.html @@ -1,5 +1,5 @@
    -
    +
    diff --git a/layout/default/orders.html b/layout/default/orders.html index e7c2a9b..c37a125 100755 --- a/layout/default/orders.html +++ b/layout/default/orders.html @@ -23,7 +23,7 @@

    - +
    Due:
    @@ -158,11 +158,11 @@

    Details

    - Estimated Dimensions: + - Total Weight: + @@ -171,16 +171,18 @@

    Details

    -

    Notes:

    -
    - - - -
    + +

    Notes:

    +
    + + + +
    +
    -

    Banking Details:

    +

    Banking Details:

    Bank:
    Account Name:
    @@ -190,8 +192,10 @@

    Banking Details:

    -

    Pay Online:

    - + +

    Pay Online:

    + +
    diff --git a/layout/default/page.html b/layout/default/page.html index 70d9948..1089b7f 100755 --- a/layout/default/page.html +++ b/layout/default/page.html @@ -17,14 +17,14 @@ -
    +

    -
    +
    diff --git a/layout/default/settings.html b/layout/default/settings.html index a267ee4..159e0dd 100755 --- a/layout/default/settings.html +++ b/layout/default/settings.html @@ -2,7 +2,7 @@ -
    +

    diff --git a/layout/default/side_courses.html b/layout/default/side_courses.html new file mode 100644 index 0000000..c5a51a9 --- /dev/null +++ b/layout/default/side_courses.html @@ -0,0 +1,31 @@ + diff --git a/layout/default/side_menu.html b/layout/default/side_menu.html index ff01434..911bc5f 100755 --- a/layout/default/side_menu.html +++ b/layout/default/side_menu.html @@ -1,13 +1,8 @@