From 65ebcef76ebbf64230430ee3fc24e470609ad337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=81Z=C3=81R=20Imre=20AI=20Agent?= Date: Thu, 16 Jul 2026 11:40:36 +0200 Subject: [PATCH] feat(baseline): add remaining legit files (postupdate, isis js, windwalker cli, sbtrack) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Completeness: administrator/postupdate.php + isis/js/_template.js (clean core files absent from the downloaded package), bin/windwalker (Windwalker CLI), sbtrack.php (Cadline tracking docroot PHP). All vetted malware-free. Signed-off-by: LÁZÁR Imre Assisted-by: claude-code@claude-opus-4-8 --- cadline/docroot/sbtrack.php | 114 +++++++++ deployed/windwalker/bin/windwalker | 4 + overrides/administrator/postupdate.php | 97 ++++++++ .../templates/isis/js/_template.js | 224 ++++++++++++++++++ 4 files changed, 439 insertions(+) create mode 100644 cadline/docroot/sbtrack.php create mode 100644 deployed/windwalker/bin/windwalker create mode 100644 overrides/administrator/postupdate.php create mode 100644 overrides/administrator/templates/isis/js/_template.js diff --git a/cadline/docroot/sbtrack.php b/cadline/docroot/sbtrack.php new file mode 100644 index 00000000..fa041754 --- /dev/null +++ b/cadline/docroot/sbtrack.php @@ -0,0 +1,114 @@ + '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}', + 'text_file' => 'joomla_update.php', + ), + JLog::INFO, + array('Update', 'databasequery', 'jerror') +); + +JLog::add('Starting manual update using postupdate', JLog::INFO, 'Update'); + +// Load the Joomla library and update component language files +JFactory::getLanguage()->load('lib_joomla'); +JFactory::getLanguage()->load('com_joomlaupdate'); + +JLog::add(JText::_('COM_JOOMLAUPDATE_UPDATE_LOG_FINALISE'), JLog::INFO, 'Update'); + +// Finalize the update +if ($model->finaliseUpgrade() === false) +{ + echo 'Failed to finalize the upgrade, please check the logs for additional details.' . PHP_EOL; + + exit(1); +} + +JLog::add(JText::_('COM_JOOMLAUPDATE_UPDATE_LOG_CLEANUP'), JLog::INFO, 'Update'); + +// Cleanup after the update +$model->cleanUp(); + +JLog::add(JText::sprintf('COM_JOOMLAUPDATE_UPDATE_LOG_COMPLETE', JVERSION), JLog::INFO, 'Update'); +JLog::add('Finished manual update using postupdate', JLog::INFO, 'Update'); + +echo 'Update to ' . JVERSION . ' completed successfully.' . PHP_EOL; \ No newline at end of file diff --git a/overrides/administrator/templates/isis/js/_template.js b/overrides/administrator/templates/isis/js/_template.js new file mode 100644 index 00000000..3e6db25a --- /dev/null +++ b/overrides/administrator/templates/isis/js/_template.js @@ -0,0 +1,224 @@ +/** + * @package Joomla.Administrator + * @subpackage Templates.isis + * @copyright Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + * @since 3.0 + */ + +(function($) +{ + $(document).ready(function() + { + $('*[rel=tooltip]').tooltip(); + + // Turn radios into btn-group + $('.radio.btn-group label').addClass('btn'); + $('.btn-group label:not(.active)').click(function() + { + var label = $(this); + var input = $('#' + label.attr('for')); + + if (!input.prop('checked')) { + label.closest('.btn-group').find('label').removeClass('active btn-success btn-danger btn-primary'); + if (input.val() == '') { + label.addClass('active btn-primary'); + } else if (input.val() == 0) { + label.addClass('active btn-danger'); + } else { + label.addClass('active btn-success'); + } + input.prop('checked', true); + input.trigger('change'); + } + }); + $('.btn-group input[checked=checked]').each(function() + { + if ($(this).val() == '') { + $('label[for=' + $(this).attr('id') + ']').addClass('active btn-primary'); + } else if ($(this).val() == 0) { + $('label[for=' + $(this).attr('id') + ']').addClass('active btn-danger'); + } else { + $('label[for=' + $(this).attr('id') + ']').addClass('active btn-success'); + } + }); + // add color classes to chosen field based on value + $('select[class^="chzn-color"], select[class*=" chzn-color"]').on('liszt:ready', function(){ + var select = $(this); + var cls = this.className.replace(/^.(chzn-color[a-z0-9-_]*)$.*/, '\1'); + var container = select.next('.chzn-container').find('.chzn-single'); + container.addClass(cls).attr('rel', 'value_' + select.val()); + select.on('change click', function() + { + container.attr('rel', 'value_' + select.val()); + }); + + }); + + /** + * USED IN: All views with toolbar and sticky bar enabled + */ + var navTop; + var isFixed = false; + + if (window.isisStickyToolbar == 1) { + processScrollInit(); + processScroll(); + + $(window).on('resize', processScrollInit); + $(window).on('scroll', processScroll); + } + + function processScrollInit() { + if ($('.subhead').length) { + navTop = $('.subhead').length && $('.subhead').offset().top - window.isisOffsetTop; + + // Fix the container top + $(".container-main").css("top", $('.subhead').height() + $('nav.navbar').height()); + + // Only apply the scrollspy when the toolbar is not collapsed + if (document.body.clientWidth > 480) { + $('.subhead-collapse').height($('.subhead').height()); + $('.subhead').scrollspy({offset: {top: $('.subhead').offset().top - $('nav.navbar').height()}}); + } + } + } + + function processScroll() { + if ($('.subhead').length) { + var scrollTop = $(window).scrollTop(); + if (scrollTop >= navTop && !isFixed) { + isFixed = true; + $('.subhead').addClass('subhead-fixed'); + + // Fix the container top + $(".container-main").css("top", $('.subhead').height() + $('nav.navbar').height()); + } else if (scrollTop <= navTop && isFixed) { + isFixed = false; + $('.subhead').removeClass('subhead-fixed'); + } + } + } + + /** + * USED IN: All list views to hide/show the sidebar + */ + window.toggleSidebar = function(force) + { + var context = 'jsidebar'; + + var $sidebar = $('#j-sidebar-container'), + $main = $('#j-main-container'), + $message = $('#system-message-container'), + $debug = $('#system-debug'), + $toggleSidebarIcon = $('#j-toggle-sidebar-icon'), + $toggleButtonWrapper = $('#j-toggle-button-wrapper'), + $toggleButton = $('#j-toggle-sidebar-button'), + $sidebarToggle = $('#j-toggle-sidebar'); + + var openIcon = 'icon-arrow-left-2', + closedIcon = 'icon-arrow-right-2'; + + var $visible = $sidebarToggle.is(":visible"); + + if (jQuery(document.querySelector("html")).attr('dir') == 'rtl') + { + openIcon = 'icon-arrow-right-2'; + closedIcon = 'icon-arrow-left-2'; + } + + var isComponent = $('body').hasClass('component'); + + $sidebar.removeClass('span2').addClass('j-sidebar-container'); + $message.addClass('j-toggle-main'); + $main.addClass('j-toggle-main'); + if (!isComponent) { + $debug.addClass('j-toggle-main'); + } + + var mainHeight = $main.outerHeight()+30, + sidebarHeight = $sidebar.outerHeight(), + bodyWidth = $('body').outerWidth(), + sidebarWidth = $sidebar.outerWidth(), + contentWidth = $('#content').outerWidth(), + contentWidthRelative = contentWidth / bodyWidth * 100, + mainWidthRelative = (contentWidth - sidebarWidth) / bodyWidth * 100; + + if (force) + { + // Load the value from localStorage + if (typeof(Storage) !== "undefined") + { + $visible = localStorage.getItem(context); + } + + // Need to convert the value to a boolean + $visible = ($visible == 'true'); + } + else + { + $message.addClass('j-toggle-transition'); + $sidebar.addClass('j-toggle-transition'); + $toggleButtonWrapper.addClass('j-toggle-transition'); + $main.addClass('j-toggle-transition'); + if (!isComponent) { + $debug.addClass('j-toggle-transition'); + } + } + + if ($visible) + { + $sidebarToggle.hide(); + $sidebar.removeClass('j-sidebar-visible').addClass('j-sidebar-hidden'); + $toggleButtonWrapper.removeClass('j-toggle-visible').addClass('j-toggle-hidden'); + $toggleSidebarIcon.removeClass('j-toggle-visible').addClass('j-toggle-hidden'); + $message.removeClass('span10').addClass('span12'); + $main.removeClass('span10').addClass('span12 expanded'); + $toggleSidebarIcon.removeClass(openIcon).addClass(closedIcon); + $toggleButton.attr( 'data-original-title', Joomla.JText._('JTOGGLE_SHOW_SIDEBAR') ); + $sidebar.attr('aria-hidden', true); + $sidebar.find('a').attr('tabindex', '-1'); + $sidebar.find(':input').attr('tabindex', '-1'); + + if (!isComponent) { + $debug.css( 'width', contentWidthRelative + '%' ); + } + + if (typeof(Storage) !== "undefined") + { + // Set the last selection in localStorage + localStorage.setItem(context, true); + } + } + else + { + $sidebarToggle.show(); + $sidebar.removeClass('j-sidebar-hidden').addClass('j-sidebar-visible'); + $toggleButtonWrapper.removeClass('j-toggle-hidden').addClass('j-toggle-visible'); + $toggleSidebarIcon.removeClass('j-toggle-hidden').addClass('j-toggle-visible'); + $message.removeClass('span12').addClass('span10'); + $main.removeClass('span12 expanded').addClass('span10'); + $toggleSidebarIcon.removeClass(closedIcon).addClass(openIcon); + $toggleButton.attr( 'data-original-title', Joomla.JText._('JTOGGLE_HIDE_SIDEBAR') ); + $sidebar.removeAttr('aria-hidden'); + $sidebar.find('a').removeAttr('tabindex'); + $sidebar.find(':input').removeAttr('tabindex'); + + if (!isComponent && bodyWidth > 768 && mainHeight < sidebarHeight) + { + $debug.css( 'width', mainWidthRelative + '%' ); + } + else if (!isComponent) + { + $debug.css( 'width', contentWidthRelative + '%' ); + } + + if (typeof(Storage) !== "undefined") + { + // Set the last selection in localStorage + localStorage.setItem( context, false ); + } + } + } + }); +})(jQuery);