diff options
58 files changed, 1943 insertions, 43 deletions
diff --git a/README.SOCIAL b/README.SOCIAL new file mode 100644 index 000000000..3394dca2d --- /dev/null +++ b/README.SOCIAL @@ -0,0 +1,23 @@ +This is GNU social, a free software, decentralized social network, +based on StatusNet. + +Developers +========== + +Matt Lee +Rob Myers +Sean Corbett +Ian Denhardt +Steve DuBois +Mike Sheldon + +With help from +============== + +Bradley M. Kuhn + +Special help from +================= + +Craig Andrews + diff --git a/TODO.SOCIAL b/TODO.SOCIAL new file mode 100644 index 000000000..4d4866f0f --- /dev/null +++ b/TODO.SOCIAL @@ -0,0 +1,12 @@ +Things to be done +================= + +* Create a theme for GNU social + +* Create a set of plugins to give StatusNet a more social-network UI + +* Work on improvements for annoying things in StatusNet (ie. no + redirect to login page when you need to be logged in, etc) + +* Work on adding further Activities, such as sharing photos/video, + events, UI for managing relationships.
\ No newline at end of file diff --git a/actions/public.php b/actions/public.php index 5fc547fea..181df1e43 100644 --- a/actions/public.php +++ b/actions/public.php @@ -239,13 +239,11 @@ class PublicAction extends Action function showAnonymousMessage() { if (! (common_config('site','closed') || common_config('site','inviteonly'))) { - $m = _('This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' . - 'based on the Free Software [StatusNet](http://status.net/) tool. ' . + $m = _('This is %%site.name%%, a social networking site. ' . '[Join now](%%action.register%%) to share notices about yourself with friends, family, and colleagues! ' . '([Read more](%%doc.help%%))'); } else { - $m = _('This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' . - 'based on the Free Software [StatusNet](http://status.net/) tool.'); + $m = _('This is %%site.name%%, a social networking site.'); } $this->elementStart('div', array('id' => 'anon_notice')); $this->raw(common_markup_to_html($m)); diff --git a/doc-src/about b/doc-src/about index 6a68e41cf..6a0ceb10f 100644 --- a/doc-src/about +++ b/doc-src/about @@ -1,6 +1,5 @@ %%site.name%% is a -[micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service -based on the Free Software [StatusNet](http://status.net/) tool. +social network based on the Free Software [GNU social](http://www.gnu.org/software/social/) tool. If you [register](%%action.register%%) for an account, you can post small (%%site.textlimit%% chars or less) text notices diff --git a/doc-src/faq b/doc-src/faq index 8e394806f..b333c4148 100644 --- a/doc-src/faq +++ b/doc-src/faq @@ -1,42 +1,17 @@ These are some *Frequently Asked Questions* about this service, with some answers. -What is %%site.name%%? +What is this site? ---------------------- -%%site.name%% is a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service. -You can use it to write short notices about yourself, where you are, -and what you're doing, and those notices will be sent to all your friends -and fans. +This is a social network, running the GNU social software. -How is %%site.name%% different from Twitter, Jaiku, Pownce, Plurk, others? --------------------------------------------------------------------------- +You can use it to make connections between friends, family and +colleagues -- writing short notices about yourself, where you are, and +what you're doing, and those notices will be sent to all your contacts. -%%site.name%% is an [Open Network Service](http://opendefinition.org/ossd). Our main -goal is to provide a fair and transparent service that preserves users' autonomy. In -particular, all the software used for %%site.name%% is [Free Software](http://en.wikipedia.org/wiki/Free_Software), and all the data is available -under the [%%license.title%%](%%license.url%%) license, making it Open Data. - -The software also implements the [OpenMicroBlogging](http://openmicroblogging.org/) protocol, meaning that you can have friends on other microblogging services -that can receive your notices. - -The goal here is *autonomy* -- you deserve the right to manage your own on-line -presence. If you don't like how %%site.name%% works, you can take your data and the source code and set up your own server (or move your account to another one). - -Where is feature X? -------------------- - -The software we run, [StatusNet](http://status.net/), is still in its early stages, -and many features people expect from microblogging sites are not yet implemented. Some important ones that are expected "soon": - -* More [AJAX](http://en.wikipedia.org/wiki/AJAX)-y interface -* Maps -* Cross-post to Pownce, Jaiku, etc. -* Pull messages from Twitter, Pownce, Jaiku, etc. -* [Facebook](http://www.facebook.com/) integration -* Image, video, audio notices - -There is [a list of bugs and features](http://status.net/bugs/) that you may find -interesting. New ideas or complaints are very welcome. +In the future, we'll be adding support for photo, video and file +sharing, as well as events, better contact management and mobile +devices. diff --git a/lib/action.php b/lib/action.php index 2b3b707c5..d417c88fc 100644 --- a/lib/action.php +++ b/lib/action.php @@ -824,14 +824,14 @@ class Action extends HTMLOutputter // lawsuit $this->elementStart('dd', null); if (common_config('site', 'broughtby')) { // TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set. - $instr = _('**%%site.name%%** is a microblogging service brought to you by [%%site.broughtby%%](%%site.broughtbyurl%%).'); + $instr = _('**%%site.name%%** is a social network, courtesy of [%%site.broughtby%%](%%site.broughtbyurl%%).'); } else { // TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set. - $instr = _('**%%site.name%%** is a microblogging service.'); + $instr = _('**%%site.name%%** is a social network.'); } $instr .= ' '; // TRANS: Second sentence of the StatusNet site license. Mentions the StatusNet source code license. - $instr .= sprintf(_('It runs the [StatusNet](http://status.net/) microblogging software, version %s, available under the [GNU Affero General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html).'), STATUSNET_VERSION); + $instr .= sprintf(_('It runs on [GNU social](http://www.gnu.org/software/social/), version %s, available under the [GNU Affero General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html).'), STATUSNET_VERSION); $output = common_markup_to_html($instr); $this->raw($output); $this->elementEnd('dd'); @@ -878,7 +878,7 @@ class Action extends HTMLOutputter // lawsuit 'height' => '15')); $this->text(' '); // TRANS: license message in footer. %1$s is the site name, %2$s is a link to the license URL, with a licence name set in configuration. - $notice = _('All %1$s content and data are available under the %2$s license.'); + $notice = _('All content and data are available under the %2$s license.'); $link = "<a class=\"license\" rel=\"external license\" href=\"" . htmlspecialchars(common_config('license', 'url')) . "\">" . diff --git a/plugins/GNUsocialDukiDukiSnail/GNUsocialDukiDukiSnail.php b/plugins/GNUsocialDukiDukiSnail/GNUsocialDukiDukiSnail.php new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/plugins/GNUsocialDukiDukiSnail/GNUsocialDukiDukiSnail.php diff --git a/plugins/GNUsocialDukiDukiSnail/README b/plugins/GNUsocialDukiDukiSnail/README new file mode 100644 index 000000000..98ae6526e --- /dev/null +++ b/plugins/GNUsocialDukiDukiSnail/README @@ -0,0 +1,151 @@ +GNU Social -- DukiDuki Snail +============================ + +Duki Duki Snail is a classic PC game, released in Czechoslovakia in +the 1980s, and later reborn in free software in the mid 1990s. + +It is our intention to create a free software version of DukiDuki +Snail for GNU social in which players can share their high scores. + +The game is built like such: + +A maze is drawn: + +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +XXXX XXX XXXX +XXXX XXX XXXX +XXXX XXX XXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXX +XXXX XXXX XXXX +XXXX XXXX XXXX +XXXX XXXX XXXX +XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXX XXX XXX XXX XXX XXXX XXXX +XXXX XXX XXX XXX XXX XXXX XXXX +XXXX XXX XXX XXX XXX XXXX XXXX +XXXX XXX XXXX XXX XXXX XXXXXXXXXX XXX XXXX XXXXXXXXXX +XXXX XXX XXXX XXX XXXX XXXXXXXXXX XXX XXXX XXXXXXXXXX +XXXX XXX XXXX XXX XXXX XXXXXXXXXX XXX XXXX XXXXXXXXXX +XXXX XXX XXXX XXXX XXXX XXXX XXXX +XXXX XXX XXXX XXXX XXXX XXXX XXXX +XXXX XXX XXXX XXXX XXXX XXXX XXXX +XXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXX +XXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXX +XXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXX +XXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXXX +XXXX XXX XXXX XXX XXXX XXX XXXX +XXXX XXX XXXX XXX XXXX XXX XXXX +XXXX XXX XXXX XXX XXXX XXX XXXX +XXXX XXX XXXX XXXXXXXXXXXXXXXX XXXX XXXXXXXXXXXXXXXX XXXX +XXXX XXX XXXX XXXXXXXXXXXXXXXX XXXX XXXXXXXXXXXXXXXX XXXX +XXXX XXX XXXX XXXXXXXXXXXXXXXX XXXX XXXXXXXXXXXXXXXX XXXX +XXXX XXX XXXX XXX XXX XXXX XXXX XXXX +XXXX XXX XXXX XXX XXX XXXX XXXX XXXX +XXXX XXX XXXX XXX XXX XXXX XXXX XXXX +XXXX XXX XXXX XXX XXXX XXX XXXX XXXXXXXXXX XXXXXXXXXX +XXXX XXX XXXX XXX XXXX XXX XXXX XXXXXXXXXX XXXXXXXXXX +XXXX XXX XXXX XXX XXXX XXX XXXX XXXXXXXXXX XXXXXXXXXX +XXXX XXX XXXX XXX XXXX XXX XXXX XXXXXXXXXX XXXXXXXXXX +XXXX XXX XXXX XXX XXXX XXXX XXX XXX XXXX +XXXX XXX XXXX XXX XXXX XXXX XXX XXX XXXX +XXXX XXX XXXX XXX XXXX XXXX XXX XXX XXXX +XXXX XXX XXXX XXX XXXXXXXXXXXXXXXXX XXX XXXXXXXXXX XXXX +XXXX XXX XXXX XXX XXXXXXXXXXXXXXXXX XXX XXXXXXXXXX XXXX +XXXX XXX XXXX XXX XXXXXXXXXXXXXXXXX XXX XXXXXXXXXX XXXX +XXXX XXX XXXX XXX XXXX XXX XXX XXXX +XXXX XXX XXXX XXX XXXX XXX XXX XXXX +XXXX XXX XXXX XXX XXXX XXX XXX XXXX +XXXX XXX XXXX XXX XXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXX XXX XXXX XXX XXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXX XXX XXXX XXX XXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXX XXX XXXX XXX XXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXX XXX XXXX XXX XXX XXXX +XXXX XXX XXXX XXX XXX XXXX +XXXX XXX XXXX XXX XXX XXXX +XXXX XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXX +XXXX XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXX +XXXX XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXX +XXXX XXX XXXX XXX XXXX XXXX +XXXX XXX XXXX XXX XXXX XXXX +XXXX XXX XXXX XXX XXXX XXXX +XXXX XXX XXXX XXXXXXXXXXXXXXXX XXXXXXXXXX XXXX XXXXXXXXXX +XXXX XXX XXXX XXXXXXXXXXXXXXXX XXXXXXXXXX XXXX XXXXXXXXXX +XXXX XXX XXXX XXXXXXXXXXXXXXXX XXXXXXXXXX XXXX XXXXXXXXXX +XXXX XXX XXXX XXXXXXXXXXXXXXXX XXXXXXXXXX XXXX XXXXXXXXXX +XXXX XXX XXX XXX XXXX XXX XXXX +XXXX XXX XXX XXX XXXX XXX XXXX +XXXX XXX XXX XXX XXXX XXX XXXX +XXXX XXX XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXX XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXX XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXX XXXX XXX XXX XXXX +XXXX XXX XXXX XXX XXX XXXX +XXXX XXX XXXX XXX XXX XXXX +XXXX XXXXXXXXXXXXXXXX XXXX XXXXXXXXXX XXX XXXXXXXXXX XXXX +XXXX XXXXXXXXXXXXXXXX XXXX XXXXXXXXXX XXX XXXXXXXXXX XXXX +XXXX XXXXXXXXXXXXXXXX XXXX XXXXXXXXXX XXX XXXXXXXXXX XXXX +XXXX XXXXXXXXXXXXXXXX XXXX XXXXXXXXXX XXX XXXXXXXXXX XXXX +XXXX XXX XXXX XXXX XXXX XXXX +XXXX XXX XXXX XXXX XXXX XXXX +XXXX XXX XXXX XXXX XXXX XXXX +XXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXX XXXX XXX XXX XXX XXXX +XXXX XXX XXXX XXX XXX XXX XXXX +XXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXX XXXXXXXXXX XXXX +XXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXX XXXXXXXXXX XXXX +XXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXX XXXXXXXXXX XXXX +XXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXX XXX XXXXXXXXXX XXXX +XXXX XXX XXX XXXX XXXX XXX XXXX +XXXX XXX XXX XXXX XXXX XXX XXXX +XXXX XXX XXX XXXX XXXX XXX XXXX +XXXX XXXXXXXXXXXXXXXX XXXX XXX XXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXXXXXXXXXXXXXXX XXXX XXX XXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXXXXXXXXXXXXXXX XXXX XXX XXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXXXXXXXXXXXXXXX XXXX XXX XXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXX XXX XXXX XXX XXXX +XXXX XXX XXX XXXX XXX XXXX +XXXXXXXXXX XXX XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXXXXXXXX XXXX XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXXXXXXXX XXXX XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXXXXXXXX XXXX XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXX XXXX XXXX XXX XXXX +XXXX XXXX XXXX XXX XXXX +XXXX XXXX XXXX XXX XXXX +XXXX XXXXXXXXXXXXXXXX XXXX XXXXXXXXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXXXXXXXXXXXXXXX XXXX XXXXXXXXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXXXXXXXXXXXXXXX XXXX XXXXXXXXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXXXXXXXXXXXXXXX XXXX XXXXXXXXXXXXXXXXXXXXXXX XXX XXXX +XXXX XXX XXX XXXX XXXX XXXX XXX XXXX +XXXX XXX XXX XXXX XXXX XXXX XXX XXXX +XXXX XXX XXX XXXX XXXX XXXX XXX XXXX +XXXX XXX XXXX XXX XXXX XXXXXXXXXX XXX XXXX XXX XXXX +XXXX XXX XXXX XXX XXXX XXXXXXXXXX XXX XXXX XXX XXXX +XXXX XXX XXXX XXX XXXX XXXXXXXXXX XXX XXXX XXX XXXX +XXXX XXX XXXX XXXX XXX XXX XXX XXXX +XXXX XXX XXXX XXXX XXX XXX XXX XXXX +XXXX XXX XXXX XXXX XXX XXX XXX XXXX +XXXX XXXXXXXXXXXXXXXXXXXXXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXX XXXXXXXXXXXXXXXXXXXXXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXX XXXXXXXXXXXXXXXXXXXXXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXX +XXXX XXXXXXXXXXXXXXXXXXXXXXX XXX XXXXXXXXXXXXXXXXXXXXXXX XXXX + XXXX XXX +@_K XXXX XXX [ exit ] + XXXX XXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX + +and you must guide your snail @_K through the maze in record time. + +This seems like an ideal thing to build using something like <canvas> too.
\ No newline at end of file diff --git a/plugins/GNUsocialEvents/GNUsocialEvents.php b/plugins/GNUsocialEvents/GNUsocialEvents.php new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/plugins/GNUsocialEvents/GNUsocialEvents.php diff --git a/plugins/GNUsocialLayout/GNUsocialLayout.php b/plugins/GNUsocialLayout/GNUsocialLayout.php new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/plugins/GNUsocialLayout/GNUsocialLayout.php diff --git a/plugins/GNUsocialOffTheRecordMessaging/GNUsocialOffTheRecordMessaging.php b/plugins/GNUsocialOffTheRecordMessaging/GNUsocialOffTheRecordMessaging.php new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/plugins/GNUsocialOffTheRecordMessaging/GNUsocialOffTheRecordMessaging.php diff --git a/plugins/GNUsocialPhotos/GNUsocialPhotosPlugin.php b/plugins/GNUsocialPhotos/GNUsocialPhotosPlugin.php new file mode 100644 index 000000000..480f4ca46 --- /dev/null +++ b/plugins/GNUsocialPhotos/GNUsocialPhotosPlugin.php @@ -0,0 +1,102 @@ +<?php +/** + * GNU Social + * Copyright (C) 2010, Free Software Foundation, Inc. + * + * PHP version 5 + * + * LICENCE: + * 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 Widget + * @package GNU Social + * @author Ian Denhardt <ian@zenhack.net> + * @copyright 2010 Free Software Foundation, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + */ + +/* Photo sharing plugin */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class GNUsocialPhotosPlugin extends Plugin +{ + + function onAutoload($cls) + { + $dir = dirname(__FILE__); + + switch ($cls) + { + case 'PhotosAction': + include_once $dir . '/lib/photolib.php'; + include_once $dir . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; + break; + case 'PhotouploadAction': + include_once $dir . '/lib/photolib.php'; + include_once $dir . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; + include_once $dir . '/classes/gnusocialphoto.php'; + break; + default: + break; + } + + return true; + } + + function onCheckSchema() + { + $schema = Schema::get(); + $schema->ensureTable('GNUsocialPhoto', + array(new ColumnDef('notice_id', 'integer', null, false, null, true, null, null, true), + new ColumnDef('path', 'varchar(150)', null, false), + new ColumnDef('thumb_path', 'varchar(156)', null, false), // 156 = 150 + strlen('thumb.') + new ColumnDef('owner_id', 'int(11)', null, false))); + } + + function onRouterInitialized($m) + { + $m->connect(':nickname/photos', array('action' => 'photos')); + $m->connect('main/uploadphoto', array('action' => 'photoupload')); + common_log(LOG_INFO, "init'd!"); + return true; + } + + function onStartActivityDefaultObjectType(&$notice, &$xs, &$type) + { + $photo = GNUsocialPhoto::staticGet('notice_id', $notice->id); + if($photo) { + $type = ActivityObject::PHOTO; + } + } +/* + function onStartShowNoticeItem($action) + { + $photo = GNUsocialPhoto::staticGet('notice_id', $action->notice->id); + if($photo) { + $action->out->elementStart('div', 'entry-title'); + $action->showAuthor(); + $action->out->elementStart('a', array('href' => 'http://' . common_config('site', 'server') . $photo->path)); + $action->out->element('img', array('src' => 'http://' . common_config('site', 'server') . $photo->thumb_path)); + $action->out->elementEnd('a'); + $action->out->elementEnd('div'); + $action->showNoticeInfo(); + $action->showNoticeOptions(); + return false; + } + return true; + } */ +} diff --git a/plugins/GNUsocialPhotos/actions/photos.php b/plugins/GNUsocialPhotos/actions/photos.php new file mode 100644 index 000000000..29a70e458 --- /dev/null +++ b/plugins/GNUsocialPhotos/actions/photos.php @@ -0,0 +1,110 @@ +<?php +/** + * GNU Social + * Copyright (C) 2010, Free Software Foundation, Inc. + * + * PHP version 5 + * + * LICENCE: + * 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 Widget + * @package GNU Social + * @author Ian Denhardt <ian@zenhack.net> + * @copyright 2010 Free Software Foundation, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class PhotosAction extends Action +{ + var $user = null; + + function prepare($args) + { + parent::prepare($args); + + $this->user = common_current_user(); + common_log(LOG_INFO, "finishing prepare. user : "); + common_log(LOG_INFO, $this->user->nickname); + return true; + } + + function handle($args) + { + parent::handle($args); + $this->showPage(); + } + + function title() + { + if (empty($this->user)) { + return _m('Hello'); + } else { + return sprintf(_m('Hello, %s'), $this->user->nickname); + } + } + + + function showContent() + { + common_log(LOG_INFO, "getting to show content.\n"); + if (empty($this->user)) { + // TODO: should just redirect to the login page. + $this->element('p', array(), 'You are not logged in'); + } else { + common_log(LOG_INFO, 'fileroot : ' . $_SERVER['DOCUMENT_ROOT'] . '/file/'); + $dir = opendir($_SERVER['DOCUMENT_ROOT'] . '/file/'); + if ($dir === false) { + $err = error_get_last(); + common_log(LOG_INFO, 'Error opening dir : ' . $err['message']); + return; + } + $args = $this->returnToArgs(); + foreach (array_keys($args) as $key) { + common_log(LOG_INFO, $key . ' => ' . $args[$key]); + if (is_array($args[$key])) { + foreach (array_keys($args[$key]) as $skey) { + common_log(LOG_INFO, ' ' . $skey . ' => ' . $args[$key][$skey]); + } + } + } + $pathparts = explode('/', $args[1]['nickname']); + $username = $pathparts[0]; + $this->elementStart('ul', array('class' => 'photothumbs')); + while (false !== ($file = readdir($dir))) { + $fparts = explode('-', $file); + if ($fparts[0] == $username // uploaded by this user + && ((substr($file, -4) == '.png') + || (substr($file, -4) == '.jpg') // XXX: is this needed? status.net seems to save jpgs as .jpeg + || (substr($file, -5) == '.jpeg') + || (substr($file, -4) == '.gif'))) { // and it's an image + common_log(LOG_INFO, 'file : ' . $file); + $this->elementStart('li'); + $this->elementStart('a', array('href' => 'http://' . common_config('site', 'server') . '/file/' . $file)); + if (!file_exists(INSTALLDIR . '/file/thumb.' . $file)) { + photo_make_thumbnail($file); + } + $this->element('img', array('src' => 'http://' . common_config('site', 'server') . '/file/' . 'thumb.' . $file)); + $this->elementEnd('a'); + $this->elementEnd('li'); + } + } + $this->elementEnd('ul'); + } + } +} diff --git a/plugins/GNUsocialPhotos/actions/photoupload.php b/plugins/GNUsocialPhotos/actions/photoupload.php new file mode 100644 index 000000000..6fdf51531 --- /dev/null +++ b/plugins/GNUsocialPhotos/actions/photoupload.php @@ -0,0 +1,143 @@ +<?php +/** + * GNU Social + * Copyright (C) 2010, Free Software Foundation, Inc. + * + * PHP version 5 + * + * LICENCE: + * 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 Widget + * @package GNU Social + * @author Ian Denhardt <ian@zenhack.net> + * @copyright 2010 Free Software Foundation, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class PhotouploadAction extends Action +{ + var $user = null; + + function prepare($args) + { + parent::prepare($args); + $this->user = common_current_user(); + return true; + } + + function handle($args) + { + parent::handle($args); + if($_SERVER['REQUEST_METHOD'] == 'POST') { + $this->handlePost(); + } + $this->showPage(); + } + + function title() + { + return _m('Upload Photos'); + } + + function showContent() + { + if(empty($this->user)) { + $this->element('p', array(), 'You are not logged in.'); + } else { + $this->elementStart('form', array('enctype' => 'mutlipart/form-data', + 'method' => 'post', + 'action' => common_local_url('photoupload'))); + $this->element('input', array('name' => 'photofile', + 'type' => 'file', + 'id' => 'photofile')); + $this->submit('upload', _('Upload')); + $this->elementEnd('form'); + } + } + + function handlePost() + { + + common_log(LOG_INFO, 'handlPost()!'); + // Workaround for PHP returning empty $_POST and $_FILES when POST + // length > post_max_size in php.ini + + if (empty($_FILES) + && empty($_POST) + && ($_SERVER['CONTENT_LENGTH'] > 0) + ) { + $msg = _('The server was unable to handle that much POST ' . + 'data (%s bytes) due to its current configuration.'); + + $this->showForm(sprintf($msg, $_SERVER['CONTENT_LENGTH'])); + return; + } + + // CSRF protection + +/* $token = $this->trimmed('token'); + if (!$token || $token != common_session_token()) { + $this->showForm(_('There was a problem with your session token. '. + 'Try again, please.')); + return; + } */ + + if($this->arg('upload')) { + $this->uploadPhoto(); + } + } + + function showForm($msg, $success=false) + { + $this->msg = $msg; + $this->success = $success; + +// $this->showPage(); + } + + function uploadPhoto() + { + common_log(LOG_INFO, 'Is this function even getting called?'); + $cur = common_current_user(); + if(empty($cur)) { + return; + } + try { + $imagefile = ImageFile::fromUpload('photofile'); + } catch (Exception $e) { + $this->showForm($e->getMessage()); + return; + } + if ($imagefile === null) { + $this->showForm(_('No file uploaded.')); + return; + } + + common_log(LOG_INFO, 'upload path : ' . $imagefile->filepath); + + $filename = $cur->nickname . '-' . common_timestamp() . sha1_file($imagefile->filepath) . image_type_to_extension($imagefile->type); + move_uploaded_file($imagefile->filepath, INSTALLDIR . '/file/' . $filename); + photo_make_thumbnail($filename); + $path = '/file/' . $filename; + $thumb_path = '/file/thumb.' . $filename; + $profile_id = $cur->id; + GNUsocialPhoto::saveNew($profile_id, $thumb_path, $path, 'web'); + } + +} diff --git a/plugins/GNUsocialPhotos/classes/gnusocialphoto.php b/plugins/GNUsocialPhotos/classes/gnusocialphoto.php new file mode 100644 index 000000000..c724db1f1 --- /dev/null +++ b/plugins/GNUsocialPhotos/classes/gnusocialphoto.php @@ -0,0 +1,110 @@ +<?php +/** + * GNU Social + * Copyright (C) 2010, Free Software Foundation, Inc. + * + * PHP version 5 + * + * LICENCE: + * 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 Widget + * @package GNU Social + * @author Ian Denhardt <ian@zenhack.net> + * @copyright 2010 Free Software Foundation, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +require_once INSTALLDIR . '/classes/Memcached_DataObject.php'; + +class GNUsocialPhoto extends Memcached_DataObject +{ + public $__table = 'GNUsocialPhoto'; + public $noitce_id; // integer + public $path; // varchar(150) + public $thumb_path; // varchar(156) + public $owner_id; // int(11) (user who posted the photo) + + function staticGet($k,$v=NULL) + { + return Memcached_DataObject::staticGet('GNUsocialPhoto',$k,$v); + } + + function delete() + { + if(!unlink(INSTALLDIR . $this->thumb_path)) { + return false; + } + if(!unlink(INSTALLDIR . $this->path)) { + return false; + } + return parent::delete(); + } + + function table() + { + return array('notice_id' => DB_DATAOBJECT_INT, + 'path' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL, + 'thumb_path' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL, + 'owner_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL); + } + + function keys() + { + return array_keys($this->keyTypes()); + } + + function keyTypes() + { + return array('notice_id' => 'K'); + } + + function sequenceKey() + { + return array(false, false, false); + } + + function saveNew($profile_id, $thumb_path, $path, $source) + { + $photo = new GNUsocialPhoto(); + $photo->thumb_path = $thumb_path; + $photo->path = $path; + $photo->owner_id = $profile_id; + + $rend = sprintf('<a href="http://%s%s"><img src="http://%s%s" /></a>', common_config('site', 'server'), $path, common_config('site', 'server'), $thumb_path); + + $notice = Notice::saveNew($profile_id, 'http://' . common_config('site', 'server') . $path, $source, array('rendered' => $rend)); + $photo->notice_id = $notice->id; + $photo_id = $photo->insert(); + if (!$photo_id) { + common_log_db_error($photo, 'INSERT', __FILE__); + throw new ServerException(_m('Problem Saving Photo.')); + } + } + /* + function asActivityNoun($element) + { + $object = new ActivityObject(); + + $object->type = ActivityObject::PHOTO; + $object->title = ""; + $object->thumbnail = 'http://' . common_config('site', 'server') . $this->thumb_path; + $object->largerImage = 'http://' . common_config('site', 'server') . $this->path; + return $object; + } */ +} diff --git a/plugins/GNUsocialPhotos/lib/photolib.php b/plugins/GNUsocialPhotos/lib/photolib.php new file mode 100644 index 000000000..9e5ff61fa --- /dev/null +++ b/plugins/GNUsocialPhotos/lib/photolib.php @@ -0,0 +1,87 @@ +<?php +/** + * GNU Social + * Copyright (C) 2010, Free Software Foundation, Inc. + * + * PHP version 5 + * + * LICENCE: + * 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 Widget + * @package GNU Social + * @author Ian Denhardt <ian@zenhack.net> + * @copyright 2010 Free Software Foundation, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + */ + + +function photo_make_thumbnail($filename) +{ + $height_dest = 192; + $width_dest = 256; + + $size_src = getimagesize(INSTALLDIR . '/file/' . $filename); + $image_type = $size_src[2]; + + switch($image_type) { + case IMAGETYPE_JPEG: + $image_src = imagecreatefromjpeg(INSTALLDIR . '/file/' . $filename); + break; + case IMAGETYPE_PNG: + $image_src = imagecreatefrompng(INSTALLDIR . '/file/' . $filename); + break; + case IMAGETYPE_GIF: + $image_src = imagecreatefromgif(INSTALLDIR . '/file/' . $filename); + break; + default: + return false; + } + + $width_src = $size_src[0]; + $height_src = $size_src[1]; + + $ratio_src = (float) $width_src / (float) $height_src; + $ratio_dest = (float) $width_dest / (float) $height_dest; + + if ($ratio_src > $ratio_dest) { + $height_crop = $height_src; + $width_crop = (int)($height_crop * $ratio_dest); + $x_crop = ($width_src - $width_crop) / 2; + } else { + $width_crop = $width_src; + $height_crop = (int)($width_crop / $ratio_dest); + $x_crop = 0; + } + + $image_dest = imagecreatetruecolor($width_dest, $height_dest); + + imagecopyresampled($image_dest, $image_src, 0, 0, $x_crop, 0, $width_dest, $height_dest, $width_crop, $height_crop); + switch ($image_type) { + case IMAGETYPE_JPEG: + imagejpeg($image_dest, INSTALLDIR . '/file/' . 'thumb.' . $filename, 100); + break; + case IMAGETYPE_PNG: + imagepng($image_dest, INSTALLDIR . '/file/thumb.' . $filename); + break; + case IMAGETYPE_GIF: + imagegif($image_dest, INSTALLDIR . '/file/thumb.' . $filename); + break; + } + + imagedestroy($image_src); + imagedestroy($image_dest); + + return true; +} diff --git a/plugins/GNUsocialRelationshipsManager/GNUsocialRelationshipsManager.php b/plugins/GNUsocialRelationshipsManager/GNUsocialRelationshipsManager.php new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/plugins/GNUsocialRelationshipsManager/GNUsocialRelationshipsManager.php diff --git a/plugins/GNUsocialTemplatePlugin.php b/plugins/GNUsocialTemplatePlugin.php new file mode 100644 index 000000000..7db2f73a8 --- /dev/null +++ b/plugins/GNUsocialTemplatePlugin.php @@ -0,0 +1,359 @@ +<?php +/** + * Plugin to render GNU social + * + * Captures rendered parts from the output buffer, passes them through a template file: tpl/social.php + * Adds an API method at index.php/template/update which lets you overwrite the template file + * Requires username/password and a single POST parameter called "template" + * The method is disabled unless the user is #1, the first user of the system + * + * @category Plugin + * @package StatusNet + * @author Brian Hendrickson <brian@megapump.com> + * @author Matt Lee <mattl@cnuk.org> + * @copyright 2009 Megapump, Inc. + * @copyright 2010 Free Software Foundation, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://megapump.com/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +define('TEMPLATEPLUGIN_VERSION', '0.1'); + +class TemplatePlugin extends Plugin { + + var $blocks = array(); + + function __construct() { + parent::__construct(); + } + + // capture the RouterInitialized event + // and connect a new API method + // for updating the template + function onRouterInitialized( $m ) { + $m->connect( 'template/update', array( + 'action' => 'template', + )); + } + + // <%styles%> + // <%scripts%> + // <%search%> + // <%feeds%> + // <%description%> + // <%head%> + function onStartShowHead( $act ) { + $this->clear_xmlWriter($act); + $act->extraHead(); + $this->blocks['head'] = $act->xw->flush(); + $act->showStylesheets(); + $this->blocks['styles'] = $act->xw->flush(); + $act->showScripts(); + $this->blocks['scripts'] = $act->xw->flush(); + $act->showFeeds(); + $this->blocks['feeds'] = $act->xw->flush(); + $act->showOpenSearch(); + $this->blocks['search'] = $act->xw->flush(); + $act->showDescription(); + $this->blocks['description'] = $act->xw->flush(); + return false; + } + + // <%bodytext%> + function onStartShowContentBlock( $act ) { + $this->clear_xmlWriter($act); + return true; + } + function onEndShowContentBlock( $act ) { + $this->blocks['bodytext'] = $act->xw->flush(); + } + + // <%localnav%> + function onStartShowLocalNavBlock( $act ) { + $this->clear_xmlWriter($act); + return true; + } + function onEndShowLocalNavBlock( $act ) { + $this->blocks['localnav'] = $act->xw->flush(); + } + + // <%export%> + function onStartShowExportData( $act ) { + $this->clear_xmlWriter($act); + return true; + } + function onEndShowExportData( $act ) { + $this->blocks['export'] = $act->xw->flush(); + } + + // <%subscriptions%> + // <%subscribers%> + // <%groups%> + // <%statistics%> + // <%cloud%> + // <%groupmembers%> + // <%groupstatistics%> + // <%groupcloud%> + // <%popular%> + // <%groupsbyposts%> + // <%featuredusers%> + // <%groupsbymembers%> + function onStartShowSections( $act ) { + global $action; + $this->clear_xmlWriter($act); + switch ($action) { + case "showstream": + $act->showSubscriptions(); + $this->blocks['subscriptions'] = $act->xw->flush(); + $act->showSubscribers(); + $this->blocks['subscribers'] = $act->xw->flush(); + $act->showGroups(); + $this->blocks['groups'] = $act->xw->flush(); + $act->showStatistics(); + $this->blocks['statistics'] = $act->xw->flush(); + $cloud = new PersonalTagCloudSection($act, $act->user); + $cloud->show(); + $this->blocks['cloud'] = $act->xw->flush(); + break; + case "showgroup": + $act->showMembers(); + $this->blocks['groupmembers'] = $act->xw->flush(); + $act->showStatistics(); + $this->blocks['groupstatistics'] = $act->xw->flush(); + $cloud = new GroupTagCloudSection($act, $act->group); + $cloud->show(); + $this->blocks['groupcloud'] = $act->xw->flush(); + break; + case "public": + $pop = new PopularNoticeSection($act); + $pop->show(); + $this->blocks['popular'] = $act->xw->flush(); + $gbp = new GroupsByPostsSection($act); + $gbp->show(); + $this->blocks['groupsbyposts'] = $act->xw->flush(); + $feat = new FeaturedUsersSection($act); + $feat->show(); + $this->blocks['featuredusers'] = $act->xw->flush(); + break; + case "groups": + $gbp = new GroupsByPostsSection($act); + $gbp->show(); + $this->blocks['groupsbyposts'] = $act->xw->flush(); + $gbm = new GroupsByMembersSection($act); + $gbm->show(); + $this->blocks['groupsbymembers'] = $act->xw->flush(); + break; + } + return false; + } + + // <%logo%> + // <%nav%> + // <%notice%> + // <%noticeform%> + function onStartShowHeader( $act ) { + $this->clear_xmlWriter($act); + $act->showLogo(); + $this->blocks['logo'] = $act->xw->flush(); + $act->showPrimaryNav(); + $this->blocks['nav'] = $act->xw->flush(); + $act->showSiteNotice(); + $this->blocks['notice'] = $act->xw->flush(); + if (common_logged_in()) { + $act->showNoticeForm(); + } else { + $act->showAnonymousMessage(); + } + $this->blocks['noticeform'] = $act->xw->flush(); + return false; + } + + // <%secondarynav%> + // <%licenses%> + function onStartShowFooter( $act ) { + $this->clear_xmlWriter($act); + $act->showSecondaryNav(); + $this->blocks['secondarynav'] = $act->xw->flush(); + $act->showLicenses(); + $this->blocks['licenses'] = $act->xw->flush(); + return false; + } + + // capture the EndHTML event + // and include the template + function onEndEndHTML($act) { + + global $action, $tags; + + // set the action and title values + $vars = array( + 'action'=>$action, + 'title'=>$act->title(). " - ". common_config('site', 'name') + ); + + // use the PHP template + // unless statusnet config: + // $config['template']['mode'] = 'html'; + if (!(common_config('template', 'mode') == 'html')) { + $tpl_file = $this->templateFolder() . '/social.php'; + $tags = array_merge($vars,$this->blocks); + include $tpl_file; + return; + } + + $tpl_file = $this->templateFolder() . '/index.html'; + + // read the static template + $output = file_get_contents( $tpl_file ); + + $tags = array(); + + // get a list of the <%tags%> in the template + $pattern='/<%([a-z]+)%>/'; + + if ( 1 <= preg_match_all( $pattern, $output, $found )) + $tags[] = $found; + + // for each found tag, set its value from the rendered blocks + foreach( $tags[0][1] as $pos=>$tag ) { + if (isset($this->blocks[$tag])) + $vars[$tag] = $this->blocks[$tag]; + + // didn't find a block for the tag + elseif (!isset($vars[$tag])) + $vars[$tag] = ''; + } + + // replace the tags in the template + foreach( $vars as $key=>$val ) + $output = str_replace( '<%'.$key.'%>', $val, $output ); + + echo $output; + + return true; + + } + function templateFolder() { + return 'tpl'; + } + + // catching the StartShowHTML event to halt the rendering + function onStartShowHTML( $act ) { + $this->clear_xmlWriter($act); + return true; + } + + // clear the xmlWriter + function clear_xmlWriter( $act ) { + $act->xw->openMemory(); + $act->xw->setIndent(true); + } + +} + +/** + * Action for updating the template remotely + * + * "template/update" -- a POST method that requires a single + * parameter "template", containing the new template code + * + * @category Plugin + * @package StatusNet + * @author Brian Hendrickson <brian@megapump.com> + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://megapump.com/ + * + */ + +class TemplateAction extends Action +{ + + function prepare($args) { + parent::prepare($args); + return true; + } + + function handle($args) { + + parent::handle($args); + + if (!isset($_SERVER['PHP_AUTH_USER'])) { + + // not authenticated, show login form + header('WWW-Authenticate: Basic realm="StatusNet API"'); + + // cancelled the browser login form + $this->clientError(_('Authentication error!'), $code = 401); + + } else { + + $nick = $_SERVER['PHP_AUTH_USER']; + $pass = $_SERVER['PHP_AUTH_PW']; + + // check username and password + $user = common_check_user($nick,$pass); + + if ($user) { + + // verify that user is admin + if (!($user->id == 1)) + $this->clientError(_('Only User #1 can update the template.'), $code = 401); + + // open the old template + $tpl_file = $this->templateFolder() . '/index.html'; + $fp = fopen( $tpl_file, 'w+' ); + + // overwrite with the new template + fwrite($fp, $this->arg('template')); + fclose($fp); + + header('HTTP/1.1 200 OK'); + header('Content-type: text/plain'); + print "Template Updated!"; + + } else { + + // bad username and password + $this->clientError(_('Authentication error!'), $code = 401); + + } + + } + } + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'Template', + 'version' => TEMPLATEPLUGIN_VERSION, + 'author' => 'Brian Hendrickson', + 'homepage' => 'http://status.net/wiki/Plugin:Template', + 'rawdescription' => + _m('Use an HTML template for Web output.')); + return true; + } + +} + +/** + * Function for retrieving a statusnet display section + * + * requires one parameter, the name of the section + * section names are listed in the comments of the TemplatePlugin class + * + * @category Plugin + * @package StatusNet + * @author Brian Hendrickson <brian@megapump.com> + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://megapump.com/ + * + */ + +function section($tagname) { + global $tags; + if (isset($tags[$tagname])) + return $tags[$tagname]; +} + diff --git a/plugins/GNUsocialVideo/GNUsocialVideoPlugin.php b/plugins/GNUsocialVideo/GNUsocialVideoPlugin.php new file mode 100644 index 000000000..5e9a6f85e --- /dev/null +++ b/plugins/GNUsocialVideo/GNUsocialVideoPlugin.php @@ -0,0 +1,54 @@ +<?php +/** + * GNU Social + * Copyright (C) 2010, Free Software Foundation, Inc. + * + * PHP version 5 + * + * LICENCE: + * 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 Widget + * @package GNU Social + * @author Ian Denhardt <ian@zenhack.net> + * @copyright 2010 Free Software Foundation, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class GNUsocialVideoPlugin extends Plugin +{ + function onAutoload($cls) + { + $dir = dirname(__FILE__); + switch($cls) + { + case 'PostvideoAction': + include_once $dir . '/actions/postvideo.php'; + break; + default: + break; + } + return true; + } + + function onRouterInitialized($m) + { + $m->connect('main/postvideo', array('action' => 'postvideo')); + return true; + } +} diff --git a/plugins/GNUsocialVideo/actions/postvideo.php b/plugins/GNUsocialVideo/actions/postvideo.php new file mode 100644 index 000000000..4af34af7a --- /dev/null +++ b/plugins/GNUsocialVideo/actions/postvideo.php @@ -0,0 +1,83 @@ +<?php +/** + * GNU Social + * Copyright (C) 2010, Free Software Foundation, Inc. + * + * PHP version 5 + * + * LICENCE: + * 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 Widget + * @package GNU Social + * @author Ian Denhardt <ian@zenhack.net> + * @copyright 2010 Free Software Foundation, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +class PostvideoAction extends Action { + var $user = null; + + function prepare($args) + { + parent::prepare($args); + $this->user = common_current_user(); + return true; + } + + function handle($args) + { + parent::handle($args); + if ($_SERVER['REQUEST_METHOD'] == 'POST') { + $this->handlePost($args); + } + $this->showPage(); + } + + function handlePost($args) + { + if (!$this->arg('post')) { + return; + } + if (empty($_POST['video_uri'])) { + return; + } + $uri = $_POST['video_uri']; + $uri = filter_var($uri, FILTER_SANITIZE_URL); + $uri = filter_var($uri, FILTER_VALIDATE_URL); + if($uri) { + $rend = sprintf('<video src="%s", controls="controls">Sorry, your browser doesn\'t support the video tag.</video>', $uri); + Notice::saveNew($this->user->id, 'video : ' . $uri, 'web', array('rendered' => $rend)); + } + } + + function showContent() + { + if(empty($this->user)) { + $this->element('p', array(), 'You are not logged in.'); + } else { + $this->elementStart('form', array('method' => 'post', + 'action' => common_local_url('postvideo'))); + $this->element('input', array('name' => 'video_uri', + 'type' => 'text', + 'id' => 'video_uri')); + $this->submit('post', _('Post')); + $this->elementEnd('form'); + } + } +} diff --git a/plugins/OpenID/doc-src/openid b/plugins/OpenID/doc-src/openid index f2dc610a5..0f0812850 100644 --- a/plugins/OpenID/doc-src/openid +++ b/plugins/OpenID/doc-src/openid @@ -9,3 +9,5 @@ There are many [Public OpenID providers](http://wiki.openid.net/OpenID-Providers * [Yahoo!](http://openid.yahoo.com/) : If you have an account with Yahoo!, you can log in to this site by entering your Yahoo!-provided OpenID in the box above. Yahoo! OpenID URLs have the form *https://me.yahoo.com/yourusername*. * [AOL](http://dev.aol.com/aol-and-63-million-openids) : If you have an account with [AOL](http://www.aol.com/), like an [AIM](http://www.aim.com/) account, you can log in to %%site.name%% by entering your AOL-provided OpenID in the box above. AOL OpenID URLs have the form *http://openid.aol.com/yourusername*. Your username should be all lowercase, no spaces. * [Blogger](http://bloggerindraft.blogspot.com/2008/01/new-feature-blogger-as-openid-provider.html), [Wordpress.com](http://faq.wordpress.com/2007/03/06/what-is-openid/), [LiveJournal](http://www.livejournal.com/openid/about.bml), [Vox](http://bradfitz.vox.com/library/post/openid-for-vox.html) : If you have a blog on any of these services, enter your blog URL in the box above. For example, *http://yourusername.blogspot.com/*, *http://yourusername.wordpress.com/*, *http://yourusername.livejournal.com/*, or *http://yourusername.vox.com/*. + +Additionally, once you have an account on %%site.name%%, you can use your profile's URL (https://%%site.server%%/yourusername) as an OpenID elsewhere as well. diff --git a/socialfy-your-domain/README.txt b/socialfy-your-domain/README.txt new file mode 100644 index 000000000..ead4380f2 --- /dev/null +++ b/socialfy-your-domain/README.txt @@ -0,0 +1,57 @@ +Initial simple way to Webfinger enable your domain -- needs PHP. +================================================================ + +Step 1 +====== + +First, put the folders 'xrd' and 'dot-well-known' on your website, so +they load at: + + http://yourname.com/xrd/ + + and + + http://yourname.com/.well-known/ + + (Remember the . at the beginning of this one) + +Step 2 +====== + +Next, edit xrd/index.php and enter a secret in this line: + +$s = ""; + +This can be anything you like... + +$s = "johnny-five"; + +or + +$s = "12345"; + +It really doesn't matter too much. + +Step 3 +====== + +For each user on your site, and this might only be you... + +Make a copy of the example@example.com.xml file so that it's called... + + yoursecretusername@domain.com.xml + + So, if your secret is 'johnny5' and your name is ben and your + domain is titanictoycorp.biz, your file should be called + johnny5ben@titanictoycorp.biz.xml + +Finally, edit the file to point at your account on your social +site. If you are the only user, then you probably don't need to worry +about user/1 as this will be you. For multi user sites, the user ID is +on the profile page. + +Finally +======= + +Using this method, though fiddly, you can now be @user@domain without +the need for any prefixes for subdomains, etc. diff --git a/socialfy-your-domain/dot-well-known/host-meta b/socialfy-your-domain/dot-well-known/host-meta new file mode 100644 index 000000000..e44591a4e --- /dev/null +++ b/socialfy-your-domain/dot-well-known/host-meta @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0" xmlns:hm="http://host-meta.net/xrd/1.0"><hm:Host>example.com</hm:Host><Link rel="lrdd" template="http://example.com/xrd?uri={uri}"><Title>Resource Descriptor</Title></Link></XRD>
\ No newline at end of file diff --git a/socialfy-your-domain/xrd/example@example.com b/socialfy-your-domain/xrd/example@example.com new file mode 100644 index 000000000..06987525b --- /dev/null +++ b/socialfy-your-domain/xrd/example@example.com @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"> + <Subject>acct:example@example.com</Subject> + <Alias>acct:example@social.example.com</Alias> + <Alias>http://social.example.com/user/1</Alias> + <Link rel="http://webfinger.net/rel/profile-page" type="text/html" href="http://social.example.com/user/1"/> + <Link rel="http://schemas.google.com/g/2010#updates-from" type="application/atom+xml" href="http://social.example.com/api/statuses/user_timeline/1.atom"/> + <Link rel="http://microformats.org/profile/hcard" type="text/html" href="http://social.example.com/hcard"/> + <Link rel="http://gmpg.org/xfn/11" type="text/html" href="http://social.example.com/user/1"/> + <Link rel="describedby" type="application/rdf+xml" href="http://social.example.com/foaf"/> + <Link rel="http://salmon-protocol.org/ns/salmon-replies" href="http://social.example.com/main/salmon/user/1"/> + <Link rel="http://salmon-protocol.org/ns/salmon-mention" href="http://social.example.com/main/salmon/user/1"/> + <Link rel="http://ostatus.org/schema/1.0/subscribe" template="http://social.example.com/main/ostatussub?profile={uri}"/> +</XRD> diff --git a/socialfy-your-domain/xrd/index.php b/socialfy-your-domain/xrd/index.php new file mode 100644 index 000000000..25f1d8bf3 --- /dev/null +++ b/socialfy-your-domain/xrd/index.php @@ -0,0 +1,41 @@ +<?php + +/* + * GNU social + * Copyright (C) 2010, Free Software Foundation, Inc + * + * 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/>. + */ + + +$s = ""; + +/* this should be a secret */ + +$u = $_GET['uri']; + +$u = substr($u, 5); + +$f = $s . $u . ".xml"; + +if (file_exists($f)) { + $fh = fopen($f, 'r'); + $c = fread($fh, filesize($f)); + fclose($fh); + header('Content-type: text/xml'); + echo $c; +} + + +?>
\ No newline at end of file diff --git a/theme/GNUSocial/css/default.css b/theme/GNUSocial/css/default.css new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/theme/GNUSocial/css/default.css diff --git a/theme/gnusocial/css/combo.css b/theme/gnusocial/css/combo.css new file mode 100644 index 000000000..3f31a52e1 --- /dev/null +++ b/theme/gnusocial/css/combo.css @@ -0,0 +1,13 @@ +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var,optgroup{font-style:inherit;font-weight:inherit;}del,ins{text-decoration:none;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:baseline;}sub{vertical-align:baseline;}legend{color:#000;}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;}input,button,textarea,select{*font-size:100%;}body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea,button{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}body{text-align:center;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main,.yui-g .yui-u .yui-g{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin-left:24.0769em;*margin-left:23.62em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.50em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-g .yui-u{width:48.1%;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui-gc div.first,.yui-gd .yui-g{width:66%;}.yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;}.yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first{float:left;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#hd:after,#bd:after,#ft:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#hd,#bd,#ft,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +body{margin:10px;}h1{font-size:138.5%;}h2{font-size:123.1%;}h3{font-size:108%;}h1,h2,h3{margin:1em 0;}h1,h2,h3,h4,h5,h6,strong,dt{font-weight:bold;}optgroup{font-weight:normal;}abbr,acronym{border-bottom:1px dotted #000;cursor:help;}em{font-style:italic;}del{text-decoration:line-through;}blockquote,ul,ol,dl{margin:1em;}ol,ul,dl{margin-left:2em;}ol li{list-style:decimal outside;}ul li{list-style:disc outside;}dl dd{margin-left:1em;}th,td{border:1px solid #000;padding:.5em;}th{font-weight:bold;text-align:center;}caption{margin-bottom:.5em;text-align:center;}sup{vertical-align:super;}sub{vertical-align:sub;}p,fieldset,table,pre{margin-bottom:1em;}button,input[type="checkbox"],input[type="radio"],input[type="reset"],input[type="submit"]{padding:1px;}
\ No newline at end of file diff --git a/theme/gnusocial/css/debug.css b/theme/gnusocial/css/debug.css new file mode 100644 index 000000000..a77e2bcb9 --- /dev/null +++ b/theme/gnusocial/css/debug.css @@ -0,0 +1,7 @@ +#hd { background-color: orange !important; } + +#bd { background-color: red !important; } + +#ft { background-color: lime !important; } + +#yui-main { background-color: yellow !important; }
\ No newline at end of file diff --git a/theme/gnusocial/css/display.css b/theme/gnusocial/css/display.css new file mode 100644 index 000000000..3f31a52e1 --- /dev/null +++ b/theme/gnusocial/css/display.css @@ -0,0 +1,13 @@ +/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var,optgroup{font-style:inherit;font-weight:inherit;}del,ins{text-decoration:none;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:baseline;}sub{vertical-align:baseline;}legend{color:#000;}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;}input,button,textarea,select{*font-size:100%;}body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea,button{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}body{text-align:center;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main,.yui-g .yui-u .yui-g{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin-left:24.0769em;*margin-left:23.62em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.50em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-g .yui-u{width:48.1%;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui-gc div.first,.yui-gd .yui-g{width:66%;}.yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;}.yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first{float:left;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#hd:after,#bd:after,#ft:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#hd,#bd,#ft,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}/* +Copyright (c) 2009, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.7.0 +*/ +body{margin:10px;}h1{font-size:138.5%;}h2{font-size:123.1%;}h3{font-size:108%;}h1,h2,h3{margin:1em 0;}h1,h2,h3,h4,h5,h6,strong,dt{font-weight:bold;}optgroup{font-weight:normal;}abbr,acronym{border-bottom:1px dotted #000;cursor:help;}em{font-style:italic;}del{text-decoration:line-through;}blockquote,ul,ol,dl{margin:1em;}ol,ul,dl{margin-left:2em;}ol li{list-style:decimal outside;}ul li{list-style:disc outside;}dl dd{margin-left:1em;}th,td{border:1px solid #000;padding:.5em;}th{font-weight:bold;text-align:center;}caption{margin-bottom:.5em;text-align:center;}sup{vertical-align:super;}sub{vertical-align:sub;}p,fieldset,table,pre{margin-bottom:1em;}button,input[type="checkbox"],input[type="radio"],input[type="reset"],input[type="submit"]{padding:1px;}
\ No newline at end of file diff --git a/theme/gnusocial/css/social.css b/theme/gnusocial/css/social.css new file mode 100755 index 000000000..8a10dd02f --- /dev/null +++ b/theme/gnusocial/css/social.css @@ -0,0 +1,280 @@ +/* + +GNU social alpha CSS + +Enable this line to debug: + +@import url('./debug.css'); + +*/ + +/* stuff we want to hide..... */ + +legend,.entry-content .source, .entry-content .location, .entry-content .response, #anon_notice, #notices_primary h2, #site_nav_local_views dt, #ft dt{ display: none !important; } + +dl, dd { margin: 0 !important; padding: 0 !important;} + +#yui-main { margin-bottom: 0 !important; padding-bottom: 0 !important;} + +.notices { margin: 0; padding: 0; } +.notices li { list-style: none; } + +#ft { padding-top: 12px;} + +#custom-doc { width:76.23em;*width:74.39em;min-width:991px; margin:auto; text-align:left; } + +#yui-main { background-color: white; position: relative; } + +#sidebar *, #right-nav * { background: none !important; border: none !important; } + + html, body{padding: 0; margin: 0;} + + body {background-image: url(/theme/gnusocial/images/bg.png) !important; background-repeat: repeat-x !important; background-color: white;} + + #hd h1 {margin: 0; line-height: 40px; font-size: 24px; font-weight: bold;} + + #hd h1 a{color: #111; text-decoration: none;} + + #hd dt {display: none;} + + #hd ul {padding: 0; margin: 0; line-height: 48px; position: absolute; top: 0; right: 10px; } + + #hd li {display: inline; list-style: none; margin-left: 12px;} + + #hd {height: 40px; position: relative;} + + + form {margin: 0 auto; width: 70%;} + + table {width: 100%;} + + tr, td{border: 0;} + + .update-text{ font-size: 12px; font-weight: bold;} + + .update-icon{ text-align: center;} + + #stream li{list-style: none; position: relative; margin-top: 12px; } + + #stream dl {position: absolute; top: 0; left: 50px;} + + #stream dd {color: #333; font-size: 80%; padding: 0; margin: 0; margin-top: 6px;} + + + #social {border-left: 1px solid #999; border-right: 1px solid #999; padding-left: 10px;} + + #sidebar ul{margin: 0; padding: 0;} + + #sidebar li {list-style: none;} + + #sidebar li a{display: block; width: 180px; padding: 4px;} + + #sidebar li a:hover {background-color: #ececec;} + + .selected {background-color: cyan; width: 180px;} + + #right-nav {background-color: #ececec;} + + #right-nav div {padding: 10px;} + + .form_notice { position: relative; top: 0; left: 0; } + + + +form label.submit { +display:none; +} + +.form_settings { +clear:both; +} + +.form_settings fieldset { +margin-bottom:29px; +} +.form_settings input.remove { +margin-left:11px; +} +.form_settings .form_data li { +width:100%; +float:left; +} +.form_settings .form_data label { +float:left; +} +.form_settings .form_data textarea, +.form_settings .form_data select, +.form_settings .form_data input { +margin-left:11px; +float:left; +} +.form_settings .form_data textarea { +width:325px; +} + +.form_settings .form_data input.submit { +margin-left:0; +} + +.form_settings label { +margin-top:2px; +width:143px; +} + +.form_actions label { +display:none; +} +.form_guide { +font-style:italic; +} + +.form_settings #settings_autosubscribe label { +display:inline; +font-weight:bold; +} + +#form_settings_profile legend, +#form_login legend, +#form_register legend, +#form_password legend, +#form_settings_avatar legend, +#newgroup legend, +#editgroup legend, +#form_tag_user legend, +#form_remote_subscribe legend, +#form_openid_login legend, +#form_search legend, +#form_invite legend, +#form_notice_delete legend, +#form_password_recover legend, +#form_password_change legend { +display:none; +} + +.form_settings .form_data p.form_guide { +clear:both; +margin-left:155px; +margin-bottom:0; +} + +.form_settings p { +margin-bottom:11px; +} + +.form_settings input.checkbox { +margin-top:0; +margin-left:0; +} +.form_settings label.checkbox { +font-weight:normal; +margin-top:0; +margin-right:0; +margin-left:11px; +float:left; +width:90%; +} + + +#form_login p.form_guide, +#form_register #settings_rememberme p.form_guide, +#form_openid_login #settings_rememberme p.form_guide, +#settings_twitter_remove p.form_guide, +#form_search ul.form_data #q { +margin-left:0; +} + +.form_settings .form_note { +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +padding:0 7px; +} + + +.form_settings input.form_action-primary { +padding:0; +} +.form_settings input.form_action-secondary { +margin-left:29px; +} + +#form_search .submit { +margin-left:11px; +} +caption { +font-weight:bold; +} +legend { +font-weight:bold; +font-size:1.3em; +} +input, textarea, select, option { +padding:4px; +font-family:sans-serif; +font-size:1em; +} +input, textarea, select { +border-width:2px; +border-style: solid; +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +} + +input.submit { +font-weight:bold; +cursor:pointer; +} +textarea { +overflow:auto; +} +option { +padding-bottom:0; +} +fieldset { +padding:0; +border:0; +} +form ul li { +list-style-type:none; +margin:0 0 18px 0; +} +form label { +font-weight:bold; +} +input.checkbox { +position:relative; +top:2px; +left:0; +border:0; +} + +.error, +.success { +padding:4px 7px; +border-radius:4px; +-moz-border-radius:4px; +-webkit-border-radius:4px; +margin-bottom:18px; +} + +#all .notice, #public .notice { padding-bottom: 12px;} + +#all .notice .entry-title, #public .notice .entry-title { position: relative;} + +#all .notice .entry-title .entry-content, #public .notice .entry-title .entry-content { position: absolute; top: 25px; left: 55px; } + +#all .notice .entry-content .timestamp, #public .notice .entry-content .timestamp { color: #666; margin-left: 55px; font-size: 80%; text-decoration: none !important; } + +abbr { border: 0px !important; } + +#all .entry-title .author .nickname, #public .entry-title .author .nickname { position: absolute; top: 0; left: 55px; font-weight: bold; } + +#showstream #i { position: absolute; top: 0; left: 0; background-color: white; z-index: 100; width: 185px; } + + +.notice-options, .form_favor .submit, .form_repeat .submit { background-color: white; border: 0; display: none !important; } + +#form_notice { margin-top: 10px;} + + diff --git a/theme/gnusocial/default-avatar-mini.png b/theme/gnusocial/default-avatar-mini.png Binary files differnew file mode 100755 index 000000000..4fd8bd9e1 --- /dev/null +++ b/theme/gnusocial/default-avatar-mini.png diff --git a/theme/gnusocial/default-avatar-profile.png b/theme/gnusocial/default-avatar-profile.png Binary files differnew file mode 100755 index 000000000..eb08571d9 --- /dev/null +++ b/theme/gnusocial/default-avatar-profile.png diff --git a/theme/gnusocial/default-avatar-stream.png b/theme/gnusocial/default-avatar-stream.png Binary files differnew file mode 100755 index 000000000..926b8a9ca --- /dev/null +++ b/theme/gnusocial/default-avatar-stream.png diff --git a/theme/gnusocial/images/bg.png b/theme/gnusocial/images/bg.png Binary files differnew file mode 100644 index 000000000..1b80a1918 --- /dev/null +++ b/theme/gnusocial/images/bg.png diff --git a/theme/gnusocial/images/icons/icon_atom.png b/theme/gnusocial/images/icons/icon_atom.png Binary files differnew file mode 100755 index 000000000..6a001f11a --- /dev/null +++ b/theme/gnusocial/images/icons/icon_atom.png diff --git a/theme/gnusocial/images/icons/icon_disfavourite.gif b/theme/gnusocial/images/icons/icon_disfavourite.gif Binary files differnew file mode 100755 index 000000000..2b02ac8a6 --- /dev/null +++ b/theme/gnusocial/images/icons/icon_disfavourite.gif diff --git a/theme/gnusocial/images/icons/icon_favourite.gif b/theme/gnusocial/images/icons/icon_favourite.gif Binary files differnew file mode 100755 index 000000000..716ce3549 --- /dev/null +++ b/theme/gnusocial/images/icons/icon_favourite.gif diff --git a/theme/gnusocial/images/icons/icon_foaf.gif b/theme/gnusocial/images/icons/icon_foaf.gif Binary files differnew file mode 100755 index 000000000..f8f784423 --- /dev/null +++ b/theme/gnusocial/images/icons/icon_foaf.gif diff --git a/theme/gnusocial/images/icons/icon_processing.gif b/theme/gnusocial/images/icons/icon_processing.gif Binary files differnew file mode 100755 index 000000000..d0bce1542 --- /dev/null +++ b/theme/gnusocial/images/icons/icon_processing.gif diff --git a/theme/gnusocial/images/icons/icon_reply.gif b/theme/gnusocial/images/icons/icon_reply.gif Binary files differnew file mode 100755 index 000000000..a4379a70b --- /dev/null +++ b/theme/gnusocial/images/icons/icon_reply.gif diff --git a/theme/gnusocial/images/icons/icon_rss.png b/theme/gnusocial/images/icons/icon_rss.png Binary files differnew file mode 100755 index 000000000..0ccd1ce25 --- /dev/null +++ b/theme/gnusocial/images/icons/icon_rss.png diff --git a/theme/gnusocial/images/icons/icon_trash.gif b/theme/gnusocial/images/icons/icon_trash.gif Binary files differnew file mode 100755 index 000000000..916a332a3 --- /dev/null +++ b/theme/gnusocial/images/icons/icon_trash.gif diff --git a/theme/gnusocial/images/icons/icon_vcard.gif b/theme/gnusocial/images/icons/icon_vcard.gif Binary files differnew file mode 100755 index 000000000..6d52947f3 --- /dev/null +++ b/theme/gnusocial/images/icons/icon_vcard.gif diff --git a/theme/gnusocial/images/icons/twotone/green/arrow-left.gif b/theme/gnusocial/images/icons/twotone/green/arrow-left.gif Binary files differnew file mode 100755 index 000000000..afed19084 --- /dev/null +++ b/theme/gnusocial/images/icons/twotone/green/arrow-left.gif diff --git a/theme/gnusocial/images/icons/twotone/green/arrow-right.gif b/theme/gnusocial/images/icons/twotone/green/arrow-right.gif Binary files differnew file mode 100755 index 000000000..ee1707ed9 --- /dev/null +++ b/theme/gnusocial/images/icons/twotone/green/arrow-right.gif diff --git a/theme/gnusocial/images/icons/twotone/green/edit.gif b/theme/gnusocial/images/icons/twotone/green/edit.gif Binary files differnew file mode 100755 index 000000000..c746aca60 --- /dev/null +++ b/theme/gnusocial/images/icons/twotone/green/edit.gif diff --git a/theme/gnusocial/images/icons/twotone/green/mail.gif b/theme/gnusocial/images/icons/twotone/green/mail.gif Binary files differnew file mode 100755 index 000000000..1084c862f --- /dev/null +++ b/theme/gnusocial/images/icons/twotone/green/mail.gif diff --git a/theme/gnusocial/images/icons/twotone/green/news.gif b/theme/gnusocial/images/icons/twotone/green/news.gif Binary files differnew file mode 100755 index 000000000..712c685dc --- /dev/null +++ b/theme/gnusocial/images/icons/twotone/green/news.gif diff --git a/theme/gnusocial/images/icons/twotone/green/quote.gif b/theme/gnusocial/images/icons/twotone/green/quote.gif Binary files differnew file mode 100755 index 000000000..4ba1f0c03 --- /dev/null +++ b/theme/gnusocial/images/icons/twotone/green/quote.gif diff --git a/theme/gnusocial/images/icons/twotone/green/shield.gif b/theme/gnusocial/images/icons/twotone/green/shield.gif Binary files differnew file mode 100755 index 000000000..419d5ee4b --- /dev/null +++ b/theme/gnusocial/images/icons/twotone/green/shield.gif diff --git a/theme/gnusocial/images/illustrations/illu_arrow-up-01.gif b/theme/gnusocial/images/illustrations/illu_arrow-up-01.gif Binary files differnew file mode 100755 index 000000000..577be1871 --- /dev/null +++ b/theme/gnusocial/images/illustrations/illu_arrow-up-01.gif diff --git a/theme/gnusocial/images/illustrations/illu_clouds-01.gif b/theme/gnusocial/images/illustrations/illu_clouds-01.gif Binary files differnew file mode 100755 index 000000000..41cd622cf --- /dev/null +++ b/theme/gnusocial/images/illustrations/illu_clouds-01.gif diff --git a/theme/gnusocial/images/illustrations/illu_jcrop.gif b/theme/gnusocial/images/illustrations/illu_jcrop.gif Binary files differnew file mode 100755 index 000000000..72ea7ccb5 --- /dev/null +++ b/theme/gnusocial/images/illustrations/illu_jcrop.gif diff --git a/theme/gnusocial/images/illustrations/illu_progress_loading-01.gif b/theme/gnusocial/images/illustrations/illu_progress_loading-01.gif Binary files differnew file mode 100755 index 000000000..82290f483 --- /dev/null +++ b/theme/gnusocial/images/illustrations/illu_progress_loading-01.gif diff --git a/theme/gnusocial/images/illustrations/illu_unicorn-01.png b/theme/gnusocial/images/illustrations/illu_unicorn-01.png Binary files differnew file mode 100755 index 000000000..6cb51b298 --- /dev/null +++ b/theme/gnusocial/images/illustrations/illu_unicorn-01.png diff --git a/theme/gnusocial/index.html b/theme/gnusocial/index.html new file mode 100644 index 000000000..c1a3b7a52 --- /dev/null +++ b/theme/gnusocial/index.html @@ -0,0 +1,213 @@ +<!DOCTYPE html> + <head> + <title>Public timeline - Lorraine Lee — GNU social</title> + + + <link rel="stylesheet" href="/theme/gnusocial/combo.css" type="text/css"> + <style type="text/css"> + #custom-doc { width:76.23em;*width:74.39em;min-width:991px; margin:auto; text-align:left; } + + html, body{padding: 0; margin: 0;} + + body {background-image: url(/theme/gnusocial/bg.png); background-repeat: repeat-x;} + + #hd h1 {margin: 0; line-height: 48px; font-size: 30px; font-weight: bold;} + + #hd h1 a{color: #111; text-decoration: none;} + + #hd dt {display: none;} + + #hd ul {padding: 0; margin: 0; line-height: 48px; position: absolute; top: 0; right: 10px; } + + #hd li {display: inline; list-style: none; margin-left: 12px;} + + #hd {height: 48px; position: relative;} + + #bd {margin-top: 12px;} + + #ft {font-size: 10px; text-align: right; margin-top: 12px} + + form {margin: 0 auto; width: 70%;} + + table {width: 100%;} + + tr, td{border: 0;} + + .update-text{ font-size: 12px; font-weight: bold;} + + .update-icon{ text-align: center;} + + #stream li{list-style: none; position: relative; margin-top: 12px; } + + #stream dl {position: absolute; top: 0; left: 50px;} + + #stream dd {color: #333; font-size: 80%; padding: 0; margin: 0; margin-top: 6px;} + + + #social {border-left: 1px solid #999; border-right: 1px solid #999; padding-left: 10px;} + + #sidebar ul{margin: 0; padding: 0;} + + #sidebar li {list-style: none;} + + #sidebar li a{display: block; width: 180px; padding: 4px;} + + #sidebar li a:hover {background-color: #ececec;} + + .selected {background-color: cyan; width: 180px;} + + #right-nav {background-color: #ececec;} + + #right-nav div {padding: 10px;} + + </style> + + + </head> + <body id="public"> +<div id="custom-doc" class="yui-t2"> + <div id="hd"> + <h1>GNU social</h1> + + <dl id="site_nav_global_primary"> + <dt>Primary site navigation</dt> + <dd> + <ul class="nav"> + <li id="nav_login"> + <a href="http://lorrainelee.co.uk/main/login" title="Login to the site">Login</a> +</li> + <li id="nav_help"> + <a href="http://lorrainelee.co.uk/doc/help" title="Help me!">Help</a> +</li> + <li id="nav_search"> + <a href="http://lorrainelee.co.uk/search/people" title="Search for people or text">Search</a> +</li> +</ul> +</dd> +</dl> + </div> + <div id="bd"> + + <div id="yui-main"> + + <div class="yui-b"> + + <div class="yui-gc"> + + <div class="yui-u first"> + + <dl id="site_notice" class="system_notice"> + <dt>Site notice</dt> + <dd>Powered by <a href="http://www.gnu.org/software/social/">GNU social</a></dd> +</dl> + <div id="anon_notice"><p>This is Lorraine Lee, a <a href="http://en.wikipedia.org/wiki/Micro-blogging">micro-blogging</a> service based on the Free Software <a href="http://status.net/">StatusNet</a> tool.</p> +</div> + <div id="content"> + <h1>Public timeline</h1> + <div id="content_inner"> + <div id="notices_primary"> + <h2>Notices</h2> + <ol class="notices xoxo"> + <li class="hentry notice" id="notice-5"> + <div class="entry-title"> + <span class="vcard author"> + <a href="http://lorrainelee.co.uk/lorraine" class="url" title="Lorraine Lee (lorraine)"> + <img src="http://lorrainelee.co.uk/avatar/3-48-20100722212232.jpeg" class="avatar photo" width="48" height="48" alt="Lorraine Lee"/> + <span class="nickname fn">lorraine</span></a> +</span> + <p class="entry-content">im going to brush my teeth</p> +</div> + <div class="entry-content"> + <a rel="bookmark" class="timestamp" href="http://lorrainelee.co.uk/notice/5"> + <abbr class="published" title="2010-07-22T21:41:40+00:00">about 5 hours ago</abbr> +</a> + <span class="source">from <span class="device">web</span> +</span> + <span class="location">at <a href="http://www.geonames.org/2651292" rel="external"><abbr class="geo" title="50.7500000;-3.7500000">County of Devon, England, United Kingdom of Great Britain and Northern Ireland</abbr></a></span> +</div> +</li> + <li class="hentry notice" id="notice-2"> + <div class="entry-title"> + <span class="vcard author"> + <a href="http://lorrainelee.co.uk/lorraine" class="url" title="Lorraine Lee (lorraine)"> + <img src="http://lorrainelee.co.uk/avatar/3-48-20100722212232.jpeg" class="avatar photo" width="48" height="48" alt="Lorraine Lee"/> + <span class="nickname fn">lorraine</span></a> +</span> + <p class="entry-content">nothing im fine thank you</p> +</div> + <div class="entry-content"> + <a rel="bookmark" class="timestamp" href="http://lorrainelee.co.uk/notice/2"> + <abbr class="published" title="2010-07-22T21:38:18+00:00">about 5 hours ago</abbr> +</a> + <span class="source">from <span class="device">web</span> +</span> + <span class="location">at <a href="http://www.geonames.org/2651292" rel="external"><abbr class="geo" title="50.7500000;-3.7500000">County of Devon, England, United Kingdom of Great Britain and Northern Ireland</abbr></a></span> + <a href="http://lorrainelee.co.uk/conversation/2#notice-2" class="response">in context</a> +</div> +</li> +</ol> +</div> +</div> +</div> + + </div> + + + <div class="yui-u" id="right-nav"> + + + + + + <div id="aside_primary" class="aside"> + <div id="featured_users" class="section"> + <h2>Featured users</h2> +</div> + </div> + + + </div> +</div> + </div> +</div> + + <div class="yui-b" id="sidebar"> + <dl id="site_nav_local_views"> + <dt>Local views</dt> + <dd> + <ul class="nav"> + <li class="current" id="nav_timeline_public"> + <a href="http://lorrainelee.co.uk/" title="Public timeline">Public</a> +</li> + <li id="nav_groups"> + <a href="http://lorrainelee.co.uk/group" title="User groups">Groups</a> +</li> + <li id="nav_recent-tags"> + <a href="http://lorrainelee.co.uk/tags" title="Recent tags">Recent tags</a> +</li> + <li id="nav_timeline_favorited"> + <a href="http://lorrainelee.co.uk/favorited" title="Popular notices">Popular</a> +</li> +</ul> +</dd> +</dl> + </div> + + </div> + <div id="ft"> + + <dl id="licenses"> + <dt id="site_statusnet_license">StatusNet software licence</dt> + <dd><p><strong>Lorraine Lee</strong> is a microblogging service brought to you by <a href="http://www.gnu.org/s/social/">GNU social</a>. It runs the <a href="http://status.net/">StatusNet</a> microblogging software, version 0.9.3, available under the <a href="http://www.fsf.org/licensing/licenses/agpl-3.0.html">GNU Affero General Public Licence</a>.</p> +</dd> + <dt id="site_content_license">Site content license</dt> + <dd id="site_content_license_cc"> + <p> + <img id="license_cc" src="http://i.creativecommons.org/l/by/3.0/80x15.png" alt="Creative Commons Attribution 3.0" width="80" height="15"/> + All Lorraine Lee content and data are available under the <a class="license" rel="external license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> licence.</p> +</dd> +</dl> + </div> + </div> + </body> + </html> diff --git a/theme/gnusocial/logo.png b/theme/gnusocial/logo.png Binary files differnew file mode 100755 index 000000000..cf1839194 --- /dev/null +++ b/theme/gnusocial/logo.png diff --git a/tpl/social.php b/tpl/social.php new file mode 100644 index 000000000..20acbe1b7 --- /dev/null +++ b/tpl/social.php @@ -0,0 +1,53 @@ +<!DOCTYPE html> +<html> + <head> + <title><?php echo section('title'); ?> — GNU social</title> + + + <link rel="stylesheet" href="/theme/gnusocial/css/combo.css" type="text/css"> + <link rel="stylesheet" href="/theme/gnusocial/css/social.css" type="text/css"> + <?php echo section('scripts'); ?> + <?php echo section('search'); ?> + <?php echo section('feeds'); ?> + <?php echo section('description'); ?> + <?php echo section('head'); ?> + </head> + <body id="<?php echo section('action'); ?>"> + <div id="custom-doc" class="yui-t2"> + <div id="hd"> + <h1><a href="/">GNU social</a></h1> + <?php echo section('nav'); ?> + </div> + <div id="bd"> + <div id="yui-main"> + <div class="yui-b" id="social"> + <div class="yui-gc"> + <div class="yui-u first"> + <?php echo section('noticeform'); ?> + <?php echo section('bodytext'); ?> + + </div> + + + <div class="yui-u" id="right-nav"> + <div id="aside_primary" class="aside"> + <?php echo section('subscriptions'); ?> + <?php echo section('subscribers'); ?> + <?php echo section('groups'); ?> + <?php echo section('cloud'); ?> + <?php echo section('popular'); ?> + </div> + </div> + </div> + </div> + </div> + <div class="yui-b" id="sidebar"> + <?php echo section('localnav'); ?> + </div> + </div> + <div id="ft"> + <p>This is GNU social.</p> + </div> + </div> + </body> +</html> |