Skip to content

Commit

Permalink
Merge branch 'feature/show-icinga-web-2-s-version-in-the-frontend-9247'
Browse files Browse the repository at this point in the history
resolves #9247
resolves #9381
  • Loading branch information
Johannes Meyer committed Sep 30, 2015
2 parents bd206e3 + 2ca161c commit 7cbafe7
Show file tree
Hide file tree
Showing 14 changed files with 183 additions and 46 deletions.
2 changes: 1 addition & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ Vagrantfile export-ignore
.puppet* eol=lf

# Include version information on `git archive'
/application/VERSION export-subst
/application/GITCOMMIT export-subst
1 change: 1 addition & 0 deletions application/GITCOMMIT
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
$Format:%H %ci$
1 change: 0 additions & 1 deletion application/VERSION

This file was deleted.

14 changes: 12 additions & 2 deletions application/controllers/AboutController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,23 @@

namespace Icinga\Controllers;

use Icinga\Application\Icinga;
use Icinga\Application\Version;
use Icinga\Web\Controller\ActionController;
use Icinga\Web\Controller;

class AboutController extends ActionController
class AboutController extends Controller
{
public function indexAction()
{
$this->view->version = Version::get();
$this->view->modules = Icinga::app()->getModuleManager()->getLoadedModules();
$this->view->tabs = $this->getTabs()->add(
'about',
array(
'label' => $this->translate('About'),
'title' => $this->translate('About Icinga Web 2'),
'url' => 'about'
)
)->activate('about');
}
}
149 changes: 126 additions & 23 deletions application/views/scripts/about/index.phtml
Original file line number Diff line number Diff line change
@@ -1,25 +1,128 @@
<div class="content">
<h1>Icinga Web 2</h1>
<?php
$versionInfo = array();
if ($version !== false) {
foreach (array(
'appVersion' => $this->translate('Version: %s'),
'gitCommitID' => $this->translate('Git commit ID: %s'),
'gitCommitDate' => $this->translate('Git commit date: %s')
) as $key => $label) {
if (array_key_exists($key, $version) && null !== ($value = $version[$key])) {
$versionInfo[] = sprintf($label, htmlspecialchars($value));
}
}
}

echo (
0 === count($versionInfo)
? '<p class="message-error">' . $this->translate(
'Can\'t determine Icinga Web 2\'s version'
<div class="controls">
<?= $tabs; ?>
</div>
<div class="content about">
<?= $this->img(
'img/logo_icinga_big_dark.png',
null,
array(
'width' => 400,
'class' => 'about-logo'
)
); ?>
<p class="about-version">
<?php if (isset($version['appVersion'])): ?>
<strong><?= $this->translate('Version'); ?>:</strong> <?= $this->escape($version['appVersion']); ?>
<?php endif ?>
<?php if (isset($version['gitCommitID'])): ?>
<br>
<strong><?= $this->translate('Git commit ID'); ?>:</strong> <?= $this->escape($version['gitCommitID']); ?>
<?php endif ?>
<?php if (isset($version['gitCommitDate'])): ?>
<br>
<strong><?= $this->translate('Git commit date'); ?>:</strong> <?= $this->escape($version['gitCommitDate']); ?>
<?php endif ?>
</p>
<p class="about-license">
<strong><?= $this->translate('Copyright'); ?></strong>: &copy; 2013-<?= date('Y'); ?> <?= $this->qlink(
$this->translate('The Icinga Project'),
'https://www.icinga.org',
null,
array(
'target' => '_blank'
)
); ?>
<br>
<strong><?= $this->translate('License'); ?></strong>: GNU GPL v2+
</p>
<p class="about-social">
<?= $this->qlink(
null,
'https://www.twitter.com/icinga',
null,
array(
'target' => '_blank',
'icon' => 'twitter',
'title' => $this->translate('Icinga on Twitter')
)
); ?> <?= $this->qlink(
null,
'https://www.facebook.com/icinga',
null,
array(
'target' => '_blank',
'icon' => 'facebook-squared',
'title' => $this->translate('Icinga on Facebook')
)
); ?>
</p>
<div class="about-urls">
<div><?= $this->qlink(
null,
'https://dev.icinga.org/projects/icingaweb2',
null,
array(
'target' => '_blank',
'img' => 'img/bugreport.png',
'title' => $this->translate('Report a bug')
)
); ?> <?= $this->qlink(
null,
'https://www.icinga.org/services/support',
null,
array(
'target' => '_blank',
'img' => 'img/support.png',
'title' => $this->translate('Support / Mailinglists')
)
); ?></div>
<div><?= $this->qlink(
null,
'https://wiki.icinga.org',
null,
array(
'target' => '_blank',
'img' => 'img/wiki.png',
'title' => $this->translate('Icinga Wiki')
)
); ?> <?= $this->qlink(
null,
'https://docs.icinga.org/',
null,
array(
'target' => '_blank',
'img' => 'img/docs.png',
'title' => $this->translate('Icinga Documentation')
)
: '<p>' . nl2br(implode("\n", $versionInfo), false)
) . '</p>';
?>
); ?></div>
</div>
<h2><?= $this->translate('Loaded modules') ?></h2>
<table class="action alternating about-modules" data-base-target="_next">
<thead>
<tr>
<th><?= $this->translate('Name') ?></th>
<th><?= $this->translate('Version') ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($modules as $module): ?>
<tr>
<td>
<?php if ($this->hasPermission('config/modules')): ?>
<?= $this->qlink(
$module->getName(),
'config/module/',
array('name' => $module->getName()),
array('title' => sprintf($this->translate('Show the overview of the %s module'), $module->getName()))
); ?>
<?php else: ?>
<?= $this->escape($module->getName()); ?>
<?php endif ?>
<td>
<?= $this->escape($module->getVersion()); ?>
</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
</div>
2 changes: 1 addition & 1 deletion icingaweb2.spec
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ rm -rf %{buildroot}
%{basedir}/application/forms
%{basedir}/application/layouts
%{basedir}/application/views
%{basedir}/application/VERSION
%{basedir}/application/GITCOMMIT
%{basedir}/doc
%{basedir}/modules
%{basedir}/public
Expand Down
43 changes: 26 additions & 17 deletions library/Icinga/Application/Version.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,33 +8,42 @@
*/
class Version
{
const VERSION = '2.0.0-rc1';

/**
* Get the version of this instance of Icinga Web 2
*
* @return array|false array on success, false otherwise
* @return array
*/
public static function get()
{
if (false === ($appVersion = @file_get_contents(
Icinga::app()->getApplicationDir() . DIRECTORY_SEPARATOR . 'VERSION'
))) {
return false;
}
$version = array('appVersion' => self::VERSION);

$matches = array();
if (false === ($res = preg_match(
'/(?<!.)\s*(?P<gitCommitID>\w+)(?:\s*\(.*?(?:(?<=[\(,])\s*tag\s*:\s*v(?P<appVersion>.+?)\s*(?=[\),]).*?)?\))?\s*(?P<gitCommitDate>\S+)/ms',
$appVersion,
$matches
)) || $res === 0) {
return false;
if (false !== ($appVersion = @file_get_contents(Icinga::app()->getApplicationDir('GITCOMMIT')))) {
$matches = array();
if (@preg_match('/^(?P<gitCommitID>\w+) (?P<gitCommitDate>\S+)/', $appVersion, $matches)) {
return array_merge($version, $matches);
}
}

foreach ($matches as $key => $value) {
if (is_int($key) || $value === '') {
unset($matches[$key]);
$gitDir = Icinga::app()->getBaseDir('.git');
$gitHead = @file_get_contents($gitDir . DIRECTORY_SEPARATOR . 'HEAD');
if (false !== $gitHead) {
$matches = array();
if (@preg_match('/(?<!.)ref:\s+(.+?)$/ms', $gitHead, $matches)) {
$gitCommitID = @file_get_contents($gitDir . DIRECTORY_SEPARATOR . $matches[1]);
} else {
$gitCommitID = $gitHead;
}

if (false !== $gitCommitID) {
$matches = array();
if (@preg_match('/(?<!.)(?P<gitCommitID>[0-9a-f]+)$/ms', $gitCommitID, $matches)) {
return array_merge($version, $matches);
}
}
}
return $matches;

return $version;
}
}
3 changes: 2 additions & 1 deletion library/Icinga/Web/StyleSheet.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ class StyleSheet
'css/icinga/selection-toolbar.less',
'css/icinga/login.less',
'css/icinga/logo.less',
'css/icinga/controls.less'
'css/icinga/controls.less',
'css/icinga/about.less'
);

public static function compileForPdf()
Expand Down
5 changes: 5 additions & 0 deletions library/Icinga/Web/View/helpers/url.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@
$icon = $view->icon($properties['icon']);
unset($properties['icon']);
}

if (array_key_exists('img', $properties)) {
$icon = $view->img($properties['img']);
unset($properties['img']);
}
}

return sprintf(
Expand Down
9 changes: 9 additions & 0 deletions public/css/icinga/about.less
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
div.about {
width: 600px;
margin: 0 auto;
text-align: center;

.about-modules {
text-align: initial;
}
}
Binary file added public/img/bugreport.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/img/docs.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/img/support.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/img/wiki.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 7cbafe7

Please sign in to comment.