summaryrefslogtreecommitdiffstats
path: root/src/usr/local/www/pkg_mgr_installed.php
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2016-03-16 17:33:38 -0300
committerRenato Botelho <renato@netgate.com>2016-03-16 17:33:52 -0300
commit39295ac59cae9345a2e3ef5051b29299be8841bb (patch)
treefb2eecba95dd069ebcd8992d6e4a6f44e8aae032 /src/usr/local/www/pkg_mgr_installed.php
parent77f46ff120a48e20ea152f32c8225ad4ad900731 (diff)
downloadpfsense-39295ac59cae9345a2e3ef5051b29299be8841bb.zip
pfsense-39295ac59cae9345a2e3ef5051b29299be8841bb.tar.gz
Make pkg_mgr_installed.php use an ajax call to avoid GUI timeout when rpeo is unreachable
Diffstat (limited to 'src/usr/local/www/pkg_mgr_installed.php')
-rw-r--r--src/usr/local/www/pkg_mgr_installed.php285
1 files changed, 185 insertions, 100 deletions
diff --git a/src/usr/local/www/pkg_mgr_installed.php b/src/usr/local/www/pkg_mgr_installed.php
index dfc612f..f341d0f 100644
--- a/src/usr/local/www/pkg_mgr_installed.php
+++ b/src/usr/local/www/pkg_mgr_installed.php
@@ -72,43 +72,52 @@ if (is_subsystem_dirty('packagelock')) {
exit;
}
-$pgtitle = array(gettext("System"), gettext("Package Manager"), gettext("Installed Packages"));
-include("head.inc");
+// We are being called only to get the pacakge data, not to display anything
+if (($_REQUEST) && ($_REQUEST['ajax'])) {
+ print(get_pkg_table());
+ exit;
+}
-$tab_array = array();
-$tab_array[] = array(gettext("Installed Packages"), true, "pkg_mgr_installed.php");
-$tab_array[] = array(gettext("Available Packages"), false, "pkg_mgr.php");
-display_top_tabs($tab_array);
+function get_pkg_table() {
+ $installed_packages = array();
+ $package_list = get_pkg_info();
-$installed_packages = array();
-$package_list = get_pkg_info();
-foreach ($package_list as $pkg) {
- if (!isset($pkg['installed']) && !isset($pkg['broken'])) {
- continue;
+ if (!$package_list) {
+ print("error");
+ exit;
}
- $installed_packages[] = $pkg;
-}
-if (empty($installed_packages)):
- print_info_box(gettext("There are no packages currently installed."), 'warning', false);
-else:?>
- <div class="panel panel-default">
- <div class="panel-heading"><h2 class="panel-title"><?=gettext('Installed Packages')?></h2></div>
- <div class="table-responsive">
- <table class="table table-striped table-hover table-condensed">
- <thead>
- <tr>
- <th><!-- Status icon --></th>
- <th><?=gettext("Name")?></th>
- <th><?=gettext("Category")?></th>
- <th><?=gettext("Version")?></th>
- <th><?=gettext("Description")?></th>
- <th><?=gettext("Actions")?></th>
- </tr>
- </thead>
- <tbody>
-<?php
- foreach ($installed_packages as $pkg):
+ foreach ($package_list as $pkg) {
+ if (!isset($pkg['installed']) && !isset($pkg['broken'])) {
+ continue;
+ }
+ $installed_packages[] = $pkg;
+ }
+
+ $pkgtbl = "";
+
+ if (empty($installed_packages)) {
+ print ("nopkg");
+ exit;
+ }
+
+ $pkgtbl .=' <div class="panel panel-default">';
+ $pkgtbl .=' <div class="panel-heading"><h2 class="panel-title">' . gettext('Installed Packages') . '</h2></div>';
+ $pkgtbl .=' <div class="table-responsive">';
+ $pkgtbl .=' <table class="table table-striped table-hover table-condensed">';
+ $pkgtbl .=' <thead>';
+ $pkgtbl .=' <tr>';
+ $pkgtbl .=' <th><!-- Status icon --></th>';
+ $pkgtbl .=' <th>' . gettext("Name") . '</th>';
+ $pkgtbl .=' <th>' . gettext("Category") . '</th>';
+ $pkgtbl .=' <th>' . gettext("Version") . '</th>';
+ $pkgtbl .=' <th>' . gettext("Description") . '</th>';
+ $pkgtbl .=' <th>' . gettext("Actions") . '</th>';
+ $pkgtbl .=' </tr>';
+ $pkgtbl .=' </thead>';
+ $pkgtbl .=' <tbody>';
+
+ foreach ($installed_packages as $pkg) {
if (!$pkg['name']) {
continue;
}
@@ -147,74 +156,150 @@ else:?>
$status = gettext('Unknown');
$statusicon = 'question';
}
+
+ $pkgtbl .=' <tr>';
+ $pkgtbl .=' <td>';
+
+ if ($upgradeavail) {
+ $pkgtbl .=' <a title="' . $status . '" href="pkg_mgr_install.php?mode=reinstallpkg&amp;pkg=' . $pkg['name'] . $vergetstr . '" class="fa fa-refresh"></a>';
+ } elseif ($missing) {
+ $pkgtbl .=' <span class="text-danger"><i title="' . $status . '" class="fa fa-exclamation"></i></span>';
+ } else {
+ $pkgtbl .=' <i title="' . $status . '" class="fa fa-check"></i>';
+ }
+ $pkgtbl .=' </td>';
+ $pkgtbl .=' <td>';
+ $pkgtbl .=' <span class="' . $txtcolor . '">' . $pkg['shortname'] . '</span>';
+ $pkgtbl .=' </td>';
+ $pkgtbl .=' <td>';
+ $pkgtbl .=' ' . implode(" ", $pkg['categories']);
+ $pkgtbl .=' </td>';
+ $pkgtbl .=' <td>';
+
+ if (!$g['disablepackagehistory']) {
+ $pkgtbl .=' <a target="_blank" title="' . gettext("View changelog") . '" href="' . htmlspecialchars($pkg['changeloglink']) . '">' .
+ htmlspecialchars($pkg['installed_version']) . '</a>';
+ } else {
+ $pkgtbl .=' ' . htmlspecialchars($pkg['installed_version']);
+ }
+
+ $pkgtbl .=' </td>';
+ $pkgtbl .=' <td>';
+ $pkgtbl .=' ' . $pkg['desc'];
+
+ if (is_array($pkg['deps']) && count($pkg['deps'])) {
+ $pkgtbl .=' <br /><br />' . gettext("Package Dependencies") . ':<br/>';
+ foreach ($pkg['deps'] as $pdep) {
+ $pkgtbl .=' <a target="_blank" href="https://freshports.org/' . $pdep['origin'] . '">&nbsp;' .
+ '<i class="fa fa-paperclip"></i> ' . basename($pdep['origin']) . '-' . $pdep['version'] . '</a>&emsp;';
+ }
+ }
+ $pkgtbl .=' </td>';
+ $pkgtbl .=' <td>';
+ $pkgtbl .=' <div class="row">';
+ $pkgtbl .=' <a title="' . sprintf(gettext("Remove package %s"), $pkg['name']) .
+ '" href="pkg_mgr_install.php?mode=delete&amp;pkg=' . $pkg['name'] . '" class="fa fa-trash"></a>';
+
+ if ($upgradeavail) {
+ $pkgtbl .=' <a title="' . sprintf(gettext("Update package %s"), $pkg['name']) .
+ '" href="pkg_mgr_install.php?mode=reinstallpkg&amp;pkg=' . $pkg['name'] . $vergetstr . '" class="fa fa-refresh"></a>';
+ } else {
+ $pkgtbl .=' <a title="' . sprintf(gettext("Reinstall package %s"), $pkg['name']) .
+ '" href="pkg_mgr_install.php?mode=reinstallpkg&amp;pkg=' . $pkg['name'] . '" class="fa fa-retweet"></a>';
+ }
+
+ if (!isset($g['disablepackageinfo']) && $pkg['www'] != 'UNKNOWN') {
+ $pkgtbl .=' <a target="_blank" title="' . gettext("View more information") . '" href="' .
+ htmlspecialchars($pkg['www']) . '" class="fa fa-info"></a>';
+ }
+ $pkgtbl .=' </div>';
+ $pkgtbl .=' </td>';
+ $pkgtbl .=' </tr>';
+ }
+
+ $pkgtbl .=' </tbody>';
+ $pkgtbl .=' </table>';
+ $pkgtbl .=' </div>';
+ $pkgtbl .=' </div>';
+ $pkgtbl .=' <br />';
+ $pkgtbl .=' <div class="text-center">';
+ $pkgtbl .=' <p>';
+ $pkgtbl .=' <i class="fa fa-refresh"></i> = ' . gettext('Update') . ' &nbsp;';
+ $pkgtbl .=' <i class="fa fa-check"></i> = ' . gettext('Current') . ' &nbsp;';
+ $pkgtbl .=' </p>';
+ $pkgtbl .=' <p>';
+ $pkgtbl .=' <i class="fa fa-trash"></i> = ' . gettext('Remove') . ' &nbsp;';
+ $pkgtbl .=' <i class="fa fa-info"></i> = ' . gettext('Information') . ' &nbsp;';
+ $pkgtbl .=' <i class="fa fa-retweet"></i> = ' . gettext('Reinstall');
+ $pkgtbl .=' </p>';
+ $pkgtbl .=' <p><span class="text-warning">' . gettext("Newer version available") . '</span></p>';
+ $pkgtbl .=' <p><span class="text-danger">' . gettext("Package is configured but not (fully) installed") . '</span></p>';
+ $pkgtbl .=' </div>';
+
+ return $pkgtbl;
+}
+
+$pgtitle = array(gettext("System"), gettext("Package Manager"), gettext("Installed Packages"));
+include("head.inc");
+
+$tab_array = array();
+$tab_array[] = array(gettext("Installed Packages"), true, "pkg_mgr_installed.php");
+$tab_array[] = array(gettext("Available Packages"), false, "pkg_mgr.php");
+display_top_tabs($tab_array);
+
?>
- <tr>
- <td>
-<?php if ($upgradeavail):?>
- <a title="<?=$status?>" href="pkg_mgr_install.php?mode=reinstallpkg&amp;pkg=<?=$pkg['name']?><?=$vergetstr?>" class="fa fa-refresh"></a>
-<?php elseif ($missing):?>
- <span class="text-danger"><i title="<?=$status?>" class="fa fa-exclamation"></i></span>
-<?php else:?>
- <i title="<?=$status?>" class="fa fa-check"></i>
-<?php endif;?>
- </td>
- <td>
- <span class="<?=$txtcolor?>"><?=$pkg['shortname']?></span>
- </td>
- <td>
- <?=implode(" ", $pkg['categories'])?>
- </td>
- <td>
-<?php if (!$g['disablepackagehistory']):?>
- <a target="_blank" title="<?=gettext("View changelog")?>" href="<?=htmlspecialchars($pkg['changeloglink'])?>">
- <?=htmlspecialchars($pkg['installed_version'])?></a>
-<?php else:?>
- <?=htmlspecialchars($pkg['installed_version'])?>
-<?php endif;?>
- </td>
- <td>
- <?=$pkg['desc']?>
-<?php if (is_array($pkg['deps']) && count($pkg['deps'])):?>
- <br /><br /><?= gettext("Package Dependencies")?>:<br/>
- <?php foreach ($pkg['deps'] as $pdep):?>
- <a target="_blank" href="https://freshports.org/<?=$pdep['origin']?>">&nbsp;<i class="fa fa-paperclip"></i> <?= basename($pdep['origin']) . '-' . $pdep['version']?></a>&emsp;
- <?php endforeach;?>
-<?php endif;?>
- </td>
- <td>
- <div class="row">
- <a title="<?=sprintf(gettext("Remove package %s"), $pkg['name'])?>" href="pkg_mgr_install.php?mode=delete&amp;pkg=<?=$pkg['name']?>" class="fa fa-trash"></a>
-<?php if ($upgradeavail):?>
- <a title="<?=sprintf(gettext("Update package %s"), $pkg['name'])?>" href="pkg_mgr_install.php?mode=reinstallpkg&amp;pkg=<?=$pkg['name']?><?=$vergetstr?>" class="fa fa-refresh"></a>
-<?php else:?>
- <a title="<?=sprintf(gettext("Reinstall package %s"), $pkg['name'])?>" href="pkg_mgr_install.php?mode=reinstallpkg&amp;pkg=<?=$pkg['name']?>" class="fa fa-retweet"></a>
-<?php endif;?>
-
-<?php if (!isset($g['disablepackageinfo']) && $pkg['www'] != 'UNKNOWN'):?>
- <a target="_blank" title="<?=gettext("View more information")?>" href="<?=htmlspecialchars($pkg['www'])?>" class="fa fa-info"></a>
-<?php endif;?>
- </div>
- </td>
- </tr>
-<?php endforeach;?>
- </tbody>
-</table>
-</div>
-</div>
-<br />
-<div class="text-center">
- <p>
- <i class="fa fa-refresh"></i> = <?=gettext('Update')?> &nbsp;
- <i class="fa fa-check"></i> = <?=gettext('Current')?> &nbsp;
- </p>
- <p>
- <i class="fa fa-trash"></i> = <?=gettext('Remove')?> &nbsp;
- <i class="fa fa-info"></i> = <?=gettext('Information')?> &nbsp;
- <i class="fa fa-retweet"></i> = <?=gettext('Reinstall')?>
- </p>
- <p><span class="text-warning"><?=gettext("Newer version available")?></span></p>
- <p><span class="text-danger"><?=gettext("Package is configured but not (fully) installed")?></span></p>
+
+<div class="panel panel-default">
+ <div class="panel-heading"><h2 class="panel-title"><?=gettext('Packages')?></h2></div>
+ <div id="pkgtbl" class="panel-body table-responsive">
+ <div id="waitmsg">
+ <?php print_info_box(gettext("Please wait while the list of packages is retrieved and formatted.") . '&nbsp;<i class="fa fa-cog fa-spin"></i>'); ?>
+ </div>
+
+ <div id="errmsg" style="display: none;">
+ <?php print_info_box("<ul><li>" . gettext("Unable to retrieve package information.") . "</li></ul>", 'danger'); ?>
+ </div>
+
+ <div id="nopkg" style="display: none;">
+ <?php print_info_box(gettext("There are no packages currently installed."), 'warning', false); ?>
+ </div>
+ </div>
</div>
+<script type="text/javascript">
+//<![CDATA[
+
+events.push(function() {
+
+ // Retrieve the table formatted pacakge information and display it in the "Packages" panel
+ // (Or display an appropriate error message)
+ var ajaxRequest;
+
+ $.ajax({
+ url: "/pkg_mgr_installed.php",
+ type: "post",
+ data: { ajax: "ajax"},
+ success: function(data) {
+ if (data == "error") {
+ $('#waitmsg').hide();
+ $('#nopkg').hide();
+ $('#errmsg').show();
+ } else if (data == "nopkg") {
+ $('#waitmsg').hide();
+ $('#nopkg').show();
+ $('#errmsg').hide();
+ } else {
+ $('#pkgtbl').html(data);
+ }
+ },
+ error: function() {
+ $('#waitmsg').hide();
+ $('#nopkg').hide();
+ $('#errmsg').show();
+ }
+ });
+
+});
+//]]>
+</script>
-<?php endif; ?>
<?php include("foot.inc")?>
OpenPOWER on IntegriCloud