Merge remote-tracking branch 'mainline/1.0.x' into people_tags_rebase

Conflicts:
	lib/profileblock.php
	theme/default/css/display.css
This commit is contained in:
Shashi Gowda 2011-04-09 21:57:45 +05:30
commit f47027abbe
206 changed files with 314 additions and 17667 deletions

View File

@ -1297,3 +1297,19 @@ StartDefaultLocalNav: When showing the default local nav
EndDefaultLocalNav: When showing the default local nav EndDefaultLocalNav: When showing the default local nav
- $menu: the menu - $menu: the menu
- $user: current user - $user: current user
StartShowAccountProfileBlock: When showing the profile block for an account
- $out: XMLOutputter to append custom output
- $profile: the profile being shown
EndShowAccountProfileBlock: After showing the profile block for an account
- $out: XMLOutputter to append custom output
- $profile: the profile being shown
StartShowGroupProfileBlock: When showing the profile block for a group
- $out: XMLOutputter to append custom output
- $profile: the profile being shown
EndShowGroupProfileBlock: After showing showing the profile block for a group
- $out: XMLOutputter to append custom output
- $group: the group being shown

View File

@ -47,8 +47,11 @@ require_once INSTALLDIR.'/lib/noticelist.php';
*/ */
class ConversationAction extends Action class ConversationAction extends Action
{ {
var $id = null; var $id = null;
var $page = null; var $page = null;
var $notices = null;
const MAX_NOTICES = 500;
/** /**
* Initialization. * Initialization.
@ -69,6 +72,19 @@ class ConversationAction extends Action
if (empty($this->page)) { if (empty($this->page)) {
$this->page = 1; $this->page = 1;
} }
$cur = common_current_user();
if (empty($cur)) {
$profile = null;
} else {
$profile = $cur->getProfile();
}
$stream = new ConversationNoticeStream($this->id, $profile);
$this->notices = $stream->getNotices(0, self::MAX_NOTICES, null, null);
return true; return true;
} }
@ -106,11 +122,9 @@ class ConversationAction extends Action
*/ */
function showContent() function showContent()
{ {
$notices = Notice::conversationStream($this->id, null, null); $tnl = new ThreadedNoticeList($this->notices, $this);
$ct = new ConversationTree($notices, $this); $cnt = $tnl->show();
$cnt = $ct->show();
} }
function isReadOnly() function isReadOnly()
@ -118,173 +132,3 @@ class ConversationAction extends Action
return true; return true;
} }
} }
/**
* Conversation tree
*
* The widget class for displaying a hierarchical list of notices.
*
* @category Widget
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
* @link http://status.net/
*/
class ConversationTree extends NoticeList
{
var $tree = null;
var $table = null;
/**
* Show the tree of notices
*
* @return void
*/
function show()
{
$cnt = $this->_buildTree();
$this->out->elementStart('div', array('id' =>'notices_primary'));
// TRANS: Header on conversation page. Hidden by default (h2).
$this->out->element('h2', null, _('Notices'));
$this->out->elementStart('ol', array('class' => 'notices xoxo'));
if (array_key_exists('root', $this->tree)) {
$rootid = $this->tree['root'][0];
$this->showNoticePlus($rootid);
}
$this->out->elementEnd('ol');
$this->out->elementEnd('div');
return $cnt;
}
function _buildTree()
{
$cnt = 0;
$this->tree = array();
$this->table = array();
while ($this->notice->fetch()) {
$cnt++;
$id = $this->notice->id;
$notice = clone($this->notice);
$this->table[$id] = $notice;
if (is_null($notice->reply_to)) {
$this->tree['root'] = array($notice->id);
} else if (array_key_exists($notice->reply_to, $this->tree)) {
$this->tree[$notice->reply_to][] = $notice->id;
} else {
$this->tree[$notice->reply_to] = array($notice->id);
}
}
return $cnt;
}
/**
* Shows a notice plus its list of children.
*
* @param integer $id ID of the notice to show
*
* @return void
*/
function showNoticePlus($id)
{
$notice = $this->table[$id];
// We take responsibility for doing the li
$this->out->elementStart('li', array('class' => 'hentry notice',
'id' => 'notice-' . $id));
$item = $this->newListItem($notice);
$item->show();
if (array_key_exists($id, $this->tree)) {
$children = $this->tree[$id];
$this->out->elementStart('ol', array('class' => 'notices'));
sort($children);
foreach ($children as $child) {
$this->showNoticePlus($child);
}
$this->out->elementEnd('ol');
}
$this->out->elementEnd('li');
}
/**
* Override parent class to return our preferred item.
*
* @param Notice $notice Notice to display
*
* @return NoticeListItem a list item to show
*/
function newListItem($notice)
{
return new ConversationTreeItem($notice, $this->out);
}
}
/**
* Conversation tree list item
*
* Special class of NoticeListItem for use inside conversation trees.
*
* @category Widget
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
* @link http://status.net/
*/
class ConversationTreeItem extends NoticeListItem
{
/**
* start a single notice.
*
* The default creates the <li>; we skip, since the ConversationTree
* takes care of that.
*
* @return void
*/
function showStart()
{
return;
}
/**
* finish the notice
*
* The default closes the <li>; we skip, since the ConversationTree
* takes care of that.
*
* @return void
*/
function showEnd()
{
return;
}
/**
* show link to notice conversation page
*
* Since we're only used on the conversation page, we skip this
*
* @return void
*/
function showContext()
{
return;
}
}

View File

@ -66,9 +66,7 @@ class ConversationRepliesAction extends ConversationAction
*/ */
function showContent() function showContent()
{ {
$notices = Notice::conversationStream($this->id, null, null); $ct = new FullThreadedNoticeList($this->notices, $this);
$ct = new FullThreadedNoticeList($notices, $this);
$cnt = $ct->show(); $cnt = $ct->show();
} }

View File

@ -96,17 +96,21 @@ class Notice extends Memcached_DataObject
const GROUP_SCOPE = 4; const GROUP_SCOPE = 4;
const FOLLOWER_SCOPE = 8; const FOLLOWER_SCOPE = 8;
protected $_profile = -1;
function getProfile() function getProfile()
{ {
$profile = Profile::staticGet('id', $this->profile_id); if ($this->_profile == -1) {
$this->_profile = Profile::staticGet('id', $this->profile_id);
if (empty($profile)) { if (empty($this->_profile)) {
// TRANS: Server exception thrown when a user profile for a notice cannot be found. // TRANS: Server exception thrown when a user profile for a notice cannot be found.
// TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number). // TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
throw new ServerException(sprintf(_('No such profile (%1$d) for notice (%2$d).'), $this->profile_id, $this->id)); throw new ServerException(sprintf(_('No such profile (%1$d) for notice (%2$d).'), $this->profile_id, $this->id));
}
} }
return $profile; return $this->_profile;
} }
function delete() function delete()

View File

@ -52,9 +52,15 @@ class Profile extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */ /* the code above is auto generated do not remove the tag below */
###END_AUTOCODE ###END_AUTOCODE
protected $_user = -1; // Uninitialized value distinct from null
function getUser() function getUser()
{ {
return User::staticGet('id', $this->id); if ($this->_user == -1) {
$this->_user = User::staticGet('id', $this->id);
}
return $this->_user;
} }
function getAvatar($width, $height=null) function getAvatar($width, $height=null)
@ -667,34 +673,6 @@ class Profile extends Memcached_DataObject
function hasFave($notice) function hasFave($notice)
{ {
$cache = Cache::instance();
// XXX: Kind of a hack.
if (!empty($cache)) {
// This is the stream of favorite notices, in rev chron
// order. This forces it into cache.
$ids = Fave::idStream($this->id, 0, CachingNoticeStream::CACHE_WINDOW);
// If it's in the list, then it's a fave
if (in_array($notice->id, $ids)) {
return true;
}
// If we're not past the end of the cache window,
// then the cache has all available faves, so this one
// is not a fave.
if (count($ids) < CachingNoticeStream::CACHE_WINDOW) {
return false;
}
// Otherwise, cache doesn't have all faves;
// fall through to the default
}
$fave = Fave::pkeyGet(array('user_id' => $this->id, $fave = Fave::pkeyGet(array('user_id' => $this->id,
'notice_id' => $notice->id)); 'notice_id' => $notice->id));
return ((is_null($fave)) ? false : true); return ((is_null($fave)) ? false : true);

View File

@ -73,16 +73,21 @@ class User extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */ /* the code above is auto generated do not remove the tag below */
###END_AUTOCODE ###END_AUTOCODE
protected $_profile = -1;
/** /**
* @return Profile * @return Profile
*/ */
function getProfile() function getProfile()
{ {
$profile = Profile::staticGet('id', $this->id); if ($this->_profile == -1) { // invalid but distinct from null
if (empty($profile)) { $this->_profile = Profile::staticGet('id', $this->id);
throw new UserNoProfileException($this); if (empty($this->_profile)) {
throw new UserNoProfileException($this);
}
} }
return $profile;
return $this->_profile;
} }
function isSubscribed($other) function isSubscribed($other)

View File

@ -307,4 +307,14 @@ class AccountProfileBlock extends ProfileBlock
// TRANS: Link text for link that will subscribe to a remote profile. // TRANS: Link text for link that will subscribe to a remote profile.
_m('BUTTON','Subscribe')); _m('BUTTON','Subscribe'));
} }
function show()
{
$this->out->elementStart('div', 'account_profile_block section');
if (Event::handle('StartShowAccountProfileBlock', array($this->out, $this->profile))) {
parent::show();
Event::handle('EndShowAccountProfileBlock', array($this->out, $this->profile));
}
$this->out->elementEnd('div');
}
} }

View File

@ -46,10 +46,11 @@ if (!defined('STATUSNET')) {
*/ */
class ConversationNoticeStream extends ScopingNoticeStream class ConversationNoticeStream extends ScopingNoticeStream
{ {
function __construct($id) function __construct($id, $profile = null)
{ {
parent::__construct(new CachingNoticeStream(new RawConversationNoticeStream($id), parent::__construct(new CachingNoticeStream(new RawConversationNoticeStream($id),
'notice:conversation_ids:'.$id)); 'notice:conversation_ids:'.$id),
$profile);
} }
} }
@ -98,9 +99,6 @@ class RawConversationNoticeStream extends NoticeStream
} }
} }
$notice->free();
$notice = NULL;
return $ids; return $ids;
} }
} }

View File

@ -317,7 +317,9 @@ $default =
'QnA' => null, 'QnA' => null,
'SearchSub' => null, 'SearchSub' => null,
'TagSub' => null, 'TagSub' => null,
'OpenID' => null), 'OpenID' => null,
'Directory' => null,
'ExtendedProfile' => null),
'locale_path' => false, // Set to a path to use *instead of* each plugin's own locale subdirectories 'locale_path' => false, // Set to a path to use *instead of* each plugin's own locale subdirectories
'server' => null, 'server' => null,
'sslserver' => null, 'sslserver' => null,

View File

@ -123,4 +123,14 @@ class GroupProfileBlock extends ProfileBlock
$this->out->elementEnd('ul'); $this->out->elementEnd('ul');
$this->out->elementEnd('div'); $this->out->elementEnd('div');
} }
function show()
{
$this->out->elementStart('div', 'group_profile_block section');
if (Event::handle('StartShowGroupProfileBlock', array($this->out, $this->group))) {
parent::show();
Event::handle('EndShowGroupProfileBlock', array($this->out, $this->group));
}
$this->out->elementEnd('div');
}
} }

View File

@ -56,16 +56,33 @@ abstract class ProfileBlock extends Widget
function show() function show()
{ {
$this->out->elementStart('div', 'profile_block section'); $this->showActions();
$this->showAvatar();
$this->showName();
$this->showLocation();
$this->showHomepage();
$this->showDescription();
$this->showTags();
}
function showAvatar()
{
$size = $this->avatarSize(); $size = $this->avatarSize();
$this->out->element('img', array('src' => $this->avatar(), $this->out->element(
'class' => 'profile_block_avatar', 'img',
'alt' => $this->name(), array(
'width' => $size, 'src' => $this->avatar(),
'height' => $size)); 'class' => 'ur_face',
'alt' => $this->name(),
'width' => $size,
'height' => $size
)
);
}
function showName()
{
$name = $this->name(); $name = $this->name();
if (!empty($name)) { if (!empty($name)) {
@ -79,31 +96,35 @@ abstract class ProfileBlock extends Widget
} }
$this->out->elementEnd('p'); $this->out->elementEnd('p');
} }
}
function showDescription()
{
$description = $this->description();
if (!empty($description)) {
$this->out->element(
'p',
'profile_block_description',
$description
);
}
}
function showLocation()
{
$location = $this->location(); $location = $this->location();
if (!empty($location)) { if (!empty($location)) {
$this->out->element('p', 'profile_block_location', $location); $this->out->element('p', 'profile_block_location', $location);
} }
}
$homepage = $this->homepage(); function showHomepage()
{
if (!empty($homepage)) { if (!empty($homepage)) {
$this->out->element('a', 'profile_block_homepage', $homepage); $this->out->element('a', 'profile_block_homepage', $homepage);
} }
$description = $this->description();
if (!empty($description)) {
$this->out->element('p',
'profile_block_description',
$description);
}
$this->showTags();
$this->showActions();
$this->out->elementEnd('div');
} }
function avatarSize() function avatarSize()

View File

@ -329,6 +329,11 @@ class EventPlugin extends MicroappPlugin
{ {
$rsvp = RSVP::fromNotice($notice); $rsvp = RSVP::fromNotice($notice);
if (empty($rsvp)) {
$out->element('p', null, _('Deleted.'));
return;
}
$out->elementStart('div', 'rsvp'); $out->elementStart('div', 'rsvp');
$out->raw($rsvp->asHTML()); $out->raw($rsvp->asHTML());
$out->elementEnd('div'); $out->elementEnd('div');
@ -340,8 +345,10 @@ class EventPlugin extends MicroappPlugin
$profile = $notice->getProfile(); $profile = $notice->getProfile();
$event = Happening::fromNotice($notice); $event = Happening::fromNotice($notice);
assert(!empty($event)); if (empty($event)) {
assert(!empty($profile)); $out->element('p', null, _('Deleted.'));
return;
}
$out->elementStart('div', 'vevent event'); // VEVENT IN $out->elementStart('div', 'vevent event'); // VEVENT IN

View File

@ -115,13 +115,12 @@ class ExtendedProfilePlugin extends Plugin
return true; return true;
} }
function onStartProfilePageActionsSection(HTMLOutputter $out, Profile $profile) { function onEndShowAccountProfileBlock(HTMLOutputter $out, Profile $profile) {
$user = User::staticGet('id', $profile->id); $user = User::staticGet('id', $profile->id);
if ($user) { if ($user) {
$url = common_local_url('profiledetail', array('nickname' => $user->nickname)); $url = common_local_url('profiledetail', array('nickname' => $user->nickname));
// TRANS: Link text on user profile page leading to extended profile page. // TRANS: Link text on user profile page leading to extended profile page.
$out->element('a', array('href' => $url, 'class' => 'profiledetail'), _m('More details...')); $out->element('a', array('href' => $url, 'class' => 'profiledetail'), _m('More details...'));
} }
return true;
} }
} }

View File

@ -788,16 +788,16 @@ class Facebookclient
$subject = _m('Your Facebook connection has been removed'); $subject = _m('Your Facebook connection has been removed');
// TRANS: E-mail body. %1$s is a username, %2$s is the StatusNet sitename. // TRANS: E-mail body. %1$s is a username, %2$s is the StatusNet sitename.
$msg = _m('Hi %1$s,\n\n'. $msg = _m("Hi %1\$s,\n\n".
'We are sorry to inform you we are unable to publish your notice to\n'. "We are sorry to inform you we are unable to publish your notice to\n".
'Facebook, and have removed the connection between your %2$s account and\n'. "Facebook, and have removed the connection between your %2\$s account and\n".
'Facebook.\n\n'. "Facebook.\n\n".
'This may have happened because you have removed permission for %2$s\n'. "This may have happened because you have removed permission for %2\$s\n".
'to post on your behalf, or perhaps you have deactivated your Facebook\n'. "to post on your behalf, or perhaps you have deactivated your Facebook\n".
'account. You can reconnect your %2$s account to Facebook at any time by\n'. "account. You can reconnect your %2\$s account to Facebook at any time by\n".
'logging in with Facebook again.\n\n'. "logging in with Facebook again.\n\n".
'Sincerely,\n\n'. "Sincerely,\n\n".
'%2$s\n'); "%2\$s\n");
$body = sprintf( $body = sprintf(
$msg, $msg,
@ -845,13 +845,13 @@ class Facebookclient
// TRANS: E-mail body. %1$s is a username, // TRANS: E-mail body. %1$s is a username,
// TRANS: %2$s is the StatusNet sitename, %3$s is the site contact e-mail address. // TRANS: %2$s is the StatusNet sitename, %3$s is the site contact e-mail address.
$msg = _m('Hi %1$s,\n\n'. $msg = _m("Hi %1\$s,\n\n".
'We have noticed you have deauthorized the Facebook connection for your\n'. "We have noticed you have deauthorized the Facebook connection for your\n".
'%2$s account. You have not set a password for your %2$s account yet, so\n'. "%2\$s account. You have not set a password for your %2\$s account yet, so\n".
'you will not be able to login. If you wish to continue using your %2$s\n'. "you will not be able to login. If you wish to continue using your %2\$s\n".
'account, please contact the site administrator (%3$s) to set a password.\n\n'. "account, please contact the site administrator (%3\$s) to set a password.\n\n".
'Sincerely,\n\n'. "Sincerely,\n\n".
'%2$s\n'); "%2\$s\n");
$body = sprintf( $body = sprintf(
$msg, $msg,

View File

@ -1,11 +1,11 @@
<?php <?php
/* /*
StatusNet Plugin: 0.9 * StatusNet Plugin: 0.9
Plugin Name: FirePHP * Plugin Name: FirePHP
Description: Sends StatusNet log output to FirePHP * Description: Sends StatusNet log output to FirePHP
Version: 0.1 * Version: 0.1
Author: Craig Andrews <candrews@integralblue.com> * Author: Craig Andrews <candrews@integralblue.com>
Author URI: http://candrews.integralblue.com/ * Author URI: http://candrews.integralblue.com/
*/ */
/* /*
@ -65,6 +65,7 @@ class FirePHPPlugin extends Plugin
'author' => 'Craig Andrews', 'author' => 'Craig Andrews',
'homepage' => 'http://status.net/wiki/Plugin:FirePHP', 'homepage' => 'http://status.net/wiki/Plugin:FirePHP',
'rawdescription' => 'rawdescription' =>
// TRANS: Plugin description.
_m('The FirePHP plugin writes StatusNet\'s log output to FirePHP.')); _m('The FirePHP plugin writes StatusNet\'s log output to FirePHP.'));
return true; return true;
} }

View File

@ -1,8 +1,9 @@
The FirePHP plugin writes StatusNet's log output to FirePHP. The FirePHP plugin writes StatusNet's log output to FirePHP.
Using FirePHP on production sites can expose sensitive information. Using FirePHP on production sites can expose sensitive information.
You must protect the security of your application by disabling FirePHP
logging on your live site. You must protect the security of your application by disabling FirePHP logging
on your live site!
Installation Installation
============ ============
@ -18,4 +19,3 @@ Example
======= =======
addPlugin('FirePHP', array()); addPlugin('FirePHP', array());

View File

@ -59,7 +59,6 @@ class FollowEveryonePlugin extends Plugin
* @param User &$newUser The new user * @param User &$newUser The new user
* *
* @return boolean hook value * @return boolean hook value
*
*/ */
function onEndUserRegister(&$newProfile, &$newUser) function onEndUserRegister(&$newProfile, &$newUser)
{ {
@ -115,7 +114,6 @@ class FollowEveryonePlugin extends Plugin
$schema = Schema::get(); $schema = Schema::get();
// For storing user-submitted flags on profiles // For storing user-submitted flags on profiles
$schema->ensureTable('user_followeveryone_prefs', $schema->ensureTable('user_followeveryone_prefs',
array(new ColumnDef('user_id', 'integer', null, array(new ColumnDef('user_id', 'integer', null,
true, 'PRI'), true, 'PRI'),
@ -200,6 +198,7 @@ class FollowEveryonePlugin extends Plugin
'author' => 'Evan Prodromou', 'author' => 'Evan Prodromou',
'homepage' => 'http://status.net/wiki/Plugin:FollowEveryone', 'homepage' => 'http://status.net/wiki/Plugin:FollowEveryone',
'rawdescription' => 'rawdescription' =>
// TRANS: Plugin description.
_m('New users follow everyone at registration and are followed in return.')); _m('New users follow everyone at registration and are followed in return.'));
return true; return true;
} }

View File

@ -33,11 +33,11 @@ class ForceGroupPlugin extends Plugin
* List by local nickname. * List by local nickname.
*/ */
public $post = array(); public $post = array();
/** /**
* New user registrations will automatically join these groups on * New user registrations will automatically join these groups on
* registration. They're not prevented from leaving, however. * registration. They're not prevented from leaving, however.
* *
* List by local nickname. * List by local nickname.
*/ */
public $join = array(); public $join = array();

View File

@ -121,6 +121,7 @@ class GeoURLPlugin extends Plugin
'author' => 'Evan Prodromou', 'author' => 'Evan Prodromou',
'homepage' => 'http://status.net/wiki/Plugin:GeoURL', 'homepage' => 'http://status.net/wiki/Plugin:GeoURL',
'rawdescription' => 'rawdescription' =>
// TRANS: Plugin description.
_m('Ping <a href="http://geourl.org/">GeoURL</a> when '. _m('Ping <a href="http://geourl.org/">GeoURL</a> when '.
'new geolocation-enhanced notices are posted.')); 'new geolocation-enhanced notices are posted.'));
return true; return true;

View File

@ -435,7 +435,8 @@ class GeonamesPlugin extends Plugin
function getGeonames($method, $params) function getGeonames($method, $params)
{ {
if ($this->lastTimeout && (time() - $this->lastTimeout < $this->timeoutWindow)) { if ($this->lastTimeout && (time() - $this->lastTimeout < $this->timeoutWindow)) {
throw new Exception("skipping due to recent web service timeout"); // TRANS: Exception thrown when a geo names service is not used because of a recent timeout.
throw new Exception(_m('Skipping due to recent web service timeout.'));
} }
$client = HTTPClient::start(); $client = HTTPClient::start();
@ -451,13 +452,16 @@ class GeonamesPlugin extends Plugin
} }
if (!$result->isOk()) { if (!$result->isOk()) {
throw new Exception("HTTP error code " . $result->getStatus()); // TRANS: Exception thrown when a geo names service does not return an expected response.
// TRANS: %s is an HTTP error code.
throw new Exception(sprintf(_m('HTTP error code %s.'),$result->getStatus()));
} }
$body = $result->getBody(); $body = $result->getBody();
if (empty($body)) { if (empty($body)) {
throw new Exception("Empty HTTP body in response"); // TRANS: Exception thrown when a geo names service returns an empty body.
throw new Exception(_m('Empty HTTP body in response.'));
} }
// This will throw an exception if the XML is mal-formed // This will throw an exception if the XML is mal-formed
@ -473,7 +477,9 @@ class GeonamesPlugin extends Plugin
} }
if (isset($document->status)) { if (isset($document->status)) {
throw new Exception("Error #".$document->status['value']." ('".$document->status['message']."')"); // TRANS: Exception thrown when a geo names service return a specific error number and error text.
// TRANS: %1$s is an error code, %2$s is an error message.
throw new Exception(sprintf(_m('Error #%1$s ("%2$s").'),$document->status['value'],$document->status['message']));
} }
// Array of elements, >0 elements // Array of elements, >0 elements
@ -488,6 +494,7 @@ class GeonamesPlugin extends Plugin
'author' => 'Evan Prodromou', 'author' => 'Evan Prodromou',
'homepage' => 'http://status.net/wiki/Plugin:Geonames', 'homepage' => 'http://status.net/wiki/Plugin:Geonames',
'rawdescription' => 'rawdescription' =>
// TRANS: Plugin description.
_m('Uses <a href="http://geonames.org/">Geonames</a> service to get human-readable '. _m('Uses <a href="http://geonames.org/">Geonames</a> service to get human-readable '.
'names for locations based on user-provided lat/long pairs.')); 'names for locations based on user-provided lat/long pairs.'));
return true; return true;

View File

@ -77,6 +77,7 @@ class GoogleAnalyticsPlugin extends Plugin
'author' => 'Evan Prodromou', 'author' => 'Evan Prodromou',
'homepage' => 'http://status.net/wiki/Plugin:GoogleAnalytics', 'homepage' => 'http://status.net/wiki/Plugin:GoogleAnalytics',
'rawdescription' => 'rawdescription' =>
// TRANS: Plugin description.
_m('Use <a href="http://www.google.com/analytics/">Google Analytics</a>'. _m('Use <a href="http://www.google.com/analytics/">Google Analytics</a>'.
' to track web access.')); ' to track web access.'));
return true; return true;

View File

@ -57,15 +57,18 @@ class GravatarPlugin extends Plugin
'action' => 'action' =>
common_local_url('avatarsettings'))); common_local_url('avatarsettings')));
$action->elementStart('fieldset', array('id' => 'settings_gravatar_add')); $action->elementStart('fieldset', array('id' => 'settings_gravatar_add'));
// TRANS: Fieldset legend. Gravatar is an avatar service.
$action->element('legend', null, _m('Set Gravatar')); $action->element('legend', null, _m('Set Gravatar'));
$action->hidden('token', common_session_token()); $action->hidden('token', common_session_token());
$action->element('p', 'form_guide', $action->element('p', 'form_guide',
// TRANS: Form guide. Gravatar is an avatar service.
_m('If you want to use your Gravatar image, click "Add".')); _m('If you want to use your Gravatar image, click "Add".'));
$action->element('input', array('type' => 'submit', $action->element('input', array('type' => 'submit',
'id' => 'settings_gravatar_add_action-submit', 'id' => 'settings_gravatar_add_action-submit',
'name' => 'add', 'name' => 'add',
'class' => 'submit', 'class' => 'submit',
'value' => _m('Add'))); // TRANS: Button text to add a Gravatar. Gravatar is an avatar service.
'value' => _m('BUTTON','Add')));
$action->elementEnd('fieldset'); $action->elementEnd('fieldset');
$action->elementEnd('form'); $action->elementEnd('form');
} elseif($hasGravatar) { } elseif($hasGravatar) {
@ -75,19 +78,23 @@ class GravatarPlugin extends Plugin
'action' => 'action' =>
common_local_url('avatarsettings'))); common_local_url('avatarsettings')));
$action->elementStart('fieldset', array('id' => 'settings_gravatar_remove')); $action->elementStart('fieldset', array('id' => 'settings_gravatar_remove'));
// TRANS: Fieldset legend. Gravatar is an avatar service.
$action->element('legend', null, _m('Remove Gravatar')); $action->element('legend', null, _m('Remove Gravatar'));
$action->hidden('token', common_session_token()); $action->hidden('token', common_session_token());
$action->element('p', 'form_guide', $action->element('p', 'form_guide',
// TRANS: Form guide. Gravatar is an avatar service.
_m('If you want to remove your Gravatar image, click "Remove".')); _m('If you want to remove your Gravatar image, click "Remove".'));
$action->element('input', array('type' => 'submit', $action->element('input', array('type' => 'submit',
'id' => 'settings_gravatar_remove_action-submit', 'id' => 'settings_gravatar_remove_action-submit',
'name' => 'remove', 'name' => 'remove',
'class' => 'submit', 'class' => 'submit',
// TRANS: Button text to remove a Gravatar. Gravatar is an avatar service.
'value' => _m('Remove'))); 'value' => _m('Remove')));
$action->elementEnd('fieldset'); $action->elementEnd('fieldset');
$action->elementEnd('form'); $action->elementEnd('form');
} else { } else {
$action->element('p', 'form_guide', $action->element('p', 'form_guide',
// TRANS: Form guide. Gravatar is an avatar service.
_m('To use a Gravatar first enter in an email address.')); _m('To use a Gravatar first enter in an email address.'));
} }
} }
@ -137,6 +144,7 @@ class GravatarPlugin extends Plugin
$cur = common_current_user(); $cur = common_current_user();
if(empty($cur->email)) { if(empty($cur->email)) {
// TRANS: Message displayed when no e-mail address was set when saving Gravatar setting. Gravatar is an avatar service.
return array('message' => _m('You do not have an email address set in your profile.'), return array('message' => _m('You do not have an email address set in your profile.'),
'success' => false); 'success' => false);
} }
@ -155,10 +163,12 @@ class GravatarPlugin extends Plugin
$gravatar->created = DB_DataObject_Cast::dateTime(); # current time $gravatar->created = DB_DataObject_Cast::dateTime(); # current time
if (!$gravatar->insert()) { if (!$gravatar->insert()) {
// TRANS: Message displayed when saving Gravatar setting fails. Gravatar is an avatar service.
return array('message' => _m('Failed to save Gravatar to the database.'), return array('message' => _m('Failed to save Gravatar to the database.'),
'success' => false); 'success' => false);
} }
} }
// TRANS: Message displayed when Gravatar was added. Gravatar is an avatar service.
return array('message' => _m('Gravatar added.'), return array('message' => _m('Gravatar added.'),
'success' => true); 'success' => true);
} }
@ -177,6 +187,7 @@ class GravatarPlugin extends Plugin
$avatar = $profile->getAvatar(AVATAR_MINI_SIZE); $avatar = $profile->getAvatar(AVATAR_MINI_SIZE);
if($avatar) $avatar->delete(); if($avatar) $avatar->delete();
// TRANS: Message displayed when Gravatar was removed. Gravatar is an avatar service.
return array('message' => _m('Gravatar removed.'), return array('message' => _m('Gravatar removed.'),
'success' => true); 'success' => true);
} }
@ -197,6 +208,7 @@ class GravatarPlugin extends Plugin
'author' => 'Eric Helgeson', 'author' => 'Eric Helgeson',
'homepage' => 'http://status.net/wiki/Plugin:Gravatar', 'homepage' => 'http://status.net/wiki/Plugin:Gravatar',
'rawdescription' => 'rawdescription' =>
// TRANS: Plugin decsription.
_m('The Gravatar plugin allows users to use their <a href="http://www.gravatar.com/">Gravatar</a> with StatusNet.')); _m('The Gravatar plugin allows users to use their <a href="http://www.gravatar.com/">Gravatar</a> with StatusNet.'));
return true; return true;

View File

@ -1,13 +1,12 @@
GravatarPlugin 0.1 GravatarPlugin 0.1
About About:
This will allow users to use their Gravatar Avatar with your StatusNet install. This will allow users to use their Gravatar Avatar with your StatusNet install.
Configuration Configuration:
add this to your config.php: add this to your config.php:
addPlugin('Gravatar', array()); addPlugin('Gravatar', array());
ToDo: To do:
Site default all on for gravatar by default Site default all on for gravatar by default
Migration Script Migration Script
Localize

View File

@ -46,7 +46,6 @@ if (!defined('STATUSNET')) {
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
class GroupPrivateMessagePlugin extends Plugin class GroupPrivateMessagePlugin extends Plugin
{ {
/** /**
@ -57,7 +56,6 @@ class GroupPrivateMessagePlugin extends Plugin
* *
* @return boolean hook value * @return boolean hook value
*/ */
function onCheckSchema() function onCheckSchema()
{ {
$schema = Schema::get(); $schema = Schema::get();
@ -78,7 +76,7 @@ class GroupPrivateMessagePlugin extends Plugin
'datetime'), 'datetime'),
new ColumnDef('modified', new ColumnDef('modified',
'timestamp'))); 'timestamp')));
$schema->ensureTable('group_message', $schema->ensureTable('group_message',
array(new ColumnDef('id', array(new ColumnDef('id',
'char', 'char',
@ -136,7 +134,6 @@ class GroupPrivateMessagePlugin extends Plugin
* *
* @return boolean hook value * @return boolean hook value
*/ */
function onAutoload($cls) function onAutoload($cls)
{ {
$dir = dirname(__FILE__); $dir = dirname(__FILE__);
@ -171,7 +168,6 @@ class GroupPrivateMessagePlugin extends Plugin
* *
* @return boolean hook value * @return boolean hook value
*/ */
function onRouterInitialized($m) function onRouterInitialized($m)
{ {
$m->connect('group/:nickname/inbox', $m->connect('group/:nickname/inbox',
@ -199,7 +195,6 @@ class GroupPrivateMessagePlugin extends Plugin
* *
* @see Action * @see Action
*/ */
function onEndGroupGroupNav($groupnav) function onEndGroupGroupNav($groupnav)
{ {
$action = $groupnav->action; $action = $groupnav->action;
@ -207,7 +202,9 @@ class GroupPrivateMessagePlugin extends Plugin
$action->menuItem(common_local_url('groupinbox', $action->menuItem(common_local_url('groupinbox',
array('nickname' => $group->nickname)), array('nickname' => $group->nickname)),
// TRANS: Menu item in group page.
_m('MENU','Inbox'), _m('MENU','Inbox'),
// TRANS: Menu title in group page.
_m('Private messages for this group.'), _m('Private messages for this group.'),
$action->trimmed('action') == 'groupinbox', $action->trimmed('action') == 'groupinbox',
'nav_group_inbox'); 'nav_group_inbox');
@ -221,7 +218,6 @@ class GroupPrivateMessagePlugin extends Plugin
* *
* @result boolean hook value * @result boolean hook value
*/ */
function onEndGroupSave($group) function onEndGroupSave($group)
{ {
$gps = new Group_privacy_settings(); $gps = new Group_privacy_settings();
@ -244,7 +240,6 @@ class GroupPrivateMessagePlugin extends Plugin
* *
* @param GroupEditForm $form form being shown * @param GroupEditForm $form form being shown
*/ */
function onEndGroupEditFormData($form) function onEndGroupEditFormData($form)
{ {
$gps = null; $gps = null;
@ -255,20 +250,30 @@ class GroupPrivateMessagePlugin extends Plugin
$form->out->elementStart('li'); $form->out->elementStart('li');
$form->out->dropdown('allow_privacy', $form->out->dropdown('allow_privacy',
// TRANS: Dropdown label in group settings page for if group allows private messages.
_m('Private messages'), _m('Private messages'),
// TRANS: Dropdown option in group settings page for allowing private messages.
array(Group_privacy_settings::SOMETIMES => _m('Sometimes'), array(Group_privacy_settings::SOMETIMES => _m('Sometimes'),
// TRANS: Dropdown option in group settings page for allowing private messages.
Group_privacy_settings::ALWAYS => _m('Always'), Group_privacy_settings::ALWAYS => _m('Always'),
// TRANS: Dropdown option in group settings page for allowing private messages.
Group_privacy_settings::NEVER => _m('Never')), Group_privacy_settings::NEVER => _m('Never')),
// TRANS: Dropdown title in group settings page for if group allows private messages.
_m('Whether to allow private messages to this group.'), _m('Whether to allow private messages to this group.'),
false, false,
(empty($gps)) ? Group_privacy_settings::SOMETIMES : $gps->allow_privacy); (empty($gps)) ? Group_privacy_settings::SOMETIMES : $gps->allow_privacy);
$form->out->elementEnd('li'); $form->out->elementEnd('li');
$form->out->elementStart('li'); $form->out->elementStart('li');
$form->out->dropdown('allow_sender', $form->out->dropdown('allow_sender',
// TRANS: Dropdown label in group settings page for who can send private messages to the group.
_m('Private senders'), _m('Private senders'),
// TRANS: Dropdown option in group settings page for who can send private messages.
array(Group_privacy_settings::EVERYONE => _m('Everyone'), array(Group_privacy_settings::EVERYONE => _m('Everyone'),
// TRANS: Dropdown option in group settings page for who can send private messages.
Group_privacy_settings::MEMBER => _m('Member'), Group_privacy_settings::MEMBER => _m('Member'),
// TRANS: Dropdown option in group settings page for who can send private messages.
Group_privacy_settings::ADMIN => _m('Admin')), Group_privacy_settings::ADMIN => _m('Admin')),
// TRANS: Dropdown title in group settings page for who can send private messages to the group.
_m('Who can send private messages to the group.'), _m('Who can send private messages to the group.'),
false, false,
(empty($gps)) ? Group_privacy_settings::MEMBER : $gps->allow_sender); (empty($gps)) ? Group_privacy_settings::MEMBER : $gps->allow_sender);
@ -292,7 +297,7 @@ class GroupPrivateMessagePlugin extends Plugin
} else { } else {
$orig = clone($gps); $orig = clone($gps);
} }
$gps->allow_privacy = $action->trimmed('allow_privacy'); $gps->allow_privacy = $action->trimmed('allow_privacy');
$gps->allow_sender = $action->trimmed('allow_sender'); $gps->allow_sender = $action->trimmed('allow_sender');
@ -302,21 +307,21 @@ class GroupPrivateMessagePlugin extends Plugin
} else { } else {
$gps->update($orig); $gps->update($orig);
} }
return true; return true;
} }
/** /**
* Overload 'd' command to send private messages to groups. * Overload 'd' command to send private messages to groups.
* *
* 'd !group word word word' will send the private message * 'd !group word word word' will send the private message
* 'word word word' to the group 'group'. * 'word word word' to the group 'group'.
* *
* @param string $cmd Command being run * @param string $cmd Command being run
* @param string $arg Rest of the message (including address) * @param string $arg Rest of the message (including address)
* @param User $user User sending the message * @param User $user User sending the message
* @param Command &$result The resulting command object to be run. * @param Command &$result The resulting command object to be run.
* *
* @return boolean hook value * @return boolean hook value
*/ */
function onStartIntepretCommand($cmd, $arg, $user, &$result) function onStartIntepretCommand($cmd, $arg, $user, &$result)
@ -350,7 +355,7 @@ class GroupPrivateMessagePlugin extends Plugin
* *
* @param Widget $widget The showgroup action being shown * @param Widget $widget The showgroup action being shown
* @param User_group $group The current group * @param User_group $group The current group
* *
* @return boolean hook value * @return boolean hook value
*/ */
function onEndGroupActionsList($widget, $group) function onEndGroupActionsList($widget, $group)
@ -370,8 +375,10 @@ class GroupPrivateMessagePlugin extends Plugin
$action->elementStart('li', 'entity_send-a-message'); $action->elementStart('li', 'entity_send-a-message');
$action->element('a', array('href' => common_local_url('newgroupmessage', array('nickname' => $group->nickname)), $action->element('a', array('href' => common_local_url('newgroupmessage', array('nickname' => $group->nickname)),
// TRANS: Title for action in group actions list.
'title' => _m('Send a direct message to this group.')), 'title' => _m('Send a direct message to this group.')),
_m('Message')); // TRANS: Link text for action in group actions list to send a private message to a group.
_m('LINKTEXT','Message'));
// $form = new GroupMessageForm($action, $group); // $form = new GroupMessageForm($action, $group);
// $form->hidden = true; // $form->hidden = true;
// $form->show(); // $form->show();
@ -384,12 +391,9 @@ class GroupPrivateMessagePlugin extends Plugin
* privacy == always, force a group private message to all mentioned groups. * privacy == always, force a group private message to all mentioned groups.
* If any of the groups disallows private messages, skip it. * If any of the groups disallows private messages, skip it.
* *
* @param * @param
*
*/ */
function onStartNoticeSave(&$notice) { function onStartNoticeSave(&$notice) {
// Look for group tags // Look for group tags
// FIXME: won't work for remote groups // FIXME: won't work for remote groups
// @fixme if Notice::saveNew is refactored so we can just pull its list // @fixme if Notice::saveNew is refactored so we can just pull its list
@ -406,11 +410,9 @@ class GroupPrivateMessagePlugin extends Plugin
$profile = $notice->getProfile(); $profile = $notice->getProfile();
if ($count > 0) { if ($count > 0) {
/* Add them to the database */ /* Add them to the database */
foreach (array_unique($match[1]) as $nickname) { foreach (array_unique($match[1]) as $nickname) {
$group = User_group::getForNickname($nickname, $profile); $group = User_group::getForNickname($nickname, $profile);
if (empty($group)) { if (empty($group)) {
@ -433,7 +435,6 @@ class GroupPrivateMessagePlugin extends Plugin
} }
if ($forcePrivate) { if ($forcePrivate) {
foreach ($ignored as $group) { foreach ($ignored as $group) {
common_log(LOG_NOTICE, common_log(LOG_NOTICE,
"Notice forced to group direct message ". "Notice forced to group direct message ".
@ -454,11 +455,12 @@ class GroupPrivateMessagePlugin extends Plugin
// Don't save the notice! // Don't save the notice!
// FIXME: this is probably cheating. // FIXME: this is probably cheating.
// TRANS: Client exception thrown when a private group message has to be forced.
throw new ClientException(sprintf(_m('Forced notice to private group message.')), throw new ClientException(sprintf(_m('Forced notice to private group message.')),
200); 200);
} }
} }
return true; return true;
} }
@ -470,12 +472,12 @@ class GroupPrivateMessagePlugin extends Plugin
* *
* @return boolean hook value * @return boolean hook value
*/ */
function onEndGroupProfileElements($action, $group) function onEndGroupProfileElements($action, $group)
{ {
$gps = Group_privacy_settings::forGroup($group); $gps = Group_privacy_settings::forGroup($group);
if ($gps->allow_privacy == Group_privacy_settings::ALWAYS) { if ($gps->allow_privacy == Group_privacy_settings::ALWAYS) {
// TRANS: Indicator on the group page that the group is (essentially) private.
$action->element('p', 'privategroupindicator', _m('Private')); $action->element('p', 'privategroupindicator', _m('Private'));
} }
@ -486,7 +488,7 @@ class GroupPrivateMessagePlugin extends Plugin
{ {
if ($action instanceof ShowgroupAction) { if ($action instanceof ShowgroupAction) {
$gps = Group_privacy_settings::forGroup($action->group); $gps = Group_privacy_settings::forGroup($action->group);
if ($gps->allow_privacy == Group_privacy_settings::ALWAYS) { if ($gps->allow_privacy == Group_privacy_settings::ALWAYS) {
return false; return false;
} }
@ -501,6 +503,7 @@ class GroupPrivateMessagePlugin extends Plugin
'author' => 'Evan Prodromou', 'author' => 'Evan Prodromou',
'homepage' => 'http://status.net/wiki/Plugin:GroupPrivateMessage', 'homepage' => 'http://status.net/wiki/Plugin:GroupPrivateMessage',
'rawdescription' => 'rawdescription' =>
// TRANS: Plugin description.
_m('Allow posting private messages to groups.')); _m('Allow posting private messages to groups.'));
return true; return true;
} }

View File

@ -44,7 +44,6 @@ require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
* *
* @see DB_DataObject * @see DB_DataObject
*/ */
class Group_message extends Memcached_DataObject class Group_message extends Memcached_DataObject
{ {
public $__table = 'group_message'; // table name public $__table = 'group_message'; // table name
@ -66,7 +65,6 @@ class Group_message extends Memcached_DataObject
* @param mixed $v Value to lookup * @param mixed $v Value to lookup
* *
* @return Group_message object found, or null for no hits * @return Group_message object found, or null for no hits
*
*/ */
function staticGet($k, $v=null) function staticGet($k, $v=null)
{ {
@ -123,6 +121,8 @@ class Group_message extends Memcached_DataObject
{ {
if (!$user->hasRight(Right::NEWMESSAGE)) { if (!$user->hasRight(Right::NEWMESSAGE)) {
// XXX: maybe break this out into a separate right // XXX: maybe break this out into a separate right
// TRANS: Exception thrown when trying to send group private message without having the right to do that.
// TRANS: %s is a user nickname.
throw new Exception(sprintf(_m('User %s is not allowed to send private messages.'), throw new Exception(sprintf(_m('User %s is not allowed to send private messages.'),
$user->nickname)); $user->nickname));
} }
@ -134,6 +134,8 @@ class Group_message extends Memcached_DataObject
// We use the same limits as for 'regular' private messages. // We use the same limits as for 'regular' private messages.
if (Message::contentTooLong($text)) { if (Message::contentTooLong($text)) {
// TRANS: Exception thrown when trying to send group private message that is too long.
// TRANS: %d is the maximum meggage length.
throw new Exception(sprintf(_m('That\'s too long. Maximum message size is %d character.', throw new Exception(sprintf(_m('That\'s too long. Maximum message size is %d character.',
'That\'s too long. Maximum message size is %d characters.', 'That\'s too long. Maximum message size is %d characters.',
Message::maxContent()), Message::maxContent()),
@ -143,7 +145,7 @@ class Group_message extends Memcached_DataObject
// Valid! Let's do this thing! // Valid! Let's do this thing!
$gm = new Group_message(); $gm = new Group_message();
$gm->id = UUID::gen(); $gm->id = UUID::gen();
$gm->uri = common_local_url('showgroupmessage', array('id' => $gm->id)); $gm->uri = common_local_url('showgroupmessage', array('id' => $gm->id));
$gm->from_profile = $user->id; $gm->from_profile = $user->id;
@ -165,7 +167,7 @@ class Group_message extends Memcached_DataObject
function distribute() function distribute()
{ {
$group = User_group::staticGet('id', $this->to_group); $group = User_group::staticGet('id', $this->to_group);
$member = $group->getMembers(); $member = $group->getMembers();
while ($member->fetch()) { while ($member->fetch()) {
@ -177,6 +179,7 @@ class Group_message extends Memcached_DataObject
{ {
$group = User_group::staticGet('id', $this->to_group); $group = User_group::staticGet('id', $this->to_group);
if (empty($group)) { if (empty($group)) {
// TRANS: Exception thrown when trying to send group private message to a non-existing group.
throw new ServerException(_m('No group for group message.')); throw new ServerException(_m('No group for group message.'));
} }
return $group; return $group;
@ -186,6 +189,7 @@ class Group_message extends Memcached_DataObject
{ {
$sender = Profile::staticGet('id', $this->from_profile); $sender = Profile::staticGet('id', $this->from_profile);
if (empty($sender)) { if (empty($sender)) {
// TRANS: Exception thrown when trying to send group private message without having a sender.
throw new ServerException(_m('No sender for group message.')); throw new ServerException(_m('No sender for group message.'));
} }
return $sender; return $sender;
@ -204,5 +208,4 @@ class Group_message extends Memcached_DataObject
return $gm; return $gm;
} }
} }

View File

@ -44,7 +44,6 @@ require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
* *
* @see DB_DataObject * @see DB_DataObject
*/ */
class Group_message_profile extends Memcached_DataObject class Group_message_profile extends Memcached_DataObject
{ {
public $__table = 'group_message_profile'; // table name public $__table = 'group_message_profile'; // table name
@ -61,7 +60,6 @@ class Group_message_profile extends Memcached_DataObject
* @param mixed $v Value to lookup * @param mixed $v Value to lookup
* *
* @return Group_message object found, or null for no hits * @return Group_message object found, or null for no hits
*
*/ */
function staticGet($k, $v=null) function staticGet($k, $v=null)
{ {
@ -120,7 +118,7 @@ class Group_message_profile extends Memcached_DataObject
function send($gm, $profile) function send($gm, $profile)
{ {
$gmp = new Group_message_profile(); $gmp = new Group_message_profile();
$gmp->group_message_id = $gm->id; $gmp->group_message_id = $gm->id;
$gmp->to_profile = $profile->id; $gmp->to_profile = $profile->id;
$gmp->created = common_sql_now(); $gmp->created = common_sql_now();
@ -138,7 +136,7 @@ class Group_message_profile extends Memcached_DataObject
$this->notifyByMail(); $this->notifyByMail();
} }
function notifyByMail() function notifyByMail()
{ {
$to = User::staticGet('id', $this->to_profile); $to = User::staticGet('id', $this->to_profile);
@ -163,14 +161,14 @@ class Group_message_profile extends Memcached_DataObject
// TRANS: %3$s is the message content, %4$s a URL to the message, // TRANS: %3$s is the message content, %4$s a URL to the message,
// TRANS: %5$s is the StatusNet sitename. // TRANS: %5$s is the StatusNet sitename.
$body = sprintf(_m("%1\$s (%2\$s) sent a private message to group %3\$s:\n\n". $body = sprintf(_m("%1\$s (%2\$s) sent a private message to group %3\$s:\n\n".
"------------------------------------------------------\n". "------------------------------------------------------\n".
"%4\$s\n". "%4\$s\n".
"------------------------------------------------------\n\n". "------------------------------------------------------\n\n".
"You can reply to their message here:\n\n". "You can reply to their message here:\n\n".
"%5\$s\n\n". "%5\$s\n\n".
"Do not reply to this email; it will not get to them.\n\n". "Do not reply to this email; it will not get to them.\n\n".
"With kind regards,\n". "With kind regards,\n".
"%6\$s"), "%6\$s"),
$from_profile->getBestName(), $from_profile->getBestName(),
$from_profile->nickname, $from_profile->nickname,
$group->nickname, $group->nickname,

View File

@ -44,16 +44,15 @@ if (!defined('STATUSNET')) {
* *
* @see DB_DataObject * @see DB_DataObject
*/ */
class Group_privacy_settings extends Memcached_DataObject class Group_privacy_settings extends Memcached_DataObject
{ {
public $__table = 'group_privacy_settings'; public $__table = 'group_privacy_settings';
/** ID of the group. */ /** ID of the group. */
public $group_id; public $group_id;
/** When to allow privacy: always, sometimes, or never. */ /** When to allow privacy: always, sometimes, or never. */
public $allow_privacy; public $allow_privacy;
/** Who can send private messages: everyone, member, admin */ /** Who can send private messages: everyone, member, admin */
public $allow_sender; public $allow_sender;
/** row creation timestamp */ /** row creation timestamp */
public $created; public $created;
/** Last-modified timestamp */ /** Last-modified timestamp */
@ -81,7 +80,6 @@ class Group_privacy_settings extends Memcached_DataObject
* *
* @return User_greeting_count object found, or null for no hits * @return User_greeting_count object found, or null for no hits
*/ */
function staticGet($k, $v=null) function staticGet($k, $v=null)
{ {
return Memcached_DataObject::staticGet('Group_privacy_settings', $k, $v); return Memcached_DataObject::staticGet('Group_privacy_settings', $k, $v);
@ -95,7 +93,6 @@ class Group_privacy_settings extends Memcached_DataObject
* *
* @return array array of column definitions * @return array array of column definitions
*/ */
function table() function table()
{ {
return array('group_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, return array('group_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
@ -103,7 +100,7 @@ class Group_privacy_settings extends Memcached_DataObject
'allow_sender' => DB_DATAOBJECT_INT, 'allow_sender' => DB_DATAOBJECT_INT,
'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL, 'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL,
'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL); 'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
} }
/** /**
@ -115,7 +112,6 @@ class Group_privacy_settings extends Memcached_DataObject
* *
* @return array list of key field names * @return array list of key field names
*/ */
function keys() function keys()
{ {
return array_keys($this->keyTypes()); return array_keys($this->keyTypes());
@ -128,7 +124,6 @@ class Group_privacy_settings extends Memcached_DataObject
* 'K' for primary key: for compound keys, add an entry for each component; * 'K' for primary key: for compound keys, add an entry for each component;
* 'U' for unique keys: compound keys are not well supported here. * 'U' for unique keys: compound keys are not well supported here.
*/ */
function keyTypes() function keyTypes()
{ {
return array('group_id' => 'K'); return array('group_id' => 'K');
@ -139,7 +134,6 @@ class Group_privacy_settings extends Memcached_DataObject
* *
* @return array magic three-false array that stops auto-incrementing. * @return array magic three-false array that stops auto-incrementing.
*/ */
function sequenceKey() function sequenceKey()
{ {
return array(false, false, false); return array(false, false, false);
@ -164,6 +158,7 @@ class Group_privacy_settings extends Memcached_DataObject
$gps = self::forGroup($group); $gps = self::forGroup($group);
if ($gps->allow_privacy == Group_privacy_settings::NEVER) { if ($gps->allow_privacy == Group_privacy_settings::NEVER) {
// TRANS: Exception thrown when trying to set group privacy setting if group %s does not allow private messages.
throw new Exception(sprintf(_m('Group %s does not allow private messages.'), throw new Exception(sprintf(_m('Group %s does not allow private messages.'),
$group->nickname)); $group->nickname));
} }
@ -172,6 +167,8 @@ class Group_privacy_settings extends Memcached_DataObject
case Group_privacy_settings::EVERYONE: case Group_privacy_settings::EVERYONE:
$profile = $user->getProfile(); $profile = $user->getProfile();
if (Group_block::isBlocked($group, $profile)) { if (Group_block::isBlocked($group, $profile)) {
// TRANS: Exception thrown when trying to send group private message while blocked from that group.
// TRANS: %1$s is a user nickname, %2$s is a group nickname.
throw new Exception(sprintf(_m('User %1$s is blocked from group %2$s.'), throw new Exception(sprintf(_m('User %1$s is blocked from group %2$s.'),
$user->nickname, $user->nickname,
$group->nickname)); $group->nickname));
@ -179,6 +176,8 @@ class Group_privacy_settings extends Memcached_DataObject
break; break;
case Group_privacy_settings::MEMBER: case Group_privacy_settings::MEMBER:
if (!$user->isMember($group)) { if (!$user->isMember($group)) {
// TRANS: Exception thrown when trying to send group private message while not a member.
// TRANS: %1$s is a user nickname, %2$s is a group nickname.
throw new Exception(sprintf(_m('User %1$s is not a member of group %2$s.'), throw new Exception(sprintf(_m('User %1$s is not a member of group %2$s.'),
$user->nickname, $user->nickname,
$group->nickname)); $group->nickname));
@ -186,12 +185,16 @@ class Group_privacy_settings extends Memcached_DataObject
break; break;
case Group_privacy_settings::ADMIN: case Group_privacy_settings::ADMIN:
if (!$user->isAdmin($group)) { if (!$user->isAdmin($group)) {
// TRANS: Exception thrown when trying to send group private message while not a group administrator.
// TRANS: %1$s is a user nickname, %2$s is a group nickname.
throw new Exception(sprintf(_m('User %1$s is not an administrator of group %2$s.'), throw new Exception(sprintf(_m('User %1$s is not an administrator of group %2$s.'),
$user->nickname, $user->nickname,
$group->nickname)); $group->nickname));
} }
break; break;
default: default:
// TRANS: Exception thrown when encountering undefined group privacy settings.
// TRANS: %s is a group nickname.
throw new Exception(sprintf(_m('Unknown privacy settings for group %s.'), throw new Exception(sprintf(_m('Unknown privacy settings for group %s.'),
$group->nickname)); $group->nickname));
} }

View File

@ -4,7 +4,7 @@
* Copyright (C) 2011, StatusNet, Inc. * Copyright (C) 2011, StatusNet, Inc.
* *
* List of private messages to this group * List of private messages to this group
* *
* PHP version 5 * PHP version 5
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
@ -44,7 +44,6 @@ if (!defined('STATUSNET')) {
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
class GroupinboxAction extends GroupDesignAction class GroupinboxAction extends GroupDesignAction
{ {
var $gm; var $gm;
@ -63,6 +62,7 @@ class GroupinboxAction extends GroupDesignAction
$cur = common_current_user(); $cur = common_current_user();
if (empty($cur)) { if (empty($cur)) {
// TRANS: Client exception thrown when trying to view group inbox while not logged in.
throw new ClientException(_m('Only for logged-in users.'), 403); throw new ClientException(_m('Only for logged-in users.'), 403);
} }
@ -79,16 +79,19 @@ class GroupinboxAction extends GroupDesignAction
$localGroup = Local_group::staticGet('nickname', $nickname); $localGroup = Local_group::staticGet('nickname', $nickname);
if (empty($localGroup)) { if (empty($localGroup)) {
// TRANS: Client exception thrown when trying to view group inbox for non-existing group.
throw new ClientException(_m('No such group.'), 404); throw new ClientException(_m('No such group.'), 404);
} }
$this->group = User_group::staticGet('id', $localGroup->group_id); $this->group = User_group::staticGet('id', $localGroup->group_id);
if (empty($this->group)) { if (empty($this->group)) {
// TRANS: Client exception thrown when trying to view group inbox for non-existing group.
throw new ClientException(_m('No such group.'), 404); throw new ClientException(_m('No such group.'), 404);
} }
if (!$cur->isMember($this->group)) { if (!$cur->isMember($this->group)) {
// TRANS: Client exception thrown when trying to view group inbox while not a member.
throw new ClientException(_m('Only for members.'), 403); throw new ClientException(_m('Only for members.'), 403);
} }
@ -97,8 +100,8 @@ class GroupinboxAction extends GroupDesignAction
if (!$this->page) { if (!$this->page) {
$this->page = 1; $this->page = 1;
} }
$this->gm = Group_message::forGroup($this->group, $this->gm = Group_message::forGroup($this->group,
($this->page - 1) * MESSAGES_PER_PAGE, ($this->page - 1) * MESSAGES_PER_PAGE,
MESSAGES_PER_PAGE + 1); MESSAGES_PER_PAGE + 1);
return true; return true;
@ -122,6 +125,7 @@ class GroupinboxAction extends GroupDesignAction
$cnt = $gml->show(); $cnt = $gml->show();
if ($cnt == 0) { if ($cnt == 0) {
// TRANS: Text of group inbox if no private messages were sent to it.
$this->element('p', 'guide', _m('This group has not received any private messages.')); $this->element('p', 'guide', _m('This group has not received any private messages.'));
} }
$this->pagination($this->page > 1, $this->pagination($this->page > 1,
@ -167,6 +171,7 @@ class GroupinboxAction extends GroupDesignAction
$base = $this->group->getFancyName(); $base = $this->group->getFancyName();
if ($this->page == 1) { if ($this->page == 1) {
// TRANS: Title of inbox for group %s.
return sprintf(_m('%s group inbox'), $base); return sprintf(_m('%s group inbox'), $base);
} else { } else {
// TRANS: Page title for any but first group page. // TRANS: Page title for any but first group page.
@ -184,7 +189,6 @@ class GroupinboxAction extends GroupDesignAction
* *
* @return void * @return void
*/ */
function showPageNotice() function showPageNotice()
{ {
$instr = $this->getInstructions(); $instr = $this->getInstructions();

View File

@ -4,7 +4,7 @@
* Copyright (C) 2011, StatusNet, Inc. * Copyright (C) 2011, StatusNet, Inc.
* *
* Command object for messages to groups * Command object for messages to groups
* *
* PHP version 5 * PHP version 5
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
@ -44,7 +44,6 @@ if (!defined('STATUSNET')) {
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
class GroupMessageCommand extends Command class GroupMessageCommand extends Command
{ {
/** User sending the message. */ /** User sending the message. */
@ -61,7 +60,6 @@ class GroupMessageCommand extends Command
* @param string $nickname Nickname of the group * @param string $nickname Nickname of the group
* @param string $text Text of message * @param string $text Text of message
*/ */
function __construct($user, $nickname, $text) function __construct($user, $nickname, $text)
{ {
$this->user = $user; $this->user = $user;
@ -76,8 +74,9 @@ class GroupMessageCommand extends Command
$gm = Group_message::send($this->user, $group, $this->text); $gm = Group_message::send($this->user, $group, $this->text);
$channel->output($this->user, $channel->output($this->user,
sprintf(_m('Direct message to group %s sent.'), // TRANS: Succes message after sending private group message to group %s.
sprintf(_m('Direct message to group %s sent.'),
$group->nickname)); $group->nickname));
return true; return true;

View File

@ -4,7 +4,7 @@
* Copyright (C) 2011, StatusNet, Inc. * Copyright (C) 2011, StatusNet, Inc.
* *
* Form for posting a group message * Form for posting a group message
* *
* PHP version 5 * PHP version 5
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
@ -44,7 +44,6 @@ if (!defined('STATUSNET')) {
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
class GroupMessageForm extends Form class GroupMessageForm extends Form
{ {
var $group; var $group;
@ -58,7 +57,6 @@ class GroupMessageForm extends Form
* *
* @todo add a drop-down list to post to any group * @todo add a drop-down list to post to any group
*/ */
function __construct($out, $group, $content=null) function __construct($out, $group, $content=null)
{ {
parent::__construct($out); parent::__construct($out);
@ -71,7 +69,7 @@ class GroupMessageForm extends Form
* Action for the form * Action for the form
*/ */
function action() function action()
{ {
return common_local_url('newgroupmessage', return common_local_url('newgroupmessage',
array('nickname' => $this->group->nickname)); array('nickname' => $this->group->nickname));
} }
@ -87,6 +85,7 @@ class GroupMessageForm extends Form
{ {
$this->out->element('legend', $this->out->element('legend',
null, null,
// TRANS: Form legend for sending private message to group %s.
sprintf(_m('Message to %s'), $this->group->nickname)); sprintf(_m('Message to %s'), $this->group->nickname));
} }
@ -97,7 +96,6 @@ class GroupMessageForm extends Form
* *
* @return * @return
*/ */
function id() function id()
{ {
return 'form_notice-group-message'; return 'form_notice-group-message';
@ -110,7 +108,6 @@ class GroupMessageForm extends Form
* *
* @return * @return
*/ */
function formClass() function formClass()
{ {
return 'form_notice'; return 'form_notice';
@ -123,11 +120,11 @@ class GroupMessageForm extends Form
* *
* @return * @return
*/ */
function formData() function formData()
{ {
$this->out->element('label', array('for' => 'notice_data-text', $this->out->element('label', array('for' => 'notice_data-text',
'id' => 'notice_data-text-label'), 'id' => 'notice_data-text-label'),
// TRANS: Field label for private group message to group %s.
sprintf(_m('Direct message to %s'), $this->group->nickname)); sprintf(_m('Direct message to %s'), $this->group->nickname));
$this->out->element('textarea', array('id' => 'notice_data-text', $this->out->element('textarea', array('id' => 'notice_data-text',
@ -140,6 +137,7 @@ class GroupMessageForm extends Form
if ($contentLimit > 0) { if ($contentLimit > 0) {
$this->out->elementStart('dl', 'form_note'); $this->out->elementStart('dl', 'form_note');
// TRANS: Indicator for number of chatacters still available for notice.
$this->out->element('dt', null, _m('Available characters')); $this->out->element('dt', null, _m('Available characters'));
$this->out->element('dd', array('class' => 'count'), $this->out->element('dd', array('class' => 'count'),
$contentLimit); $contentLimit);
@ -154,13 +152,13 @@ class GroupMessageForm extends Form
* *
* @return * @return
*/ */
function formActions() function formActions()
{ {
$this->out->element('input', array('id' => 'notice_action-submit', $this->out->element('input', array('id' => 'notice_action-submit',
'class' => 'submit', 'class' => 'submit',
'name' => 'message_send', 'name' => 'message_send',
'type' => 'submit', 'type' => 'submit',
// TRANS: Send button text for sending private group notice.
'value' => _m('Send button for sending notice', 'Send'))); 'value' => _m('Send button for sending notice', 'Send')));
} }
} }

View File

@ -4,7 +4,7 @@
* Copyright (C) 2011, StatusNet, Inc. * Copyright (C) 2011, StatusNet, Inc.
* *
* Widget for showing list of group messages * Widget for showing list of group messages
* *
* PHP version 5 * PHP version 5
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify

View File

@ -4,7 +4,7 @@
* Copyright (C) 2011, StatusNet, Inc. * Copyright (C) 2011, StatusNet, Inc.
* *
* Widget for showing an individual group message * Widget for showing an individual group message
* *
* PHP version 5 * PHP version 5
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
@ -69,13 +69,13 @@ class GroupMessageListItem extends Widget
{ {
$group = $this->gm->getGroup(); $group = $this->gm->getGroup();
$sender = $this->gm->getSender(); $sender = $this->gm->getSender();
$this->out->elementStart('li', array('class' => 'hentry notice message group-message', $this->out->elementStart('li', array('class' => 'hentry notice message group-message',
'id' => 'message-' . $this->gm->id)); 'id' => 'message-' . $this->gm->id));
$this->out->elementStart('div', 'entry-title'); $this->out->elementStart('div', 'entry-title');
$this->out->elementStart('span', 'vcard author'); $this->out->elementStart('span', 'vcard author');
$this->out->elementStart('a', $this->out->elementStart('a',
array('href' => $sender->profileurl, array('href' => $sender->profileurl,
'class' => 'url')); 'class' => 'url'));
$avatar = $sender->getAvatar(AVATAR_STREAM_SIZE); $avatar = $sender->getAvatar(AVATAR_STREAM_SIZE);

View File

@ -4,7 +4,7 @@
* Copyright (C) 2011, StatusNet, Inc. * Copyright (C) 2011, StatusNet, Inc.
* *
* Action for adding a new group message * Action for adding a new group message
* *
* PHP version 5 * PHP version 5
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
@ -44,7 +44,6 @@ if (!defined('STATUSNET')) {
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
class NewgroupmessageAction extends Action class NewgroupmessageAction extends Action
{ {
var $group; var $group;
@ -58,7 +57,6 @@ class NewgroupmessageAction extends Action
* *
* @return boolean true * @return boolean true
*/ */
function prepare($argarray) function prepare($argarray)
{ {
parent::prepare($argarray); parent::prepare($argarray);
@ -66,10 +64,12 @@ class NewgroupmessageAction extends Action
$this->user = common_current_user(); $this->user = common_current_user();
if (empty($this->user)) { if (empty($this->user)) {
// TRANS: Client exception thrown when trying to send a private group message while not logged in.
throw new ClientException(_m('Must be logged in.'), 403); throw new ClientException(_m('Must be logged in.'), 403);
} }
if (!$this->user->hasRight(Right::NEWMESSAGE)) { if (!$this->user->hasRight(Right::NEWMESSAGE)) {
// TRANS: Exception thrown when user %s is not allowed to send a private group message.
throw new Exception(sprintf(_m('User %s is not allowed to send private messages.'), throw new Exception(sprintf(_m('User %s is not allowed to send private messages.'),
$this->user->nickname)); $this->user->nickname));
} }
@ -87,21 +87,21 @@ class NewgroupmessageAction extends Action
$localGroup = Local_group::staticGet('nickname', $nickname); $localGroup = Local_group::staticGet('nickname', $nickname);
if (empty($localGroup)) { if (empty($localGroup)) {
// TRANS: Client exception thrown when trying to send a private group message to a non-existing group.
throw new ClientException(_m('No such group.'), 404); throw new ClientException(_m('No such group.'), 404);
} }
$this->group = User_group::staticGet('id', $localGroup->group_id); $this->group = User_group::staticGet('id', $localGroup->group_id);
if (empty($this->group)) { if (empty($this->group)) {
// TRANS: Client exception thrown when trying to send a private group message to a non-existing group.
throw new ClientException(_m('No such group.'), 404); throw new ClientException(_m('No such group.'), 404);
} }
// This throws an exception on error // This throws an exception on error
Group_privacy_settings::ensurePost($this->user, $this->group); Group_privacy_settings::ensurePost($this->user, $this->group);
// If we're posted to, check session token and get text // If we're posted to, check session token and get text
if ($this->isPost()) { if ($this->isPost()) {
$this->checkSessionToken(); $this->checkSessionToken();
$this->text = $this->trimmed('content'); $this->text = $this->trimmed('content');
@ -117,7 +117,6 @@ class NewgroupmessageAction extends Action
* *
* @return void * @return void
*/ */
function handle($argarray=null) function handle($argarray=null)
{ {
if ($this->isPost()) { if ($this->isPost()) {
@ -140,11 +139,13 @@ class NewgroupmessageAction extends Action
if ($this->boolean('ajax')) { if ($this->boolean('ajax')) {
$this->startHTML('text/xml;charset=utf-8'); $this->startHTML('text/xml;charset=utf-8');
$this->elementStart('head'); $this->elementStart('head');
// TRANS: Title after sending a private group message.
$this->element('title', null, _m('Message sent')); $this->element('title', null, _m('Message sent'));
$this->elementEnd('head'); $this->elementEnd('head');
$this->elementStart('body'); $this->elementStart('body');
$this->element('p', $this->element('p',
array('id' => 'command_result'), array('id' => 'command_result'),
// TRANS: Succes text after sending a direct message to group %s.
sprintf(_m('Direct message to %s sent.'), sprintf(_m('Direct message to %s sent.'),
$this->group->nickname)); $this->group->nickname));
$this->elementEnd('body'); $this->elementEnd('body');
@ -156,6 +157,7 @@ class NewgroupmessageAction extends Action
function title() function title()
{ {
// TRANS: Title of form for new private group message.
return sprintf(_m('New message to group %s'), $this->group->nickname); return sprintf(_m('New message to group %s'), $this->group->nickname);
} }
} }

View File

@ -4,7 +4,7 @@
* Copyright (C) 2011, StatusNet, Inc. * Copyright (C) 2011, StatusNet, Inc.
* *
* Show a single group message * Show a single group message
* *
* PHP version 5 * PHP version 5
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
@ -44,7 +44,6 @@ if (!defined('STATUSNET')) {
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
class ShowgroupmessageAction extends Action class ShowgroupmessageAction extends Action
{ {
var $gm; var $gm;
@ -59,7 +58,6 @@ class ShowgroupmessageAction extends Action
* *
* @return boolean true * @return boolean true
*/ */
function prepare($argarray) function prepare($argarray)
{ {
parent::prepare($argarray); parent::prepare($argarray);
@ -67,6 +65,7 @@ class ShowgroupmessageAction extends Action
$this->user = common_current_user(); $this->user = common_current_user();
if (empty($this->user)) { if (empty($this->user)) {
// TRANS: Client exception thrown when trying to view group private messages without being logged in.
throw new ClientException(_m('Only logged-in users can view private messages.'), throw new ClientException(_m('Only logged-in users can view private messages.'),
403); 403);
} }
@ -76,22 +75,26 @@ class ShowgroupmessageAction extends Action
$this->gm = Group_message::staticGet('id', $id); $this->gm = Group_message::staticGet('id', $id);
if (empty($this->gm)) { if (empty($this->gm)) {
// TRANS: Client exception thrown when trying to view a non-existing group private message.
throw new ClientException(_m('No such message.'), 404); throw new ClientException(_m('No such message.'), 404);
} }
$this->group = User_group::staticGet('id', $this->gm->to_group); $this->group = User_group::staticGet('id', $this->gm->to_group);
if (empty($this->group)) { if (empty($this->group)) {
// TRANS: Server exception thrown when trying to view group private messages for a non-exsting group.
throw new ServerException(_m('Group not found.')); throw new ServerException(_m('Group not found.'));
} }
if (!$this->user->isMember($this->group)) { if (!$this->user->isMember($this->group)) {
// TRANS: Client exception thrown when trying to view a group private message without being a group member.
throw new ClientException(_m('Cannot read message.'), 403); throw new ClientException(_m('Cannot read message.'), 403);
} }
$this->sender = Profile::staticGet('id', $this->gm->from_profile); $this->sender = Profile::staticGet('id', $this->gm->from_profile);
if (empty($this->sender)) { if (empty($this->sender)) {
// TRANS: Server exception thrown when trying to view a group private message without a sender.
throw new ServerException(_m('No sender found.')); throw new ServerException(_m('No sender found.'));
} }
@ -105,7 +108,6 @@ class ShowgroupmessageAction extends Action
* *
* @return void * @return void
*/ */
function handle($argarray=null) function handle($argarray=null)
{ {
$this->showPage(); $this->showPage();
@ -114,9 +116,10 @@ class ShowgroupmessageAction extends Action
/** /**
* Title of the page * Title of the page
*/ */
function title() function title()
{ {
// TRANS: Title for private group message.
// TRANS: %1$s is the sender name, %2$s is the group name, %3$s is a timestamp.
return sprintf(_m('Message from %1$s to group %2$s on %3$s'), return sprintf(_m('Message from %1$s to group %2$s on %3$s'),
$this->sender->nickname, $this->sender->nickname,
$this->group->nickname, $this->group->nickname,
@ -126,7 +129,6 @@ class ShowgroupmessageAction extends Action
/** /**
* Show the content area. * Show the content area.
*/ */
function showContent() function showContent()
{ {
$this->elementStart('ul', 'notices messages'); $this->elementStart('ul', 'notices messages');
@ -144,7 +146,6 @@ class ShowgroupmessageAction extends Action
* *
* @return boolean is read only action? * @return boolean is read only action?
*/ */
function isReadOnly($args) function isReadOnly($args)
{ {
return true; return true;

View File

@ -324,11 +324,13 @@ class SearchSubPlugin extends Plugin
{ {
$user = common_current_user(); $user = common_current_user();
$searches = SearchSub::forProfile($user->getProfile()); if (!empty($user)) {
$searches = SearchSub::forProfile($user->getProfile());
if (!empty($searches) && count($searches) > 0) { if (!empty($searches) && count($searches) > 0) {
$searchSubMenu = new SearchSubMenu($menu->out, $user, $searches); $searchSubMenu = new SearchSubMenu($menu->out, $user, $searches);
$menu->submenu(_m('Searches'), $searchSubMenu); $menu->submenu(_m('Searches'), $searchSubMenu);
}
} }
return true; return true;

View File

@ -245,11 +245,14 @@ class TagSubPlugin extends Plugin
{ {
$user = common_current_user(); $user = common_current_user();
$tags = TagSub::forProfile($user->getProfile()); if (!empty($user)) {
if (!empty($tags) && count($tags) > 0) { $tags = TagSub::forProfile($user->getProfile());
$tagSubMenu = new TagSubMenu($menu->out, $user, $tags);
$menu->submenu(_m('Tags'), $tagSubMenu); if (!empty($tags) && count($tags) > 0) {
$tagSubMenu = new TagSubMenu($menu->out, $user, $tags);
$menu->submenu(_m('Tags'), $tagSubMenu);
}
} }
return true; return true;

File diff suppressed because it is too large Load Diff

View File

@ -1,489 +0,0 @@
/** theme: biz
*
* @package StatusNet
* @author Sarven Capadisli <csarven@status.net>
* @copyright 2009 StatusNet, Inc.
* @license http://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0 Unported
* @link http://status.net/
*/
@import url(base.css);
@media screen, projection, tv {
html {
background-color:#144A6E;
}
a:active {
background-color:#F4F7E7;
}
body {
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
font-size:1em;
background:#144A6E url(../images/illustrations/illu_pattern-01.png) repeat-x;
}
address {
margin-right:5.7%;
}
input, textarea, select {
border-width:2px;
border-style: solid;
border-radius:4px;
-moz-border-radius:4px;
-webkit-border-radius:4px;
}
input, textarea, select, option {
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
}
input, textarea, select {
border-color:#AAAAAA;
}
.form_settings fieldset fieldset {
background:rgba(240, 240, 240, 0.2);
box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
-moz-box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
}
#filter_tags ul li,
.entity_send-a-message .form_notice,
.pagination .nav_prev a,
.pagination .nav_next a,
.form_settings fieldset fieldset,
.entity_moderation:hover ul {
border-color:#DDDDDD;
}
.form_settings input.form_action-primary {
background:none;
}
.form_notice.warning .count,
.form_settings .form_note {
background-color:#9BB43E;
}
input.submit,
.form_notice.warning .count,
.form_settings .form_note,
.entity_actions a,
.entity_actions input,
.entity_moderation p,
button {
box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
}
.entity_actions a,
.entity_actions input,
.entity_actions p {
border-color:transparent;
background-color:transparent;
}
input:focus, textarea:focus, select:focus,
.form_notice.warning textarea,
.form_notice.warning .count,
.form_settings .form_note {
border-color:#9BB43E;
}
input.submit {
color:#FFFFFF;
}
.entity_actions input.submit {
border-color:transparent;
text-shadow:none;
}
.dialogbox .submit_dialogbox,
input.submit,
.form_notice input.submit {
background:#AAAAAA url(../../base/images/illustrations/illu_pattern-01.png) 0 0 repeat-x;
text-shadow:0 1px 0 #FFFFFF;
color:#000000;
border-color:#AAAAAA;
border-top-color:#CCCCCC;
border-left-color:#CCCCCC;
}
.dialogbox .submit_dialogbox:hover,
input.submit:hover {
background-position:0 -5px;
}
.dialogbox .submit_dialogbox:focus,
input.submit:focus {
background-position:0 -15px;
box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
text-shadow:none;
}
.form_notice label.notice_data-geo {
background-position:0 -1780px;
}
.form_notice label.notice_data-geo.checked {
background-position:0 -1846px;
}
a,
.form_settings input.form_action-primary,
.notice-options input,
.entity_actions a,
.entity_actions input,
.entity_moderation p {
color:#002FA7;
}
#header a,
#footer a {
color:#87B4C8;
}
.notice,
.profile,
.application,
#content tbody tr {
border-top-color:#C8D1D5;
}
.mark-top {
border-color:#AAAAAA;
}
#aside_primary {
background-color:#144A6E;
}
.section .profile {
border-top-color:#87B4C8;
}
.aside .section {
background-color:#F1F5F8;
background-position:100% 0;
background-image:url(../images/illustrations/illu_pattern-02.png);
background-repeat:no-repeat;
}
.form_notice .count {
color:#333333;
}
#form_notice.warning .count {
color:#000000;
}
.form_notice label.notice_data-attach {
background-position:0 -328px;
}
.form_notice input.notice_data-attach {
opacity:0;
}
.form_notice label.notice_data-attach,
#export_data li a.rss,
#export_data li a.atom,
#export_data li a.foaf,
.entity_edit a,
.entity_send-a-message a,
.entity_nudge p,
.form_user_nudge input.submit,
.form_user_block input.submit,
.form_user_unblock input.submit,
.form_group_block input.submit,
.form_group_unblock input.submit,
.form_make_admin input.submit,
.notice .attachment,
.notice-options .notice_reply,
.notice-options form.form_favor input.submit,
.notice-options form.form_disfavor input.submit,
.notice-options .notice_delete,
.notice-options form.form_repeat input.submit,
#new_group a,
.pagination .nav_prev a,
.pagination .nav_next a,
button.close,
.form_group_leave input.submit,
.form_user_unsubscribe input.submit,
.form_group_join input.submit,
.form_user_subscribe input.submit,
.form_remote_authorize input.submit,
.entity_subscribe a,
.entity_moderation p,
.entity_sandbox input.submit,
.entity_silence input.submit,
.entity_delete input.submit,
.entity_role p,
.entity_role_administrator input.submit,
.entity_role_moderator input.submit,
.notice-options .repeated,
.form_notice label.notice_data-geo,
button.minimize,
.form_reset_key input.submit,
.entity_clear input.submit,
.entity_flag input.submit,
.entity_flag p,
.entity_subscribe input.submit,
#realtime_play,
#realtime_pause,
#realtime_popup {
background-image:url(../../base/images/icons/icons-01.gif);
background-repeat:no-repeat;
background-color:transparent;
}
#wrap form.processing input.submit,
.entity_actions a.processing,
.dialogbox.processing .submit_dialogbox {
background:#FFFFFF url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%;
}
.notice-options .form_repeat.processing {
background-image:none;
}
#content {
box-shadow:5px 7px 7px rgba(194, 194, 194, 0.3);
-moz-box-shadow:5px 7px 7px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:5px 7px 7px rgba(194, 194, 194, 0.3);
}
#content,
#site_nav_local_views a,
.aside .section {
border-color:#FFFFFF;
}
#content,
#site_nav_local_views .current a,
.entity_send-a-message .form_notice,
.entity_moderation:hover ul,
.entity_role:hover ul,
.dialogbox {
background-color:#FFFFFF;
}
#site_nav_local_views li.current {
box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
-webkit-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
}
#site_nav_local_views a {
background-color:rgba(194, 194, 194, 0.5);
}
#site_nav_local_views a:hover {
background-color:rgba(255, 255, 255, 0.7);
}
#site_nav_local_views .current a {
text-shadow: rgba(194,194,194,0.5) 1px 1px 1px;
}
.error {
background-color:#F7E8E8;
}
.success {
background-color:#EFF3DC;
}
button.close {
background-position:0 -1120px;
}
button.minimize {
background-position:0 -1912px;
}
#anon_notice {
color:#FFFFFF;
}
#export_data li a {
background-repeat:no-repeat;
background-position:0 45%;
}
#export_data li a.rss {
background-position:0 -130px;
}
#export_data li a.atom {
background-position:0 -64px;
}
#export_data li a.foaf {
background-position:0 1px;
}
.form_group_join input.submit,
.form_group_leave input.submit,
.form_user_subscribe input.submit,
.form_user_unsubscribe input.submit,
.entity_subscribe a {
background-color:#AAAAAA;
color:#FFFFFF;
}
.form_group_leave input.submit,
.form_user_unsubscribe input.submit {
background-position:5px -1246px;
}
.form_group_join input.submit,
.form_user_subscribe input.submit,
.entity_subscribe a {
background-position:5px -1181px;
}
.entity_edit a {
background-position: 5px -718px;
}
.entity_send-a-message a {
background-position: 5px -852px;
}
.entity_send-a-message .form_notice,
.entity_moderation:hover ul {
box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
-webkit-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
}
.entity_nudge p,
.form_user_nudge input.submit {
background-position: 5px -785px;
}
.form_user_block input.submit,
.form_user_unblock input.submit,
.form_group_block input.submit,
.form_group_unblock input.submit {
background-position: 5px -918px;
}
.form_make_admin input.submit {
background-position: 5px -983px;
}
.entity_moderation p {
background-position: 5px -1313px;
}
.entity_sandbox input.submit {
background-position: 5px -1380px;
}
.entity_silence input.submit {
background-position: 5px -1445px;
}
.entity_delete input.submit {
background-position: 5px -1511px;
}
.form_reset_key input.submit {
background-position: 5px -1973px;
}
.entity_clear input.submit {
background-position: 5px -2039px;
}
.entity_flag input.submit,
.entity_flag p {
background-position: 5px -2105px;
}
.entity_subscribe input.accept {
background-position: 5px -2171px;
}
.entity_subscribe input.reject {
background-position: 5px -2237px;
}
#realtime_play {
background-position: 0 -2308px;
}
#realtime_pause {
background-position: 0 -2374px;
}
#realtime_popup {
background-position: 0 -1714px;
}
/* NOTICES */
.notice .attachment {
background-position:0 -394px;
}
.notice .attachment.more {
background-position:0 -2770px;
}
#attachments .attachment {
background:none;
}
.notice-options .notice_reply {
background-position:0 -592px;
}
.notice-options form.form_favor input.submit {
background-position:0 -460px;
}
.notice-options form.form_disfavor input.submit {
background-position:0 -526px;
}
.notice-options .notice_delete {
background-position:0 -658px;
}
.notice-options form.form_repeat input.submit {
background-position:0 -1582px;
}
.notice-options .repeated {
background-position:0 -1648px;
}
.notices .attachment.more,
.notices div.entry-content,
.notices div.notice-options {
opacity:0.4;
}
.notices li:hover .attachment.more,
.notices li:hover div.entry-content,
.notices li:hover div.notice-options {
opacity:1;
}
.opaque {
opacity:1 !important;
}
div.notice-options a,
div.notice-options input {
font-family:sans-serif;
}
#content .notices li:hover {
background-color:rgba(240, 240, 240, 0.2);
}
#conversation .notices li:hover {
background-color:transparent;
}
.notices .notices {
background-color:rgba(200, 200, 200, 0.050);
}
.notices .notices .notices {
background-color:rgba(200, 200, 200, 0.100);
}
.notices .notices .notices .notices {
background-color:rgba(200, 200, 200, 0.150);
}
.notices .notices .notices .notices .notices {
background-color:rgba(200, 200, 200, 0.300);
}
/*END: NOTICES */
#new_group a {
background-position:0 -1054px;
}
.pagination .nav_prev a,
.pagination .nav_next a {
background-repeat:no-repeat;
box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
}
.pagination .nav_prev a {
background-position:10% -187px;
}
.pagination .nav_next a {
background-position:105% -252px;
}
.pagination .nav .processing {
background-image:url(../../base/images/icons/icon_processing.gif);
box-shadow:none;
-moz-box-shadow:none;
-webkit-box-shadow:none;
outline:none;
}
.pagination .nav_next a.processing {
background-position:90% 47%;
}
.pagination .nav_prev a.processing {
background-position:10% 47%;
}

View File

@ -1,16 +0,0 @@
/**
* @package StatusNet
* @author Sarven Capadisli <csarven@status.net>
* @copyright 2009-2010 StatusNet, Inc.
* @license http://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0 Unported
* @link http://status.net/
*/
/* IE specific styles */
.notice-options input.submit {
color:#fff;
}
#site_nav_local_views a {
background-color:#D0DFE7;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 646 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 935 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

View File

@ -1,256 +0,0 @@
/** theme: clean
*
* @package StatusNet
* @author Samantha Doherty <sammy@status.net>
* @copyright 2010 StatusNet, Inc.
* @license http://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0 Unported
* @link http://status.net/
*/
@media screen, projection, tv {
body {
background: url(../images/page_bg.png) no-repeat fixed 50% 100%;
background-color: #6e6e8c;
font-family: "Liberation Sans", "Nimbus Sans L", "FreeSans", "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 86%;
}
#wrap {
width: 867px;
margin: 0px auto;
padding: 0px 8px 10px 8px;
background-color: #fff;
box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.7);
-moz-box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.7);
-webkit-box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.7);
}
#header {
width: 851px;
padding: 0px;
padding-top: 70px;
margin-left: 8px;
}
address {
float: left;
margin-right: 20px;
margin-top: 0px;
}
.poweredby {
background: url(../images/sn-tiny.png) no-repeat top left;
height: 40px;
font-size: 0.8em;
color: #fff;
line-height: 42px;
padding-left: 50px;
position: absolute;
top: 6px;
left: 0;
z-index: 99;
font-style: normal;
}
.poweredby a {
color: #fff !important;
font-weight: bold;
}
#site_nav_global_primary {
display: block;
position: absolute;
top: 0;
left: 0;
z-index: 98;
background-color: #829d25;
width: 883px;
margin-left: -16px;
margin-top: 0px;
height: 30px;
line-height: 30px;
text-align: right;
border-top: 10px solid #fff;
border-bottom: 1px solid #fff;
}
#site_nav_global_primary li:last-child {
margin-right: 16px;
}
#site_nav_global_primary a {
color: #fff !important;
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
#site_notice {
float: right;
width: 270px;
padding: 10px;
margin-left: 40px;
}
#anon_notice {
clear: both;
background: none;
padding: 0px;
margin-bottom: 0px;
}
.form_notice {
float: right;
width: 494px;
margin-top: 0px;
}
.form_notice fieldset {
width: 100%;
}
.form_notice textarea {
width: 362px;
height: 54px;
}
.form_notice label.notice_data-attach,
.form_notice input.notice_data-attach {
top: 27px;
}
.form_notice .notice_data-geo_wrap label,
.form_notice .notice_data-geo_wrap input {
top: 52px;
}
.form_notice .submit {
font-size: 0.9em;
top: 80px;
right:0;
height: 2.4em;
width: 96px;
right: 10px;
}
.form_notice .error,
.form_notice .success {
width: 375px;
}
.form_notice .error {
width: 375px;
margin-left: 0px;
}
#core {
clear: both;
margin: 0px;
width: 851px;
margin-left: 8px;
margin-top: 14px;
}
#content {
padding-top: 10px;
width: 545px;
margin-right: 0px;
}
#site_nav_local_views {
background-color: #6e6e8c;
height: 2em;
line-height: 2em;
margin-bottom: 0px;
padding-left: 4px;
}
#site_nav_local_views a {
color: #fff !important;
padding: 2px 6px 2px 6px;
}
#site_nav_local_views .current a {
background: #fff !important;
color: #000 !important;
text-decoration: none;
}
#aside_primary {
width: 280px;
padding-left: 10px;
}
#aside_primary .section {
width: 270px;
margin-left: 0px;
margin-right: 10px;
}
.section ul.entities {
width: 290px;
}
.section .entities li {
margin-right: 17px;
margin-bottom: 10px;
width: 24px;
}
.notice {
line-height: 1.35em;
}
#content .notice .author .photo {
left: 0px;
}
#content .notice .entry-title {
min-height: 26px;
}
#shownotice .notice .entry-title {
min-height:123px;
}
.notice div.entry-content {
font-size: 0.9em;
line-height: 1.2em;
margin-top: 10px;
opacity: 0.6;
}
.notice:hover div.entry-content {
opacity: 1;
}
.user_in .notice div.entry-content {
max-width: 360px;
}
div.entry-content a.response:before {
content: "(";
}
div.entry-content a.response:after {
content: ")";
}
.notice-options {
margin-top: 8px;
}
.pagination {
height: 1.2em;
}
#jOverlayContent button {
top: 20px;
right: 36px;
}
.entity_profile {
width: 365px;
}
}/*end of @media screen, projection, tv*/

View File

@ -1,77 +0,0 @@
/* Temporary copy of base styles for overriding */
input.checkbox,
input.radio {
top:0;
}
.form_notice textarea {
width: 362px;
}
.form_notice .count + label {
position:absolute;
top:25px;
left:83%;
text-indent:-9999px;
height:16px;
width:16px;
display:block;
left: 390px;
top: 27px;
}
.form_notice .submit {
width: 96px;
max-width: 96px;
}
.form_notice .attach-status,
.form_notice #notice_data-geo_selected {
width:78.75%;
}
.form_notice .attach-status button,
.form_notice #notice_data-geo_selected button {
padding:0 4px;
}
.notice-options input.submit {
font-size:0;
text-align:right;
text-indent:0;
}
.notice div.entry-content .timestamp a {
margin-right:4px;
}
.entity_profile {
width:64%;
}
.notice {
z-index:1;
}
.notice:hover {
z-index:9999;
}
.notice .thumbnail img {
z-index:9999;
}
.form_settings fieldset fieldset legend {
line-height:auto;
}
/* IE specific styles */
.notice-options input.submit {
color:#FFFFFF;
}
.form_notice input.notice_data-attach {
filter: alpha(opacity=0);
}
.form_notice .count + label {
background:transparent url(../../rebase/images/icons/icons-01.gif) no-repeat 0 -328px;
}
.form_notice .notice_data-geo_wrap label {
background:transparent url(../../rebase/images/icons/icons-01.gif) no-repeat 0 -1780px;
}
.form_notice .notice_data-geo_wrap label.checked {
background:transparent url(../../rebase/images/icons/icons-01.gif) no-repeat 0 -1846px;
}

View File

@ -1,191 +0,0 @@
/* mobile style */
body {
background-image: none;
min-width: 0;
}
#wrap {
margin: 0;
padding: 0;
min-width:0;
max-width:100%;
}
#header {
width: 96%;
padding: 0 2%;
padding-top: 20px;
}
.user_in #header {
padding-top: 40px;
}
address {
margin:1em 0 0 0;
float:left;
width:100%;
}
address img + .fn {
display:block;
margin-top:1em;
margin-right: 10px;
clear: left;
float:left;
}
#site_nav_global_primary {
margin:0;
width: 98%;
padding: 4px 0;
margin-left: -2%;
height: auto;
position:absolute;
top:0;
left:0;
font-size: 1em;
letter-spacing: 0em;
}
#site_nav_global_primary li {
margin-left:0;
margin-right:10px;
float:left;
font-size:0.9em;
padding: 2px 4px;
line-height: 1em;
}
.form_notice {
float: left;
margin-left: -10px;
width: 300px;
padding: 4px;
}
#form_notice-direct.form_notice {
padding-top: 10px;
}
.form_notice textarea {
width: 210px;
height: 50px;
padding: 4px;
}
.form_notice .count {
position:absolute;
bottom:2px;
left: 175px;
font-size: 0.8em;
z-index:9;
}
#form_notice-direct.form_notice .count {
left: 0px;
}
/*input type=file no good in
iPhone/iPod Touch, Android, Opera Mini Simulator
*/
.form_notice .count + label,
.form_notice label[for="notice_data-attach"] {
display:none;
}
.form_notice input.notice_data-attach {
position:static;
clear:both;
width:65%;
height:auto;
display:block;
z-index:9;
padding:0;
margin:0;
background:none;
opacity:1;
}
.form_notice .submit {
text-align: center;
left: 230px;
top: 32px;
width: 70px;
font-size: 0.8em;
}
#form_notice-direct.form_notice .submit {
top: 62px;
}
#site_nav_local_views {
height: auto;
font-size: 0.9em;
line-height: 2em;
margin-bottom: 0px;
padding-left: 4px;
}
#site_nav_local_views li {
margin-right: 6px;
}
#core {
width: 100%;
margin: 0;
}
#content {
width: 96%;
padding: 10px 2%;
margin: 0;
min-height: auto;
}
#footer {
margin: 0;
padding: 10px 4px 4px 4px;
}
.form_settings fieldset {
margin-bottom:7px;
}
.form_settings label {
width:auto;
display:block;
float:none;
text-align: left;
}
.form_settings .form_data li {
margin-bottom:7px;
}
.form_settings .form_data textarea,
.form_settings .form_data select,
.form_settings .form_data input {
margin-left:0;
display:block;
}
.form_settings .form_data textarea {
width:96.41%;
}
.form_settings .form_data label {
float:none;
}
.form_settings .form_data p.form_guide {
width:auto;
margin-left:0;
}
#settings_design_color .form_data {
width: auto;
margin-right: 0;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -1 +0,0 @@
include=rebase

View File

@ -1,810 +0,0 @@
/** theme: cleaner
*
* @package StatusNet
* @author Samantha Doherty <sammy@status.net>
* @copyright 2011 StatusNet, Inc.
* @license http://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0 Unported
* @link http://status.net/
*/
@media screen, projection, tv {
body {
background-color: #e2e2e2;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 82%;
}
a {color: #3e3e8c;}
h1 {font-size: 1.6em;}
h2 {font-size: 1.6em;}
h3 {font-size: 1.4em;}
h4 {font-size: 1.4em;}
h5 {font-size: 1.2em;}
h6 {font-size: 1em;}
#wrap {
width: 940px;
margin: 0px auto;
padding: 0px 10px 10px 10px;
background-color: #fff;
box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.5);
-webkit-box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.5);
}
#header {
width: 940px;
padding: 0px;
padding-top: 50px;
}
address {
float: left;
margin-right: 20px;
margin-top: 0px;
}
.poweredby {
background: url(../images/sn-tiny.png) no-repeat top left;
height: 40px;
font-size: 0.8em;
color: #fff;
line-height: 42px;
padding-left: 50px;
position: absolute;
top: 6px;
left: 0;
z-index: 99;
font-style: normal;
}
.poweredby a {
color: #fff !important;
font-weight: bold;
}
#site_nav_global_primary {
display: block;
position: absolute;
top: 0;
left: 0;
z-index: 98;
background-color: #364A84;
width: 960px;
margin-left: -10px;
margin-top: 0px;
height: 24px;
line-height: 20px;
text-align: right;
border-top: 10px solid #fff;
border-bottom: 1px solid #fff;
}
#site_nav_global_primary ul {
margin-right: -15px;
float: right;
}
#site_nav_global_primary li {
margin-right: 0px;
}
#site_nav_global_primary li:last-child {
margin-right: 16px;
}
#site_nav_global_primary a {
color: #fff !important;
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
padding: 2px 12px 2px 12px;
height: 20px;
display: block;
float: left;
}
#site_nav_global_primary a:hover {
color: #fff !important;
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
background: #4c619c;
text-decoration: none;
}
#site_notice {
color: #000;
float: right;
width: 280px;
padding: 10px;
margin-left: 40px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}
#site_notice a {
color: #3e3e8c;
}
#anon_notice {
color: #000;
clear: both;
background: none;
padding: 0px;
margin-bottom: 10px;
}
#anon_notice a {
color: #3e3e8c;
}
.form_notice {
float: right;
margin-top: 0px;
width: 460px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
background: #cdd1dd;
}
.form_notice fieldset {
width: 100%;
}
.form_notice textarea {
width: 328px;
height: 54px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}
.form_notice label.notice_data-attach,
.form_notice input.notice_data-attach {
top: 27px;
right: 86px;
}
.form_notice .notice_data-geo_wrap label,
.form_notice .notice_data-geo_wrap input {
top: 52px;
right: 86px;
}
.form_notice .submit {
font-size: 0.9em;
top: 80px;
right: -2px;
height: 2.4em;
width: 106px;
}
.form_notice .error,
.form_notice .success {
width: 341px;
}
.form_notice .error {
margin-left: 0px;
}
#core {
clear: both;
margin: 0px;
width: 940px;
margin-left: 0px;
margin-top: 4px;
}
#content {
padding-top: 10px;
width: 610px;
margin-right: 0px;
padding-left: 10px;
padding-right: 20px;
}
#site_nav_local_views {
background-color: #7080aa;
-webkit-border-top-left-radius: 6px;
-webkit-border-top-right-radius: 6px;
-moz-border-radius-topleft: 6px;
-moz-border-radius-topright: 6px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
height: 24px;
line-height: 20px;
margin-bottom: 0px;
padding-left: 0px;
}
#site_nav_local_views a {
color: #fff !important;
padding: 2px 12px 2px 12px;
display: block;
float: left;
height: 20px;
width: auto;
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
}
#site_nav_local_views li:first-child a {
-webkit-border-top-left-radius: 6px;
-moz-border-radius-topleft: 6px;
border-top-left-radius: 6px;
}
#site_nav_local_views a:hover {
background: #8e98b4 !important;
color: #fff !important;
text-decoration: none;
}
#site_nav_local_views .current a {
text-decoration: none;
background: #8e98b4 !important;
color: #fff !important;
}
#aside_primary {
width: 290px;
padding-left: 10px;
padding-top: 14px;
}
#aside_primary .section {
width: 280px;
margin-left: 0px;
margin-right: 10px;
}
#aside_primary h2 {
font-size: 1.4em;
margin-bottom: 8px;
border-bottom: 2px solid #fff;
}
.section ul.entities {
width: 290px;
}
.section .entities li {
margin-right: 17px;
margin-bottom: 10px;
width: 24px;
}
#popular_notices .avatar {
position: relative;
top: 2px;
margin-bottom: 4px;
}
#aside_primary td {
padding-right: 20px;
padding-bottom: 14px;
}
#aside_primary td .nickname {
line-height: 1.6em;
}
.section .avatar {
box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
-webkit-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
}
#content h1 {
margin-bottom: 8px;
border-bottom: 2px solid #f2f2f2;
}
#notices_primary {
margin-top: -5px;
}
#content .notice {
padding-bottom: 14px;
border-bottom: 2px dotted #eee;
}
.notice {
line-height: 1.35em;
margin-bottom: 10px;
}
#content .notice .author .photo {
left: 0px;
top: 6px;
}
#content .notice .entry-title {
min-height: 34px;
}
#showstream .notice .entry-title {
min-height: 1px;
}
#shownotice .notice .entry-title {
min-height:123px;
}
.notice div.entry-content {
font-size: 0.9em;
line-height: 1.2em;
margin-top: 6px;
opacity: 0.6;
}
.notice:hover div.entry-content {
opacity: 1;
}
.user_in .notice div.entry-content {
max-width: 440px;
}
div.entry-content a.response:before {
content: "(";
}
div.entry-content a.response:after {
content: ")";
}
.notice-options {
margin-top: 4px;
}
.pagination {
height: 1.2em;
}
#jOverlayContent button {
top: 20px;
right: 36px;
}
.entity_profile {
float: left;
width: 435px;
margin-top: 4px;
}
.entity_profile .entity_depiction {
margin-top: 4px;
}
.entity_actions {
width: 140px;
margin-top: 8px;
margin-bottom: 10px;
}
.entity_actions a, .entity_actions p, .entity_actions .entity_subscribe input, .entity_actions .entity_block input, .entity_actions .entity_moderation input, .entity_actions .entity_role input, .entity_actions .entity_nudge input, .entity_actions .entity_delete input {
text-shadow:0 1px 0 rgba(255,255,255,0.4);
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
background-color: #CDD1DD !important;
}
.entity_moderation:hover ul,
.entity_role:hover ul {
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
}
.entity_send-a-message .form_notice legend {
text-shadow:0 1px 0 rgba(255,255,255,0.4);
}
.entity_send-a-message .form_notice {
border: 1px solid #7B4E82;
}
.entity_send-a-message .form_notice .submit {
color: #fff !important;
top: 46px;
}
#aside_primary #entity_remote_subscribe a:hover {
background-color: #fff !important;
}
#entity_remote_subscribe .dialogbox {
border: 1px solid #7B4E82;
border-radius: 8px;
-moz-border-radius: 8px;
-webkit-border-radius: 8px;
}
#entity_remote_subscribe input {
padding-left: 4px;
}
#entity_remote_subscribe .submit_dialogbox {
margin-top: 10px;
float: right;
}
#filter_tags_item .submit {
left: 6px;
top: -3px;
}
.pagination {
height: 1.2em;
padding-bottom: 12px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}
#footer {
color: #000;
margin-left: 0px;
margin-right: 0px;
-webkit-border-top-left-radius: 6px;
-webkit-border-top-right-radius: 6px;
-moz-border-radius-topleft: 6px;
-moz-border-radius-topright: 6px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
}
#footer a {
color: #3e3e8c;
}
.error, .success {
background-color: #F7E8E8;
padding: 4px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}
.success {
background-color: #f2f2f2;
}
.form_notice input.submit, .form_settings input.submit, .form_settings input.cancel {
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
color:#fff;
font-weight: normal;
font-size: 1em;
height: 2.2em;
padding-left: 1em;
padding-right: 1em;
background: #7080aa;
background: -moz-linear-gradient(top, #7b8dbb , #7080aa);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#7b8dbb), color-stop(100%,#7080aa));
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#7b8dbb', endColorstr='#7080aa',GradientType=0 );
border-width: 1px;
}
.form_notice input.submit:hover, .form_settings input.submit:hover, .form_settings input.cancel:hover {
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.8);
background: #7b8dbb;
background: -moz-linear-gradient(top, #7080aa , #7b8dbb);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#7080aa), color-stop(100%,#7b8dbb));
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#7080aa', endColorstr='#7b8dbb',GradientType=0 );
}
.form_settings input#settings_design_reset, .form_settings input.cancel {
background: #e2e2e2;
color: #8e181b;
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.5);
}
.form_settings input#settings_design_reset:hover, .form_settings input.cancel:hover {
background: #f2f2f2;
color: #8e181b;
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.5);
}
.form_settings input.checkbox, .form_settings input.radio {
margin-left: 24%;
margin-top: 2px;
position: relative;
left: -14px;
}
.form_settings label.checkbox, .form_settings label.radio {
width: auto;
max-width: 60%;
position: relative;
left: -30px;
}
.form_settings li input.radio {
clear: left;
}
.form_settings label.radio {
margin-left: 10px;
margin-right: 10px;
text-align: left;
}
#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, #design_background-image_onoff p.form_guide {
margin-left: 26%;
}
#form_search ul.form_data #q {
margin-left: 10px;
}
.form_settings fieldset fieldset {
margin-bottom: 30px;
padding-top: 25px;
}
#content thead th {
text-align:left;
}
#content tbody th {
vertical-align:top;
text-align:left;
font-weight:normal;
padding-top:11px;
padding-right:18px;
}
#content tbody tr {
border-top: 1px dotted #bbb;
}
#content td {
padding:11px 18px 11px 0;
vertical-align:top;
}
#content td:last-child {
padding-right:0;
}
#realtime_actions {
position: relative !important;
float: right;
padding-top: 15px;
margin-bottom: -8px !important;
}
.realtime-popup #content {
padding-left: 4px !important;
padding-right: 4px !important;
margin-right: 0px;
}
.realtime-popup .form_notice textarea {
width: 325px !important;
}
.realtime-popup .form_notice .submit {
top: 59px !important;
right: 6px !important;
}
.realtime-popup .form_notice label.notice_data-attach, .realtime-popup .form_notice input.notice_data-attach {
right: 74px;
top: 3px !important;
}
.realtime-popup .form_notice .notice_data-geo_wrap label, .realtime-popup .form_notice .notice_data-geo_wrap input {
right: 8px;
top: 3px !important;
}
/* Bookmark specific styles */
#content .bookmark .entry-title {
margin-left: 0px;
}
.bookmark h3 {
margin: 0px 0px 8px 0px;
float: left;
line-height: 1.2em;
max-width: 92%;
}
.bookmark-notice-count {
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
padding: 1px 6px;
font-size: 1.2em;
line-height: 1.2em;
background: #fff;
border: 1px solid #7b8dbb;
color: #3e3e8c !important;
position: relative;
right: 4px;
margin-left: 10px;
}
.bookmark-notice-count:hover {
text-decoration: none;
background: #f2f2f2;
border: 1px solid #7b8dbb;
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.5);
}
.notice .bookmark-description {
clear: both;
margin-left: 0px;
margin-bottom: 0px;
}
.notice .bookmark-author {
margin-left: 0px;
float: left;
}
.bookmark-tags {
clear: both;
margin-bottom: 8px;
line-height: 1.6em;
}
ul.bookmark-tags a {
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
padding: 1px 6px;
background: #f2f2f2;
color: #3e3e8c !important;
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.5);
font-size: 0.9em;
}
ul.bookmark-tags a:hover {
background-color: #cdd1dd;
text-decoration: none;
}
.bookmark-avatar {
float: none !important;
position: relative;
top: 2px;
}
.bookmark div.entry-content {
font-size: 0.9em;
line-height: 1.2em;
margin-top: 6px;
opacity: 0.6;
margin-bottom: 0px;
}
.bookmark:hover div.entry-content {
opacity: 1;
}
.bookmark .notice-options {
margin-top: 16px;
}
#bookmarkpopup {
min-width: 600px;
margin-top: 0px;
height: 100%;
border: 10px solid #364A84;
background: #364A84;
}
#bookmarkpopup #wrap {
width: auto;
min-width: 560px;
padding: 40px 0px 25px 0px;
margin-right: 2px;
background: #fff url(../mobilelogo.png) no-repeat 6px 6px;
}
#bookmarkpopup #header {
width: auto;
padding: 0px 10px;
}
#bookmarkpopup .form_settings label {
margin-top: 2px;
text-align: right;
width: 24%;
font-size: 1.2em;
}
#bookmarkpopup .form_settings .form_data input {
width: 60%;
}
#bookmarkpopup .form_guide {
color: #777;
}
#bookmarkpopup #submit {
float: right;
margin-right: 0px;
}
#bookmarkpopup fieldset fieldset {
margin-bottom: 10px;
}
/* Onboard specific styles */
.onboard-flash {
border-radius: 6px;
-moz-border-radius: 6px;
-webkit-border-radius: 6px;
font-size: 1.1em;
box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.5);
-webkit-box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.5);
}
.onboard-flash p {
margin-bottom: 10px;
}
.onboard-flash .next:before {
content: '\00BB';
padding-right: 6px;
}
.onboard-breadcrumbs {
margin-bottom: 16px !important;
}
.onboard-breadcrumbs li {
background: none !important;
border-top: none !important;
padding: 6px 12px 2px 0px !important;
}
.onboard-breadcrumbs li:last-child {
padding-right: 0px !important;
}
.onboard-breadcrumbs a {
text-decoration: none;
}
.onboard-breadcrumbs a:hover {
color: #3e3e8c !important;
}
/* Billing specific styles */
#content table.billing_info {
margin-top: 10px;
background:rgba(240, 240, 240, 0.4);
}
#content table.billing_info th {
text-align: right;
width: 50%;
}
.invalid {
border: solid 2px red !important;
}
#payment_history table {
width: 100%;
}
#billingadminpanel .form_settings input {
margin-right: 0px;
}
}/*end of @media screen, projection, tv*/

View File

@ -1,81 +0,0 @@
/* Temporary copy of base styles for overriding */
input.checkbox,
input.radio {
top:0;
}
.form_notice textarea {
width: 328px;
}
.form_notice .count + label {
position:absolute;
top:25px;
left:83%;
text-indent:-9999px;
height:16px;
width:16px;
display:block;
left: 390px;
top: 27px;
}
.form_notice .submit {
width: 106px;
max-width: 106px;
}
.form_notice .attach-status,
.form_notice #notice_data-geo_selected {
width:78.75%;
}
.form_notice .attach-status button,
.form_notice #notice_data-geo_selected button {
padding:0 4px;
}
.notice-options input.submit {
font-size:0;
text-align:right;
text-indent:0;
}
.notice div.entry-content .timestamp a {
margin-right:4px;
}
.entity_profile {
width:64%;
}
.notice {
z-index:1;
}
.notice:hover {
z-index:9999;
}
.notice .thumbnail img {
z-index:9999;
}
.form_settings fieldset fieldset legend {
line-height:auto;
}
/* IE specific styles */
#site_nav_global_primary ul {
margin-right: 0px;
}
.notice-options input.submit {
color:#FFFFFF;
}
.form_notice input.notice_data-attach {
filter: alpha(opacity=0);
}
.form_notice .count + label {
background:transparent url(../../rebase/images/icons/icons-01.gif) no-repeat 0 -328px;
}
.form_notice .notice_data-geo_wrap label {
background:transparent url(../../rebase/images/icons/icons-01.gif) no-repeat 0 -1780px;
}
.form_notice .notice_data-geo_wrap label.checked {
background:transparent url(../../rebase/images/icons/icons-01.gif) no-repeat 0 -1846px;
}

View File

@ -1,204 +0,0 @@
/* mobile style */
body {
background-image: none;
min-width: 0;
}
#wrap {
margin: 0;
padding: 0;
min-width:0;
max-width:100%;
}
#header {
width: 96%;
padding: 0 2%;
padding-top: 20px;
}
.user_in #header {
padding-top: 40px;
}
address {
margin:1em 0 0 0;
float:left;
width:100%;
}
address img + .fn {
display:block;
margin-top:1em;
margin-right: 10px;
clear: left;
float:left;
}
#site_nav_global_primary {
margin:0;
width: 100%;
padding: 4px 0;
height: auto;
position:absolute;
top:0;
left:0;
font-size: 1em;
letter-spacing: 0em;
border-top: none;
}
#site_nav_global_primary li {
margin-left:0;
margin-right:0px;
float:left;
font-size:0.9em;
padding: 2px 4px;
line-height: 1em;
height: auto;
}
#site_nav_global_primary li a {
height: auto;
}
.form_notice {
float: left;
margin-left: 0px;
width: 300px;
padding: 4px;
}
#form_notice-direct.form_notice {
padding-top: 10px;
}
.form_notice textarea {
width: 210px;
height: 50px;
padding: 4px;
}
.form_notice .count {
position:absolute;
bottom:2px;
left: 175px;
font-size: 0.8em;
z-index:9;
}
#form_notice-direct.form_notice .count {
left: 0px;
}
/*input type=file no good in
iPhone/iPod Touch, Android, Opera Mini Simulator
*/
.form_notice .count + label,
.form_notice label[for="notice_data-attach"] {
display:none;
}
.form_notice input.notice_data-attach {
position:static;
clear:both;
width:65%;
height:auto;
display:block;
z-index:9;
padding:0;
margin:0;
background:none;
opacity:1;
}
.form_notice .submit {
text-align: center;
left: 230px;
top: 32px;
width: 70px;
font-size: 0.8em;
}
#form_notice-direct.form_notice .submit {
top: 62px;
}
#site_nav_local_views {
height: auto;
font-size: 0.9em;
line-height: 2em;
margin-bottom: 0px;
padding-left: 4px;
background: none;
}
#site_nav_local_views li {
margin-right: 6px;
}
#site_nav_local_views a {
background-color: #7080aa;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
margin-right: 2px;
margin-bottom: 2px;
}
#core {
width: 100%;
margin: 0;
}
#content {
width: 96%;
padding: 10px 2%;
margin: 0;
min-height: auto;
}
#footer {
margin: 0;
padding: 10px 4px 4px 4px;
}
.form_settings fieldset {
margin-bottom:7px;
}
.form_settings label {
width:auto;
display:block;
float:none;
text-align: left;
}
.form_settings .form_data li {
margin-bottom:7px;
}
.form_settings .form_data textarea,
.form_settings .form_data select,
.form_settings .form_data input {
margin-left:0;
display:block;
}
.form_settings .form_data textarea {
width:96.41%;
}
.form_settings .form_data label {
float:none;
}
.form_settings .form_data p.form_guide {
width:auto;
margin-left:0;
}
#settings_design_color .form_data {
width: auto;
margin-right: 0;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 857 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

View File

@ -1 +0,0 @@
include=rebase

File diff suppressed because it is too large Load Diff

View File

@ -1,82 +0,0 @@
/**
* @package StatusNet
* @author Sarven Capadisli <csarven@status.net>
* @copyright 2009-2010 StatusNet, Inc.
* @license http://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0 Unported
* @link http://status.net/
*/
/* IE specific styles */
.notice-options input.submit {
color:#fff;
}
#site_nav_local_views a {
background-color:#ddffcc;
}
#form_notice {
width:525px;
}
.form_notice .count {
top:-5px;
right:0;
}
#form_notice textarea {
width:97.75%;
}
.form_notice .count + label {
position:absolute;
top:87px;
left:77%;
text-indent:-9999px;
height:16px;
width:16px;
display:block;
}
#form_notice input.notice_data-attach {
filter: alpha(opacity = 0);
left:33.5%;
}
#form_notice .submit {
right:0;
}
#aside_primary {
width:181px;
}
#form_notice,
#anon_notice {
top:190px;
}
#public.user_in #content,
#groups.user_in #content,
#publictagcloud.user_in #content,
#featured.user_in #content,
#favorited.user_in #content,
#all.user_in #content,
#replies.user_in #content,
#showstream.user_in #content,
#showfavorites.user_in #content,
#inbox.user_in #content,
#outbox.user_in #content,
#subscriptions.user_in #content,
#subscribers.user_in #content,
#showgroup.user_in #content,
#conversation.user_in #content,
#attachment.user_in #content {
padding-top:138px;
}
.notice {
z-index:1;
}
.notice:hover {
z-index:9999;
}
.notice .thumbnail img {
z-index:9999;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 820 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 397 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 777 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

View File

@ -1,573 +0,0 @@
/** theme: default
*
* @package StatusNet
* @author Sarven Capadisli <csarven@status.net>
* @copyright 2009-2010 StatusNet, Inc.
* @license http://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0 Unported
* @link http://status.net/
*/
@media screen, projection, tv {
body,
a:active {
background-color:#CEE1E9;
}
body {
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
font-size:1em;
}
address {
margin-right:5.3%;
}
input, textarea, select {
border-width:2px;
border-style: solid;
border-radius:4px;
-moz-border-radius:4px;
-webkit-border-radius:4px;
}
input, textarea, select, option {
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
}
input, textarea, select,
.entity_actions .dialogbox input,
.mark-top {
border-color:#AAAAAA;
}
.form_settings fieldset fieldset {
background:rgba(240, 240, 240, 0.2);
box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
-moz-box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
}
#filter_tags ul li,
.entity_send-a-message .form_notice,
.pagination .nav_prev a,
.pagination .nav_next a,
.form_settings fieldset fieldset,
.entity_moderation:hover ul,
.entity_role:hover ul,
.dialogbox {
border-color:#DDDDDD;
}
.form_settings input.form_action-primary {
background:none;
}
.form_notice.warning .count,
.form_settings .form_note {
background-color:#9BB43E;
}
input.submit,
.form_notice.warning .count,
.form_settings .form_note,
.entity_actions a,
.entity_actions input,
.entity_moderation p,
.entity_role p,
button {
box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
}
.entity_actions a,
.entity_actions input,
.entity_actions p {
border-color:transparent;
background-color:transparent;
}
input:focus, textarea:focus, select:focus,
.form_notice.warning textarea,
.form_notice.warning .count,
.form_settings .form_note,
.entity_actions .dialogbox .form_data input:focus {
border-color:#9BB43E;
}
input.submit {
color:#FFFFFF;
}
.entity_actions input.submit {
border-color:transparent;
text-shadow:none;
}
.dialogbox .submit_dialogbox,
input.submit,
.form_notice input.submit {
background:#AAAAAA url(../../base/images/illustrations/illu_pattern-01.png) 0 0 repeat-x;
text-shadow:0 1px 0 #FFFFFF;
color:#000000;
border-color:#AAAAAA;
border-top-color:#CCCCCC;
border-left-color:#CCCCCC;
}
.dialogbox .submit_dialogbox:hover,
input.submit:hover {
background-position:0 -5px;
}
.dialogbox .submit_dialogbox:focus,
input.submit:focus {
background-position:0 -15px;
box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
text-shadow:none;
}
.form_notice label.notice_data-geo {
background-position:0 -1780px;
}
.form_notice label.notice_data-geo.checked {
background-position:0 -1846px;
}
a,
.form_settings input.form_action-primary,
.notice-options input,
.entity_actions a,
.entity_actions input,
.entity_moderation p,
.entity_role p {
color:#002FA7;
}
.notice,
.profile,
.application,
.peopletag,
#content tbody tr {
border-top-color:#C8D1D5;
}
#aside_primary {
background-color:#C8D1D5;
}
.form_notice .count {
color:#333333;
}
.form_notice.warning .count,
.dialogbox,
.entity_actions .dialogbox input {
color:#000000;
}
.form_notice label.notice_data-attach {
background-position:0 -328px;
}
.form_notice input.notice_data-attach {
opacity:0;
}
.form_notice label.notice_data-attach,
#export_data li a.rss,
#export_data li a.atom,
#export_data li a.foaf,
.entity_edit a,
.entity_send-a-message a,
.entity_nudge p,
.form_user_nudge input.submit,
.form_user_block input.submit,
.form_user_unblock input.submit,
.form_group_block input.submit,
.form_group_unblock input.submit,
.form_make_admin input.submit,
.notice .attachment,
.notice-options .notice_reply,
.notice-options form.form_favor input.submit,
.notice-options form.form_disfavor input.submit,
.notice-options .notice_delete,
.notice-options form.form_repeat input.submit,
#new_group a,
.pagination .nav_prev a,
.pagination .nav_next a,
button.close,
.form_group_leave input.submit,
.form_user_unsubscribe input.submit,
.form_group_join input.submit,
.form_user_subscribe input.submit,
.form_user_remove_peopletag input.submit,
.form_user_add_peopletag input.submit,
.form_peopletag_subscribe input.submit,
.form_peopletag_unsubscribe input.submit,
.form_remote_authorize input.submit,
.entity_subscribe a,
.entity_tag a,
.entity_moderation p,
.entity_sandbox input.submit,
.entity_silence input.submit,
.entity_delete input.submit,
.entity_role p,
.entity_role_administrator input.submit,
.entity_role_moderator input.submit,
.notice-options .repeated,
.form_notice label.notice_data-geo,
button.minimize,
.form_reset_key input.submit,
.entity_clear input.submit,
.entity_flag input.submit,
.entity_flag p,
.entity_subscribe input.submit,
#realtime_play,
#realtime_pause,
#realtime_popup,
.peopletags_edit_button,
.mode-private .privacy_mode {
background-image:url(../../base/images/icons/icons-01.gif);
background-repeat:no-repeat;
background-color:transparent;
}
#wrap form.processing input.submit,
#core a.processing,
.dialogbox.processing .submit_dialogbox {
background:#FFFFFF url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%;
}
.notice-options .form_repeat.processing {
background-image:none;
}
#content {
box-shadow:5px 7px 7px rgba(194, 194, 194, 0.3);
-moz-box-shadow:5px 7px 7px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:5px 7px 7px rgba(194, 194, 194, 0.3);
}
#content,
#site_nav_local_views a,
#aside_primary {
border-color:transparent;
}
#content,
#site_nav_local_views .current a,
.entity_send-a-message .form_notice,
.entity_moderation:hover ul,
.entity_role:hover ul,
.dialogbox {
background-color:#FFFFFF;
}
#site_nav_local_views li.current {
box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
-webkit-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.5);
}
#site_nav_local_views a {
background-color:rgba(194, 194, 194, 0.5);
}
#site_nav_local_views a:hover {
background-color:rgba(255, 255, 255, 0.7);
}
#site_nav_local_views .current a {
text-shadow: rgba(194,194,194,0.5) 1px 1px 1px;
}
.processing {
background-image:url(../../base/images/icons/icon_processing.gif);
background-repeat:no-repeat;
background-position:47% 47%;
}
.error {
background-color:#F7E8E8;
}
.success {
background-color:#EFF3DC;
}
button.close {
background-position:0 -1120px;
}
button.minimize {
background-position:0 -1912px;
}
#anon_notice {
background-color:#87B4C8;
color:#FFFFFF;
border-color:#FFFFFF;
}
#showstream #anon_notice {
background-color:#9BB43E;
}
#export_data li a {
background-repeat:no-repeat;
}
#export_data li a.rss {
background-position:0 -130px;
}
#export_data li a.atom {
background-position:0 -64px;
}
#export_data li a.foaf {
background-position:0 1px;
}
.form_group_join input.submit,
.form_group_leave input.submit,
.form_user_subscribe input.submit,
.form_peopletag_subscribe input.submit,
.form_peopletag_unsubscribe input.submit,
.form_user_unsubscribe input.submit,
.form_remote_authorize input.submit,
.form_user_add_peopletag input.submit,
.form_user_remove_peopletag input.submit,
.entity_subscribe a {
background-color:#AAAAAA;
color:#FFFFFF;
}
.form_group_leave input.submit,
.form_user_unsubscribe input.submit,
.form_user_remove_peopletag input.submit,
.form_peopletag_unsubscribe input.submit {
background-position:5px -1246px;
}
.form_group_join input.submit,
.form_user_subscribe input.submit,
.form_peopletag_subscribe input.submit,
.form_remote_authorize input.submit,
.form_user_add_peopletag input.submit,
.entity_subscribe a,
.entity_tag a {
background-position:5px -1181px;
}
.profile-lister li {
border-top: 1px #eee solid;
}
.profile-lister li:first-child {
border:0;
}
#profile_search_results.profile-lister {
max-height:800px;
margin:10px 0;
border:1px #ddd solid;
}
.entity_edit a, .peopletags_edit_button {
background-position: 5px -719px;
}
.peopletags_edit_button {
background-position: 0px -724px;
}
.entity_tags li.mode-private {
color: #829D25;
}
.mode-private .privacy_mode {
background-position: 0px -1978px;
}
.entity_send-a-message a {
background-position: 5px -852px;
}
.entity_send-a-message .form_notice,
.entity_moderation:hover ul,
.entity_role:hover ul,
.dialogbox,
#profile_search_results {
box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
-moz-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
-webkit-box-shadow:3px 7px 5px rgba(194, 194, 194, 0.7);
}
.entity_nudge p,
.form_user_nudge input.submit {
background-position: 5px -785px;
}
.form_user_block input.submit,
.form_user_unblock input.submit,
.form_group_block input.submit,
.form_group_unblock input.submit {
background-position: 5px -918px;
}
.form_make_admin input.submit {
background-position: 5px -983px;
}
.entity_moderation p {
background-position: 5px -1313px;
}
.entity_sandbox input.submit {
background-position: 5px -1380px;
}
.entity_silence input.submit {
background-position: 5px -1445px;
}
.entity_delete input.submit {
background-position: 5px -1511px;
}
.entity_sandbox .form_user_unsandbox input.submit {
background-position: 5px -2568px;
}
.entity_silence .form_user_unsilence input.submit {
background-position: 5px -2633px;
}
.entity_role p {
background-position: 5px -2436px;
}
.entity_role_administrator .form_user_grantrole input.submit {
background-position: 5px -983px;
}
.entity_role_moderator .form_user_grantrole input.submit {
background-position: 5px -1313px;
}
.entity_role_administrator .form_user_revokerole input.submit {
background-position: 5px -2699px;
}
.entity_role_moderator .form_user_revokerole input.submit {
background-position: 5px -2501px;
}
.form_reset_key input.submit {
background-position: 5px -1973px;
}
.entity_clear input.submit {
background-position: 5px -2039px;
}
.entity_flag input.submit,
.entity_flag p {
background-position: 5px -2105px;
}
.entity_subscribe input.accept {
background-position: 5px -2171px;
}
.entity_subscribe input.reject {
background-position: 5px -2237px;
}
#realtime_play {
background-position: 0 -2308px;
}
#realtime_pause {
background-position: 0 -2374px;
}
#realtime_popup {
background-position: 0 -1714px;
}
/* NOTICES */
.notice .attachment {
background-position:0 -394px;
}
.notice .attachment.more {
background-position:0 -2770px;
}
#attachments .attachment {
background:none;
}
.notice-options .notice_reply {
background-position:0 -592px;
}
.notice-options form.form_favor input.submit {
background-position:0 -460px;
}
.notice-options form.form_disfavor input.submit {
background-position:0 -526px;
}
.notice-options .notice_delete {
background-position:0 -658px;
}
.notice-options form.form_repeat input.submit {
background-position:0 -1582px;
}
.notice-options .repeated {
background-position:0 -1648px;
}
.notices .attachment.more,
.notices div.entry-content,
.notices div.notice-options {
opacity:0.4;
}
.notices li:hover .attachment.more,
.notices li:hover div.entry-content,
.notices li:hover div.notice-options {
opacity:1;
}
.opaque {
opacity:1 !important;
}
.attachment.more,
.notice-options a,
.notice-options input {
font-family:sans-serif;
box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
}
.attachment.more:focus {
box-shadow:none;
-moz-box-shadow:none;
-webkit-box-shadow:none;
outline:none;
}
#content .notices li:hover,
#content .applications li:hover,
#content tbody tr:hover {
background-color:rgba(240, 240, 240, 0.2);
}
#conversation .notices li:hover {
background-color:transparent;
}
.notices .notices {
background-color:rgba(200, 200, 200, 0.050);
}
.notices .notices .notices {
background-color:rgba(200, 200, 200, 0.100);
}
.notices .notices .notices .notices {
background-color:rgba(200, 200, 200, 0.150);
}
.notices .notices .notices .notices .notices {
background-color:rgba(200, 200, 200, 0.300);
}
/*END: NOTICES */
#new_group a {
background-position:0 -1054px;
}
.pagination .nav_prev a,
.pagination .nav_next a {
background-repeat:no-repeat;
box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
}
.pagination .nav_prev a {
background-position:10% -187px;
}
.pagination .nav_next a {
background-position:105% -252px;
}
.pagination .nav .processing {
background-image:url(../../base/images/icons/icon_processing.gif);
box-shadow:none;
-moz-box-shadow:none;
-webkit-box-shadow:none;
outline:none;
}
.pagination .nav_next a.processing {
background-position:90% 47%;
}
.pagination .nav_prev a.processing {
background-position:10% 47%;
}
.tagInputDiv {
background-color: white;
border: 1px solid lightgray;
}
.tagInputDiv .mode-public .privacy_mode {
display:none;
}
.tagInputSel {
background-color: gray;
color:white;
}
}/*end of @media screen, projection, tv*/

View File

@ -1,27 +0,0 @@
/**
* @package StatusNet
* @author Sarven Capadisli <csarven@status.net>
* @copyright 2009-2010 StatusNet, Inc.
* @license http://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0 Unported
* @link http://status.net/
*/
/* IE specific styles */
.notice-options input.submit {
color:#FFFFFF;
}
#site_nav_local_views a {
background-color:#C8D1D5;
}
.form_notice .count + label {
background:transparent url(../../base/images/icons/icons-01.gif) no-repeat 0 -328px;
}
.form_notice input.notice_data-attach {
filter: alpha(opacity=0);
}
.notice-options form.form_favor input.submit {
background-position:0 -460px;
}
.notice-options form.form_disfavor input.submit {
background-position:0 -526px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -1 +0,0 @@
include=base

Some files were not shown because too many files have changed in this diff Show More