diff --git a/advanced-github-plugin-installer.php b/advanced-github-plugin-installer.php index ba9fb8d..13e42c8 100644 --- a/advanced-github-plugin-installer.php +++ b/advanced-github-plugin-installer.php @@ -73,200 +73,248 @@ function github_plugin_installer_page() { $is_private = isset($_POST['is_private']) ? true : false; $access_token = $is_private ? sanitize_text_field($_POST['access_token']) : ''; $selected_version = sanitize_text_field($_POST['version']); + $save_as_project = isset($_POST['save_as_project']) ? true : false; + $project_name = sanitize_text_field($_POST['project_name']); + // Install/Update the plugin install_update_github_plugin($repo_url, $access_token, $selected_version); + + // Save as project if checkbox was checked + if ($save_as_project && !empty($project_name)) { + $project_data = array( + 'name' => $project_name, + 'repo_url' => $repo_url, + 'is_private' => $is_private, + 'access_token' => $access_token, + 'version' => $selected_version + ); + save_project($project_data); + echo '
Projekt erfolgreich gespeichert!
Repository:
-Version:
-Status:
-Zuletzt synchronisiert:
-Diese Projekte können mit einem Klick aktualisiert werden
+ +| Projektname | +Repository | +Version | +Typ | +Letzte Aktualisierung | +Aktionen | +
|---|---|---|---|---|---|
| + | |
+ + | + + + | ++ | + + + | +
Keine gespeicherten Projekte vorhanden. Fügen Sie oben ein neues Projekt hinzu.
+💡 Tipp: Aktivieren Sie "Als Projekt speichern" beim Installieren eines Plugins, um es hier zur einfachen Verwaltung zu speichern.
' + response.data + '
'); - jQuery('#repo_preview').show(); - } - }, - error: function() { - jQuery('#repo_content').html('An error occurred while fetching the repository content.
'); - jQuery('#repo_preview').show(); - } - }); - } else { - jQuery('#repo_preview').hide(); - } - } - - function getVersions() { - var repoUrl = jQuery('#repo_url').val(); - var isPrivate = jQuery('#is_private').is(':checked'); - var accessToken = jQuery('#access_token').val(); - - if (repoUrl) { - jQuery.ajax({ - url: github_installer.ajax_url, - type: 'POST', - data: { - action: 'get_github_versions', - nonce: github_installer.nonce, - repo_url: repoUrl, - is_private: isPrivate, - access_token: accessToken - }, - success: function(response) { - if (response.success) { - var versions = response.data; - var versionSelect = jQuery('#version'); - versionSelect.empty(); - versionSelect.append(jQuery('').attr('value', '').text('-- Wählen Sie eine Version --')); - jQuery.each(versions, function(index, version) { - versionSelect.append(jQuery('').attr('value', version).text(version)); - }); - jQuery('#version_row').show(); - } else { - jQuery('#version_row').hide(); - jQuery('#save_project_btn').hide(); - console.error('Failed to fetch versions:', response.data); - } - }, - error: function() { - jQuery('#version_row').hide(); - jQuery('#save_project_btn').hide(); - console.error('An error occurred while fetching the repository versions.'); - } - }); - } else { - jQuery('#version_row').hide(); - jQuery('#save_project_btn').hide(); - } - } - - // Save project button handler - jQuery('#save_project_btn').on('click', function(e) { - e.preventDefault(); - - var projectName = jQuery('#project_name').val(); - var repoUrl = jQuery('#repo_url').val(); - var isPrivate = jQuery('#is_private').is(':checked'); - var accessToken = jQuery('#access_token').val(); - var version = jQuery('#version').val(); - - if (!projectName) { - alert('Bitte geben Sie einen Projektnamen ein.'); + if (!repoUrl || repoUrl.length < 10) { return; } - if (!repoUrl || !version) { - alert('Bitte füllen Sie alle erforderlichen Felder aus.'); - return; - } + // Show loading + $('#version_section').slideDown(); + $('#version-loading').show(); - jQuery.ajax({ + $.ajax({ url: github_installer.ajax_url, type: 'POST', data: { - action: 'save_github_project', + action: 'get_github_versions', nonce: github_installer.nonce, - name: projectName, repo_url: repoUrl, is_private: isPrivate, - access_token: accessToken, - version: version + access_token: accessToken }, success: function(response) { - if (response.success) { - alert(response.data.message); - location.reload(); + $('#version-loading').hide(); + + if (response.success && response.data.length > 0) { + var versions = response.data; + var versionSelect = $('#version'); + versionSelect.empty(); + versionSelect.append($('').attr('value', '').text('-- Wählen Sie eine Version --')); + $.each(versions, function(index, version) { + versionSelect.append($('').attr('value', version).text(version)); + }); + $('#version_section').slideDown(); } else { - alert('Fehler: ' + response.data); + $('#version').html(''); + console.error('Keine Versionen gefunden:', response.data); } }, - error: function() { - alert('Ein Fehler ist beim Speichern des Projekts aufgetreten.'); + error: function(xhr, status, error) { + $('#version-loading').hide(); + $('#version').html(''); + console.error('Fehler beim Laden der Versionen:', error); } }); + } + + // Form validation before submit + $('#github-project-form').on('submit', function(e) { + var saveAsProject = $('#save_as_project').is(':checked'); + var projectName = $('#project_name').val(); + var repoUrl = $('#repo_url').val(); + var version = $('#version').val(); + + // Check if save as project is checked but no project name + if (saveAsProject && !projectName) { + e.preventDefault(); + alert('Bitte geben Sie einen Projektnamen ein oder deaktivieren Sie "Als Projekt speichern".'); + $('#project_name').focus(); + return false; + } + + // Check if repo URL is provided + if (!repoUrl) { + e.preventDefault(); + alert('Bitte geben Sie eine GitHub Repository URL ein.'); + $('#repo_url').focus(); + return false; + } + + // Warning if no version selected + if (!version) { + return confirm('Sie haben keine Version ausgewählt. Es wird die neueste Version vom Hauptbranch verwendet. Fortfahren?'); + } + + return true; }); // Sync project button handler - jQuery(document).on('click', '.github-sync-btn', function() { - var projectId = jQuery(this).data('project-id'); - var button = jQuery(this); - var statusDiv = jQuery('.github-sync-status[data-project-id="' + projectId + '"]'); + $(document).on('click', '.github-sync-btn', function() { + var projectId = $(this).data('project-id'); + var button = $(this); + var statusRow = $('.github-sync-status-row[data-project-id="' + projectId + '"]'); + var statusDiv = $('.github-sync-status[data-project-id="' + projectId + '"]'); - button.prop('disabled', true); + button.prop('disabled', true).html(' Lädt...'); + statusRow.show(); statusDiv.removeClass('success error').addClass('loading').text('Synchronisierung läuft...').show(); - jQuery.ajax({ + $.ajax({ url: github_installer.ajax_url, type: 'POST', data: { @@ -174,32 +140,35 @@ jQuery(document).ready(function() { project_id: projectId }, success: function(response) { - button.prop('disabled', false); + button.prop('disabled', false).html(' Update'); if (response.success) { - statusDiv.removeClass('loading error').addClass('success').text(response.data); + statusDiv.removeClass('loading error').addClass('success').html('✓ ' + response.data); setTimeout(function() { location.reload(); }, 1500); } else { - statusDiv.removeClass('loading success').addClass('error').text('Fehler: ' + response.data); + statusDiv.removeClass('loading success').addClass('error').html('✗ Fehler: ' + response.data); } }, error: function() { - button.prop('disabled', false); - statusDiv.removeClass('loading success').addClass('error').text('Ein Fehler ist aufgetreten.'); + button.prop('disabled', false).html(' Update'); + statusDiv.removeClass('loading success').addClass('error').html('✗ Ein Fehler ist aufgetreten.'); } }); }); // Delete project button handler - jQuery(document).on('click', '.github-delete-btn', function() { - var projectId = jQuery(this).data('project-id'); + $(document).on('click', '.github-delete-btn', function() { + var projectId = $(this).data('project-id'); - if (!confirm('Möchten Sie dieses Projekt wirklich löschen?')) { + if (!confirm('Möchten Sie dieses Projekt wirklich löschen?\n\nDas Plugin selbst wird nicht deinstalliert, nur die Projektverwaltung wird entfernt.')) { return; } - jQuery.ajax({ + var button = $(this); + button.prop('disabled', true); + + $.ajax({ url: github_installer.ajax_url, type: 'POST', data: { @@ -209,14 +178,18 @@ jQuery(document).ready(function() { }, success: function(response) { if (response.success) { - alert(response.data); - location.reload(); + // Fade out the row and reload + $('tr[data-project-id="' + projectId + '"]').fadeOut(300, function() { + location.reload(); + }); } else { - alert('Fehler: ' + response.data); + alert('Fehler beim Löschen: ' + response.data); + button.prop('disabled', false); } }, error: function() { alert('Ein Fehler ist beim Löschen des Projekts aufgetreten.'); + button.prop('disabled', false); } }); });