summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Prodromou <evan@status.net>2010-01-07 17:26:40 -0800
committerEvan Prodromou <evan@status.net>2010-01-07 17:26:40 -0800
commit4a4ac7a1082405621ce8e578099ddb7be329bb38 (patch)
tree21f300dd77ba17426cb5c4cfa95b43935f596e73
parent2c33e61b94fca8654c0d543fb0baa164ee86d2c3 (diff)
add a version action to give credit and list plugins
-rw-r--r--actions/version.php227
-rw-r--r--lib/action.php2
-rw-r--r--lib/router.php4
3 files changed, 232 insertions, 1 deletions
diff --git a/actions/version.php b/actions/version.php
new file mode 100644
index 000000000..92a59ed47
--- /dev/null
+++ b/actions/version.php
@@ -0,0 +1,227 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * Show version information for this software and plugins
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Info
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Version info page
+ *
+ * A page that shows version information for this site. Helpful for
+ * debugging, for giving credit to authors, and for linking to more
+ * complete documentation for admins.
+ *
+ * @category Info
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+class VersionAction extends Action
+{
+ var $pluginVersions = array();
+
+ /**
+ * Return true since we're read-only.
+ *
+ * @param array $args other arguments
+ *
+ * @return boolean is read only action?
+ */
+
+ function isReadOnly($args)
+ {
+ return true;
+ }
+
+ /**
+ * Returns the page title
+ *
+ * @return string page title
+ */
+
+ function title()
+ {
+ return sprintf(_("StatusNet %s"), STATUSNET_VERSION);
+ }
+
+ /**
+ * Prepare to run
+ *
+ * Fire off an event to let plugins report their
+ * versions.
+ *
+ * @param array $args array misc. arguments
+ *
+ * @return boolean true
+ */
+
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ Event::handle('PluginVersion', array(&$this->pluginVersions));
+
+ return true;
+ }
+
+ /**
+ * Execute the action
+ *
+ * Shows a page with the version information in the
+ * content area.
+ *
+ * @param array $args ignored.
+ *
+ * @return void
+ */
+
+ function handle($args)
+ {
+ parent::handle($args);
+ $this->showPage();
+ }
+
+ /**
+ * Show version information
+ *
+ * @return void
+ */
+
+ function showContent()
+ {
+ $this->elementStart('p');
+
+ $this->raw(sprintf(_('This site is powered by %s version %s, '.
+ 'Copyright 2008-2010 StatusNet, Inc. '.
+ 'and contributors.'),
+ XMLStringer::estring('a', array('href' => 'http://status.net/'),
+ _('StatusNet')),
+ STATUSNET_VERSION));
+ $this->elementEnd('p');
+
+ $this->element('h2', null, _('Contributors'));
+
+ $this->element('p', null, implode(', ', $this->contributors));
+
+ $this->element('h2', null, _('License'));
+
+ $this->element('p', null,
+ _('StatusNet is free software: you can redistribute it and/or modify '.
+ 'it under the terms of the GNU Affero General Public License as published by '.
+ 'the Free Software Foundation, either version 3 of the License, or '.
+ '(at your option) any later version. '));
+
+ $this->element('p', null,
+ _('This program is distributed in the hope that it will be useful, '.
+ 'but WITHOUT ANY WARRANTY; without even the implied warranty of '.
+ 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the '.
+ 'GNU Affero General Public License for more details. '));
+
+ $this->elementStart('p');
+ $this->raw(sprintf(_('You should have received a copy of the GNU Affero General Public License '.
+ 'along with this program. If not, see %s.'),
+ XMLStringer::estring('a', array('href' => 'http://www.gnu.org/licenses/agpl.html'),
+ 'http://www.gnu.org/licenses/agpl.html')));
+ $this->elementEnd('p');
+
+ // XXX: Theme information?
+
+ if (count($this->pluginVersions)) {
+ $this->element('h2', null, _('Plugins'));
+
+ foreach ($this->pluginVersions as $plugin) {
+ $this->elementStart('dl');
+ $this->element('dt', null, _('Name'));
+ if (array_key_exists('homepage', $plugin)) {
+ $this->elementStart('dd');
+ $this->element('a', array('href' => $plugin['homepage']),
+ $plugin['name']);
+ $this->elementEnd('dd');
+ } else {
+ $this->element('dd', null, $plugin['name']);
+ }
+ $this->element('dt', null, _('Version'));
+ $this->element('dd', null, $plugin['version']);
+ if (array_key_exists('author', $plugin)) {
+ $this->element('dt', null, _('Author(s)'));
+ $this->element('dd', null, $plugin['author']);
+ }
+ if (array_key_exists('rawdescription', $plugin)) {
+ $this->element('dt', null, _('Description'));
+ $this->elementStart('dd');
+ $this->raw($plugin['rawdescription']);
+ $this->elementEnd('dd');
+ } else if (array_key_exists('description', $plugin)) {
+ $this->element('dt', null, _('Description'));
+ $this->element('dd', null, $plugin['description']);
+ }
+ $this->elementEnd('dl');
+ }
+ }
+
+ }
+
+ var $contributors = array('Evan Prodromou (StatusNet)',
+ 'Zach Copley (StatusNet)',
+ 'Earle Martin (StatusNet)',
+ 'Marie-Claude Doyon (StatusNet)',
+ 'Sarven Capadisli (StatusNet)',
+ 'Robin Millette (StatusNet)',
+ 'Ciaran Gultnieks',
+ 'Michael Landers',
+ 'Ori Avtalion',
+ 'Garret Buell',
+ 'Mike Cochrane',
+ 'Matthew Gregg',
+ 'Florian Biree',
+ 'Erik Stambaugh',
+ 'drry',
+ 'Gina Haeussge',
+ 'Tryggvi Björgvinsson',
+ 'Adrian Lang',
+ 'Meitar Moscovitz',
+ 'Sean Murphy',
+ 'Leslie Michael Orchard',
+ 'Eric Helgeson',
+ 'Ken Sedgwick',
+ 'Brian Hendrickson',
+ 'Tobias Diekershoff',
+ 'Dan Moore',
+ 'Fil',
+ 'Jeff Mitchell',
+ 'Brenda Wallace',
+ 'Jeffery To',
+ 'Federico Marani',
+ 'Craig Andrews',
+ 'mEDI',
+ 'Brett Taylor');
+}
diff --git a/lib/action.php b/lib/action.php
index 35df03566..715072d1e 100644
--- a/lib/action.php
+++ b/lib/action.php
@@ -736,6 +736,8 @@ class Action extends HTMLOutputter // lawsuit
_('Privacy'));
$this->menuItem(common_local_url('doc', array('title' => 'source')),
_('Source'));
+ $this->menuItem(common_local_url('version'),
+ _('Version'));
$this->menuItem(common_local_url('doc', array('title' => 'contact')),
_('Contact'));
$this->menuItem(common_local_url('doc', array('title' => 'badge')),
diff --git a/lib/router.php b/lib/router.php
index 7ec962460..287d3c79f 100644
--- a/lib/router.php
+++ b/lib/router.php
@@ -101,7 +101,9 @@ class Router
'silence', 'unsilence',
'repeat',
'deleteuser',
- 'geocode');
+ 'geocode',
+ 'version',
+ );
foreach ($main as $a) {
$m->connect('main/'.$a, array('action' => $a));