summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README68
-rw-r--r--actions/all.php14
-rw-r--r--actions/avatarbynickname.php4
-rw-r--r--actions/avatarsettings.php38
-rw-r--r--actions/deletenotice.php15
-rw-r--r--actions/facebookhome.php5
-rw-r--r--actions/facebookinvite.php8
-rw-r--r--actions/favorited.php3
-rw-r--r--actions/finishopenidlogin.php2
-rw-r--r--actions/grouplogo.php22
-rw-r--r--actions/login.php34
-rw-r--r--actions/newnotice.php8
-rw-r--r--actions/noticesearch.php24
-rw-r--r--actions/openidlogin.php13
-rw-r--r--actions/opensearch.php4
-rw-r--r--actions/public.php3
-rw-r--r--actions/replies.php2
-rw-r--r--actions/showfavorites.php2
-rw-r--r--actions/showgroup.php2
-rw-r--r--actions/showstream.php70
-rw-r--r--actions/smssettings.php51
-rw-r--r--actions/tag.php3
-rw-r--r--actions/tagother.php2
-rw-r--r--actions/tagrss.php16
-rw-r--r--actions/twitapistatuses.php1
-rw-r--r--actions/twittersettings.php4
-rw-r--r--actions/usergroups.php6
-rw-r--r--classes/Avatar.php50
-rw-r--r--classes/Channel.php93
-rw-r--r--classes/Profile.php21
-rw-r--r--classes/User.php11
-rwxr-xr-xclasses/User_group.php10
-rw-r--r--db/laconica_pg.sql57
-rw-r--r--js/facebookapp.js10
-rw-r--r--lib/action.php20
-rw-r--r--lib/common.php2
-rw-r--r--lib/error.php2
-rw-r--r--lib/facebookaction.php171
-rw-r--r--lib/htmloutputter.php4
-rw-r--r--lib/imagefile.php61
-rw-r--r--lib/jabber.php2
-rw-r--r--lib/mail.php2
-rw-r--r--lib/mailbox.php6
-rw-r--r--lib/noticelist.php17
-rw-r--r--lib/noticesection.php2
-rw-r--r--lib/personal.php1
-rw-r--r--lib/popularnoticesection.php2
-rw-r--r--lib/profilelist.php2
-rw-r--r--lib/profileminilist.php2
-rw-r--r--lib/profilesection.php2
-rw-r--r--lib/rssaction.php4
-rw-r--r--lib/settingsaction.php7
-rw-r--r--lib/twitterapi.php2
-rw-r--r--lib/util.php82
-rwxr-xr-xscripts/enjitqueuehandler.php2
-rw-r--r--theme/base/css/display.css58
-rw-r--r--theme/base/css/facebookapp.css84
-rw-r--r--theme/base/images/icons/icon_atom.jpgbin1117 -> 0 bytes
-rw-r--r--theme/base/images/icons/icon_atom.pngbin0 -> 820 bytes
-rw-r--r--theme/base/images/icons/icon_rss.jpgbin1166 -> 0 bytes
-rw-r--r--theme/base/images/icons/icon_rss.pngbin0 -> 777 bytes
-rw-r--r--theme/default/bg-body.gifbin154 -> 0 bytes
-rw-r--r--theme/default/bg-header.gifbin2463 -> 0 bytes
-rw-r--r--theme/default/css/display.css63
-rw-r--r--theme/default/css/ie.css9
-rw-r--r--theme/default/display.css1107
-rw-r--r--theme/default/icon_feed.jpgbin521 -> 0 bytes
-rw-r--r--theme/default/icon_foaf.gifbin1144 -> 0 bytes
-rw-r--r--theme/default/icon_heart-01.gifbin67 -> 0 bytes
-rw-r--r--theme/default/icon_heart-02.gifbin74 -> 0 bytes
-rw-r--r--theme/default/icon_tag-01.gifbin586 -> 0 bytes
-rw-r--r--theme/default/ie6.css73
-rw-r--r--theme/default/ie7.css39
-rw-r--r--theme/default/login-bg.gifbin328 -> 0 bytes
-rw-r--r--theme/identica/bg-body.gifbin136 -> 0 bytes
-rw-r--r--theme/identica/bg-header.gifbin2469 -> 0 bytes
-rw-r--r--theme/identica/css/display.css58
-rw-r--r--theme/identica/display.css187
-rw-r--r--theme/identica/ie6.css14
-rw-r--r--theme/identica/ie7.css3
-rw-r--r--theme/identica/login-bg.gifbin328 -> 0 bytes
81 files changed, 842 insertions, 1924 deletions
diff --git a/README b/README
index a60017063..989fcb7f0 100644
--- a/README
+++ b/README
@@ -2,8 +2,8 @@
README
------
-Laconica 0.7.0 ("Rockville")
-30 January 2009
+Laconica 0.7.1 ("West of the Fields")
+6 February 2009
This is the README file for Laconica, the Open Source microblogging
platform. It includes installation instructions, descriptions of
@@ -26,14 +26,14 @@ instant messenger programs (GTalk/Jabber), and specially-designed
desktop clients that support the Twitter API.
Laconica supports an open standard called OpenMicroBlogging
-(http://openmicroblogging.org/) that lets users on different Web sites
+<http://openmicroblogging.org/> that lets users on different Web sites
or in different companies subscribe to each others' notices. It
enables a distributed social network spread all across the Web.
Laconica was originally developed for the Open Software Service,
-Identi.ca (http://identi.ca/). It is shared with you in hope that you
+Identi.ca <http://identi.ca/>. It is shared with you in hope that you
too make an Open Software Service available to your users. To learn
-more, please see the Open Software Service Definition 1.0:
+more, please see the Open Software Service Definition 1.1:
http://www.opendefinition.org/ossd
@@ -71,8 +71,27 @@ for additional terms.
New this version
================
-This is a major feature release, and includes some bug fixes from the
-previous version (0.6.4, released December 14 2008.)
+This is a minor bug-fix release since version 0.7.0, released Jan 29
+2009. Notable changes this version:
+
+- Vast improvement in auto-linking to URLs.
+- Link to group search from user's group page
+- Improved interface in Facebook application
+- Fix bad redirects in delete notice
+- Updated PostgreSQL database creation script
+- Show filesize in avatar/logo upload
+- Vastly improved avatar/logo upload
+- Allow re-authentication with OpenID
+- Correctly link hashtabs inside parens and brackets
+- Group and avatar image transparency works
+- Better handling of commands through the Web and Ajax channels
+- Fix links for profile page feeds
+- Fixed destroy method in API
+- Fix endpoint of Connect menu when XMPP disabled
+- Show number of group members
+- Enable configuration files in /etc/laconica/
+
+Changes in version 0.7.0:
- Support for groups. Users can join groups and send themed notices
to those groups. All other members of the group receive the notices.
@@ -199,9 +218,9 @@ especially if you've previously installed PHP/MySQL packages.
1. Unpack the tarball you downloaded on your Web server. Usually a
command like this will work:
- tar zxf laconica-0.7.0.tar.gz
+ tar zxf laconica-0.7.1.tar.gz
- ...which will make a laconica-0.7.0 subdirectory in your current
+ ...which will make a laconica-0.7.1 subdirectory in your current
directory. (If you don't have shell access on your Web server, you
may have to unpack the tarball on your local computer and FTP the
files to the server.)
@@ -209,7 +228,7 @@ especially if you've previously installed PHP/MySQL packages.
2. Move the tarball to a directory of your choosing in your Web root
directory. Usually something like this will work:
- mv laconica-0.7.0 /var/www/mublog
+ mv laconica-0.7.1 /var/www/mublog
This will make your Laconica instance available in the mublog path of
your server, like "http://example.net/mublog". "microblog" or
@@ -404,7 +423,7 @@ config.php, and access to the Laconica database from the mail server.
XMPP
----
-XMPP (eXtended Message and Presence Protocol, http://xmpp.org/) is the
+XMPP (eXtended Message and Presence Protocol, <http://xmpp.org/>) is the
instant-messenger protocol that drives Jabber and GTalk IM. You can
distribute messages via XMPP using the system below; however, you
need to run the XMPP incoming daemon to allow incoming messages as
@@ -537,7 +556,7 @@ Sample cron job:
Sitemaps
--------
-Sitemap files (http://sitemaps.org/) are a very nice way of telling
+Sitemap files <http://sitemaps.org/> are a very nice way of telling
search engines and other interested bots what's available on your site
and what's changed recently. You can generate sitemap files for your
Laconica instance.
@@ -558,7 +577,7 @@ Laconica instance.
like './sitemapindex.xml'. sitemap-directory is the directory where
you want the sitemaps stored, like './sitemaps/' (make sure the dir
exists). URL-prefix-for-sitemaps is the full URL for the sitemap dir,
- typically something like 'http://example.net/mublog/sitemaps/'.
+ typically something like <http://example.net/mublog/sitemaps/>.
You can use several methods for submitting your sitemap index to
search engines to get your site indexed. One is to add a line like the
@@ -612,7 +631,7 @@ modification to use the new output format.
Translation
-----------
-Translations in Laconica use the gettext system (http://www.gnu.org/software/gettext/).
+Translations in Laconica use the gettext system <http://www.gnu.org/software/gettext/>.
Theoretically, you can add your own sub-directory to the locale/
subdirectory to add a new language to your system. You'll need to
compile the ".po" files into ".mo" files, however.
@@ -627,7 +646,7 @@ Backups
There is no built-in system for doing backups in Laconica. You can make
backups of a working Laconica system by backing up the database and
-the Web directory. To backup the database use mysqldump (http://ur1.ca/7xo)
+the Web directory. To backup the database use mysqldump <http://ur1.ca/7xo>
and to backup the Web directory, try tar.
Private
@@ -653,7 +672,7 @@ Upgrading
If you've been using Laconica 0.6, 0.5 or lower, or if you've been
tracking the "git" version of the software, you will probably want
to upgrade and keep your existing data. There is no automated upgrade
-procedure in Laconica 0.7.0. Try these step-by-step instructions; read
+procedure in Laconica 0.7.1. Try these step-by-step instructions; read
to the end first before trying them.
0. Download Laconica and set up all the prerequisites as if you were
@@ -819,7 +838,7 @@ db
--
This section is a reference to the configuration options for
-DB_DataObject (see http://ur1.ca/7xp). The ones that you may want to
+DB_DataObject (see <http://ur1.ca/7xp>). The ones that you may want to
set are listed below for clarity.
database: a DSN (Data Source Name) for your Laconica database. This is
@@ -919,7 +938,7 @@ server: If set, defines another server where avatars are stored in the
the client to speed up page loading, either with another
virtual server or with an NFS or SAMBA share. Clients
typically only make 2 connections to a single server at a
- time (http://ur1.ca/6ih), so this can parallelize the job.
+ time <http://ur1.ca/6ih>, so this can parallelize the job.
Defaults to null.
public
@@ -1000,7 +1019,7 @@ memcached
---------
You can get a significant boost in performance by caching some
-database data in memcached (http://www.danga.com/memcached/).
+database data in memcached <http://www.danga.com/memcached/>.
enabled: Set to true to enable. Default false.
server: a string with the hostname of the memcached server. Can also
@@ -1011,7 +1030,7 @@ sphinx
You can get a significant boost in performance using Sphinx Search
instead of your database server to search for users and notices.
-(http://sphinxsearch.com/).
+<http://sphinxsearch.com/>.
enabled: Set to true to enable. Default false.
server: a string with the hostname of the sphinx server.
@@ -1024,7 +1043,7 @@ A catch-all for integration with other systems.
source: The name to use for the source of posts to Twitter. Defaults
to 'laconica', but if you request your own source name from
- Twitter (http://twitter.com/help/request_source), you can use
+ Twitter <http://twitter.com/help/request_source>, you can use
that here instead. Status updates on Twitter will then have
links to your site.
@@ -1070,7 +1089,7 @@ repository (see below), and you get a compilation error ("unexpected
T_STRING") in the browser, check to see that you don't have any
conflicts in your code.
-If you upgraded to Laconica 0.7.0 without reading the "Notice inboxes"
+If you upgraded to Laconica 0.7.1 without reading the "Notice inboxes"
section above, and all your users' 'Personal' tabs are empty, read the
"Notice inboxes" section above.
@@ -1101,7 +1120,7 @@ Unstable version
If you're adventurous or impatient, you may want to install the
development version of Laconica. To get it, use the git version
-control tool (http://git-scm.com/) like so:
+control tool <http://git-scm.com/> like so:
git clone http://laconi.ca/software/laconica.git
@@ -1114,7 +1133,7 @@ There are several ways to get more information about Laconica.
* There is a mailing list for Laconica developers and admins at
http://mail.laconi.ca/mailman/listinfo/laconica-dev
-* The #laconica IRC channel on freenode.net (http://www.freenode.net/).
+* The #laconica IRC channel on freenode.net <http://www.freenode.net/>.
* The Laconica wiki, http://laconi.ca/trac/
Feedback
@@ -1155,6 +1174,7 @@ if anyone's been overlooked in error.
* Meitar Moscovitz
* Ken Sheppardson (Trac server, man-about-town)
* Tiago 'gouki' Faria (i18n managerx)
+* Sean Murphy
Thanks also to the developers of our upstream library code and to the
thousands of people who have tried out Identi.ca, installed Laconi.ca,
diff --git a/actions/all.php b/actions/all.php
index 428466f24..d75d1b946 100644
--- a/actions/all.php
+++ b/actions/all.php
@@ -42,6 +42,9 @@ class AllAction extends Action
if (!$this->page) {
$this->page = 1;
}
+
+ common_set_returnto($this->selfUrl());
+
return true;
}
@@ -101,4 +104,15 @@ class AllAction extends Action
$this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE,
$this->page, 'all', array('nickname' => $this->user->nickname));
}
+
+ function showPageTitle()
+ {
+ $user =& common_current_user();
+ if ($user && ($user->id == $this->user->id)) {
+ $this->element('h1', NULL, _("You and friends"));
+ } else {
+ $this->element('h1', NULL, sprintf(_('%s and friends'), $this->user->nickname));
+ }
+ }
+
}
diff --git a/actions/avatarbynickname.php b/actions/avatarbynickname.php
index 9bbdecefa..ca58c9653 100644
--- a/actions/avatarbynickname.php
+++ b/actions/avatarbynickname.php
@@ -90,9 +90,9 @@ class AvatarbynicknameAction extends Action
$url = $avatar->url;
} else {
if ($size == 'original') {
- $url = common_default_avatar(AVATAR_PROFILE_SIZE);
+ $url = Avatar::defaultImage(AVATAR_PROFILE_SIZE);
} else {
- $url = common_default_avatar($size+0);
+ $url = Avatar::defaultImage($size+0);
}
}
common_redirect($url, 302);
diff --git a/actions/avatarsettings.php b/actions/avatarsettings.php
index 139d85b4c..7dd53f6eb 100644
--- a/actions/avatarsettings.php
+++ b/actions/avatarsettings.php
@@ -75,7 +75,7 @@ class AvatarsettingsAction extends AccountSettingsAction
function getInstructions()
{
- return _('You can upload your personal avatar. The maximum file size is '.ImageFile::maxFileSize().'.');
+ return sprintf(_('You can upload your personal avatar. The maximum file size is %s.'), ImageFile::maxFileSize());
}
/**
@@ -155,7 +155,7 @@ class AvatarsettingsAction extends AccountSettingsAction
$this->element('input', array('name' => 'MAX_FILE_SIZE',
'type' => 'hidden',
'id' => 'MAX_FILE_SIZE',
- 'value' => ImageFile::maxFileSize(true)));
+ 'value' => ImageFile::maxFileSizeInt()));
$this->elementEnd('li');
$this->elementEnd('ul');
@@ -200,7 +200,7 @@ class AvatarsettingsAction extends AccountSettingsAction
'class' => 'avatar_view'));
$this->element('h2', null, _("Original"));
$this->elementStart('div', array('id'=>'avatar_original_view'));
- $this->element('img', array('src' => common_avatar_url($this->filedata['filename']),
+ $this->element('img', array('src' => Avatar::url($this->filedata['filename']),
'width' => $this->filedata['width'],
'height' => $this->filedata['height'],
'alt' => $user->nickname));
@@ -212,7 +212,7 @@ class AvatarsettingsAction extends AccountSettingsAction
'class' => 'avatar_view'));
$this->element('h2', null, _("Preview"));
$this->elementStart('div', array('id'=>'avatar_preview_view'));
- $this->element('img', array('src' => common_avatar_url($this->filedata['filename']),
+ $this->element('img', array('src' => Avatar::url($this->filedata['filename']),
'width' => AVATAR_PROFILE_SIZE,
'height' => AVATAR_PROFILE_SIZE,
'alt' => $user->nickname));
@@ -281,12 +281,12 @@ class AvatarsettingsAction extends AccountSettingsAction
$cur = common_current_user();
- $filename = common_avatar_filename($cur->id,
- image_type_to_extension($imagefile->type),
- null,
- 'tmp'.common_timestamp());
+ $filename = Avatar::filename($cur->id,
+ image_type_to_extension($imagefile->type),
+ null,
+ 'tmp'.common_timestamp());
- $filepath = common_avatar_path($filename);
+ $filepath = Avatar::path($filename);
move_uploaded_file($imagefile->filepath, $filepath);
@@ -320,7 +320,7 @@ class AvatarsettingsAction extends AccountSettingsAction
$this->serverError(_('Lost our file data.'));
return;
}
-
+
// If image is not being cropped assume pos & dimentions of original
$dest_x = $this->arg('avatar_crop_x') ? $this->arg('avatar_crop_x'):0;
$dest_y = $this->arg('avatar_crop_y') ? $this->arg('avatar_crop_y'):0;
@@ -328,10 +328,10 @@ class AvatarsettingsAction extends AccountSettingsAction
$dest_h = $this->arg('avatar_crop_h') ? $this->arg('avatar_crop_h'):$filedata['height'];
$size = min($dest_w, $dest_h);
$size = ($size > MAX_ORIGINAL) ? MAX_ORIGINAL:$size;
-
+
$user = common_current_user();
$profile = $user->getProfile();
-
+
$imagefile = new ImageFile($user->id, $filedata['filepath']);
$filename = $imagefile->resize($size, $dest_x, $dest_y, $dest_w, $dest_h);
@@ -373,12 +373,14 @@ class AvatarsettingsAction extends AccountSettingsAction
{
parent::showScripts();
- $jcropPack = common_path('js/jcrop/jquery.Jcrop.pack.js');
- $jcropGo = common_path('js/jcrop/jquery.Jcrop.go.js');
+ if ($this->mode == 'crop') {
+ $jcropPack = common_path('js/jcrop/jquery.Jcrop.pack.js');
+ $jcropGo = common_path('js/jcrop/jquery.Jcrop.go.js');
- $this->element('script', array('type' => 'text/javascript',
- 'src' => $jcropPack));
- $this->element('script', array('type' => 'text/javascript',
- 'src' => $jcropGo));
+ $this->element('script', array('type' => 'text/javascript',
+ 'src' => $jcropPack));
+ $this->element('script', array('type' => 'text/javascript',
+ 'src' => $jcropGo));
+ }
}
}
diff --git a/actions/deletenotice.php b/actions/deletenotice.php
index d4b8e50e5..16e2df889 100644
--- a/actions/deletenotice.php
+++ b/actions/deletenotice.php
@@ -103,17 +103,18 @@ class DeletenoticeAction extends DeleteAction
function showContent()
{
- $this->elementStart('form', array('id' => 'notice_delete_form',
+ $this->elementStart('form', array('id' => 'form_notice_delete',
+ 'class' => 'form_settings',
'method' => 'post',
'action' => common_local_url('deletenotice')));
+ $this->elementStart('fieldset');
+ $this->element('legend', null, _('Delete notice'));
$this->hidden('token', common_session_token());
$this->hidden('notice', $this->trimmed('notice'));
- $this->elementStart('p');
- $this->element('span', array('id' => 'confirmation_text'),
- _('Are you sure you want to delete this notice?'));
- $this->submit('yes', _('Yes'));
- $this->submit('no', _('No'));
- $this->elementEnd('p');
+ $this->element('p', null, _('Are you sure you want to delete this notice?'));
+ $this->submit('form_action-yes', _('Yes'), 'submit form_action-primary', 'yes');
+ $this->submit('form_action-no', _('No'), 'submit form_action-secondary', 'no');
+ $this->elementEnd('fieldset');
$this->elementEnd('form');
}
diff --git a/actions/facebookhome.php b/actions/facebookhome.php
index d943104c2..5946e6c98 100644
--- a/actions/facebookhome.php
+++ b/actions/facebookhome.php
@@ -148,14 +148,11 @@ class FacebookhomeAction extends FacebookAction
function showNoticeForm()
{
-
$post_action = "$this->app_uri/index.php";
$notice_form = new FacebookNoticeForm($this, $post_action, null,
$post_action, $this->user);
$notice_form->show();
-
-
}
function title()
@@ -169,7 +166,6 @@ class FacebookhomeAction extends FacebookAction
function showContent()
{
-
$notice = $this->user->noticesWithFriends(($this->page-1) *
NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
@@ -179,7 +175,6 @@ class FacebookhomeAction extends FacebookAction
$this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE,
$this->page, 'index.php', array('nickname' => $this->user->nickname));
-
}
function showNoticeList($notice)
diff --git a/actions/facebookinvite.php b/actions/facebookinvite.php
index b7224783a..3c872f94b 100644
--- a/actions/facebookinvite.php
+++ b/actions/facebookinvite.php
@@ -73,7 +73,7 @@ class FacebookinviteAction extends FacebookAction
$friend_ids = $_POST['ids']; // XXX: Hmm... is this the best way to acces the list?
- $this->elementStart("ul");
+ $this->elementStart('ul', array('id' => 'facebook-friends'));
foreach ($friend_ids as $friend) {
$this->elementStart('li');
@@ -112,11 +112,11 @@ class FacebookinviteAction extends FacebookAction
$this->element('h2', null, sprintf(_('Friends already using %s:'),
common_config('site', 'name')));
- $this->elementStart("ul");
-
+ $this->elementStart('ul', array('id' => 'facebook-friends'));
+
foreach ($exclude_ids as $friend) {
$this->elementStart('li');
- $this->element('fb:profile-pic', array('uid' => $friend));
+ $this->element('fb:profile-pic', array('uid' => $friend, 'size' => 'square'));
$this->element('fb:name', array('uid' => $friend,
'capitalize' => 'true'));
$this->elementEnd('li');
diff --git a/actions/favorited.php b/actions/favorited.php
index 4155b3a23..fd5ff413c 100644
--- a/actions/favorited.php
+++ b/actions/favorited.php
@@ -104,6 +104,9 @@ class FavoritedAction extends Action
{
parent::prepare($args);
$this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
+
+ common_set_returnto($this->selfUrl());
+
return true;
}
diff --git a/actions/finishopenidlogin.php b/actions/finishopenidlogin.php
index 880a9505b..bc9151120 100644
--- a/actions/finishopenidlogin.php
+++ b/actions/finishopenidlogin.php
@@ -30,7 +30,7 @@ class FinishopenidloginAction extends Action
function handle($args)
{
parent::handle($args);
- if (common_logged_in()) {
+ if (common_is_real_login()) {
$this->clientError(_('Already logged in.'));
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$token = $this->trimmed('token');
diff --git a/actions/grouplogo.php b/actions/grouplogo.php
index 473303373..499db4ae8 100644
--- a/actions/grouplogo.php
+++ b/actions/grouplogo.php
@@ -152,7 +152,7 @@ class GrouplogoAction extends Action
function getInstructions()
{
- return _('You can upload a logo image for your group. The maximum file size is '.ImageFile::maxFileSize().'.');
+ return sprintf(_('You can upload a logo image for your group. The maximum file size is %s.'), ImageFile::maxFileSize());
}
/**
@@ -229,7 +229,7 @@ class GrouplogoAction extends Action
$this->element('input', array('name' => 'MAX_FILE_SIZE',
'type' => 'hidden',
'id' => 'MAX_FILE_SIZE',
- 'value' => ImageFile::maxFileSize(true)));
+ 'value' => ImageFile::maxFileSizeInt()));
$this->elementEnd('li');
$this->elementEnd('ul');
@@ -263,7 +263,7 @@ class GrouplogoAction extends Action
'class' => 'avatar_view'));
$this->element('h2', null, _("Original"));
$this->elementStart('div', array('id'=>'avatar_original_view'));
- $this->element('img', array('src' => common_avatar_url($this->filedata['filename']),
+ $this->element('img', array('src' => Avatar::url($this->filedata['filename']),
'width' => $this->filedata['width'],
'height' => $this->filedata['height'],
'alt' => $this->group->nickname));
@@ -275,7 +275,7 @@ class GrouplogoAction extends Action
'class' => 'avatar_view'));
$this->element('h2', null, _("Preview"));
$this->elementStart('div', array('id'=>'avatar_preview_view'));
- $this->element('img', array('src' => common_avatar_url($this->filedata['filename']),
+ $this->element('img', array('src' => Avatar::url($this->filedata['filename']),
'width' => AVATAR_PROFILE_SIZE,
'height' => AVATAR_PROFILE_SIZE,
'alt' => $this->group->nickname));
@@ -343,12 +343,12 @@ class GrouplogoAction extends Action
return;
}
- $filename = common_avatar_filename($this->group->id,
- image_type_to_extension($imagefile->type),
- null,
- 'group-temp-'.common_timestamp());
+ $filename = Avatar::filename($this->group->id,
+ image_type_to_extension($imagefile->type),
+ null,
+ 'group-temp-'.common_timestamp());
- $filepath = common_avatar_path($filename);
+ $filepath = Avatar::path($filename);
move_uploaded_file($imagefile->filepath, $filepath);
@@ -382,7 +382,7 @@ class GrouplogoAction extends Action
$this->serverError(_('Lost our file data.'));
return;
}
-
+
// If image is not being cropped assume pos & dimentions of original
$dest_x = $this->arg('avatar_crop_x') ? $this->arg('avatar_crop_x'):0;
$dest_y = $this->arg('avatar_crop_y') ? $this->arg('avatar_crop_y'):0;
@@ -390,7 +390,7 @@ class GrouplogoAction extends Action
$dest_h = $this->arg('avatar_crop_h') ? $this->arg('avatar_crop_h'):$filedata['height'];
$size = min($dest_w, $dest_h);
$size = ($size > MAX_ORIGINAL) ? MAX_ORIGINAL:$size;
-
+
$imagefile = new ImageFile($this->group->id, $filedata['filepath']);
$filename = $imagefile->resize($size, $dest_x, $dest_y, $dest_w, $dest_h);
diff --git a/actions/login.php b/actions/login.php
index 7a3c6d374..71e467929 100644
--- a/actions/login.php
+++ b/actions/login.php
@@ -97,7 +97,7 @@ class LoginAction extends Action
{
// XXX: login throttle
- // CSRF protection - token set in common_notice_form()
+ // CSRF protection - token set in NoticeForm
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
$this->clientError(_('There was a problem with your session token. '.
@@ -107,35 +107,14 @@ class LoginAction extends Action
$nickname = common_canonical_nickname($this->trimmed('nickname'));
$password = $this->arg('password');
- if (common_check_user($nickname, $password)) {
- // success!
- if (!common_set_user($nickname)) {
- $this->serverError(_('Error setting user.'));
- return;
- }
- common_real_login(true);
- if ($this->boolean('rememberme')) {
- common_debug('Adding rememberme cookie for ' . $nickname);
- common_rememberme();
- }
- // success!
- $url = common_get_returnto();
- if ($url) {
- // We don't have to return to it again
- common_set_returnto(null);
- } else {
- $url = common_local_url('all',
- array('nickname' =>
- $nickname));
- }
- common_redirect($url);
- } else {
+
+ if (!common_check_user($nickname, $password)) {
$this->showForm(_('Incorrect username or password.'));
return;
}
// success!
- if (!common_set_user($user)) {
+ if (!common_set_user($nickname)) {
$this->serverError(_('Error setting user.'));
return;
}
@@ -143,11 +122,11 @@ class LoginAction extends Action
common_real_login(true);
if ($this->boolean('rememberme')) {
- common_debug('Adding rememberme cookie for ' . $nickname);
common_rememberme($user);
}
- // success!
+
$url = common_get_returnto();
+
if ($url) {
// We don't have to return to it again
common_set_returnto(null);
@@ -156,6 +135,7 @@ class LoginAction extends Action
array('nickname' =>
$nickname));
}
+
common_redirect($url);
}
diff --git a/actions/newnotice.php b/actions/newnotice.php
index 5142cb5ff..5e7691f33 100644
--- a/actions/newnotice.php
+++ b/actions/newnotice.php
@@ -90,7 +90,7 @@ class NewnoticeAction extends Action
$this->clientError(_('Not logged in.'));
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
- // CSRF protection - token set in common_notice_form()
+ // CSRF protection
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
$this->clientError(_('There was a problem with your session token. '.
@@ -141,9 +141,9 @@ class NewnoticeAction extends Action
if ($cmd) {
if ($this->boolean('ajax')) {
- $cmd->execute(new AjaxWebChannel());
+ $cmd->execute(new AjaxWebChannel($this));
} else {
- $cmd->execute(new WebChannel());
+ $cmd->execute(new WebChannel($this));
}
return;
}
@@ -195,7 +195,7 @@ class NewnoticeAction extends Action
function ajaxErrorMsg($msg)
{
- common_start_html('text/xml;charset=utf-8', true);
+ $this->startHTML('text/xml;charset=utf-8', true);
$this->elementStart('head');
$this->element('title', null, _('Ajax Error'));
$this->elementEnd('head');
diff --git a/actions/noticesearch.php b/actions/noticesearch.php
index a0d723b12..a5f01350c 100644
--- a/actions/noticesearch.php
+++ b/actions/noticesearch.php
@@ -48,6 +48,16 @@ require_once INSTALLDIR.'/lib/searchaction.php';
*/
class NoticesearchAction extends SearchAction
{
+
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ common_set_returnto($this->selfUrl());
+
+ return true;
+ }
+
/**
* Get instructions
*
@@ -154,8 +164,9 @@ class NoticesearchAction extends SearchAction
$this->elementStart('div', 'entry-title');
$this->elementStart('span', 'vcard author');
$avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
- $this->elementStart('a', array('href' => $profile->profileurl));
- $this->element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_STREAM_SIZE),
+ $this->elementStart('a', array('href' => $profile->profileurl,
+ 'class' => 'url'));
+ $this->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE),
'class' => 'avatar photo',
'width' => AVATAR_STREAM_SIZE,
'height' => AVATAR_STREAM_SIZE,
@@ -223,15 +234,6 @@ class NoticesearchAction extends SearchAction
$this->elementEnd('a');
$this->elementEnd('dd');
$this->elementEnd('dl');
-
- $this->elementStart('a',
- array('href' => common_local_url('newnotice',
- array('replyto' => $profile->nickname)),
- 'onclick' => 'doreply("'.$profile->nickname.'"); return false',
- 'title' => _('reply'),
- 'class' => 'replybutton'));
- $this->hidden('posttoken', common_session_token());
- $this->elementEnd('a');
$this->elementEnd('div');
$this->elementEnd('li');
}
diff --git a/actions/openidlogin.php b/actions/openidlogin.php
index 7a267a2bd..1a4372d73 100644
--- a/actions/openidlogin.php
+++ b/actions/openidlogin.php
@@ -26,7 +26,7 @@ class OpenidloginAction extends Action
function handle($args)
{
parent::handle($args);
- if (common_logged_in()) {
+ if (common_is_real_login()) {
$this->clientError(_('Already logged in.'));
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$openid_url = $this->trimmed('openid_url');
@@ -59,7 +59,16 @@ class OpenidloginAction extends Action
function getInstructions()
{
- return _('Login with an [OpenID](%%doc.openid%%) account.');
+ if (common_logged_in() && !common_is_real_login() &&
+ common_get_returnto()) {
+ // rememberme logins have to reauthenticate before
+ // changing any profile settings (cookie-stealing protection)
+ return _('For security reasons, please re-login with your ' .
+ '[OpenID](%%doc.openid%%) ' .
+ 'before changing your settings.');
+ } else {
+ return _('Login with an [OpenID](%%doc.openid%%) account.');
+ }
}
function showPageNotice()
diff --git a/actions/opensearch.php b/actions/opensearch.php
index 7709249bb..2eb818306 100644
--- a/actions/opensearch.php
+++ b/actions/opensearch.php
@@ -67,7 +67,7 @@ class OpensearchAction extends Action
$short_name = _('Notice Search');
}
header('Content-Type: text/html');
- common_start_xml();
+ $this->startXML();
$this->elementStart('OpenSearchDescription', array('xmlns' => 'http://a9.com/-/spec/opensearch/1.1/'));
$short_name = common_config('site', 'name').' '.$short_name;
$this->element('ShortName', null, $short_name);
@@ -81,7 +81,7 @@ class OpensearchAction extends Action
$this->element('OutputEncoding', null, 'UTF-8');
$this->element('InputEncoding', null, 'UTF-8');
$this->elementEnd('OpenSearchDescription');
- common_end_xml();
+ $this->endXML();
}
function isReadOnly()
diff --git a/actions/public.php b/actions/public.php
index cfdc99bb3..cc6537f74 100644
--- a/actions/public.php
+++ b/actions/public.php
@@ -73,6 +73,9 @@ class PublicAction extends Action
{
parent::prepare($args);
$this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
+
+ common_set_returnto($this->selfUrl());
+
return true;
}
diff --git a/actions/replies.php b/actions/replies.php
index 9ec373a96..7eff74a66 100644
--- a/actions/replies.php
+++ b/actions/replies.php
@@ -83,6 +83,8 @@ class RepliesAction extends Action
$this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
+ common_set_returnto($this->selfUrl());
+
return true;
}
diff --git a/actions/showfavorites.php b/actions/showfavorites.php
index bb68f8d94..31479e1a7 100644
--- a/actions/showfavorites.php
+++ b/actions/showfavorites.php
@@ -112,6 +112,8 @@ class ShowfavoritesAction extends Action
$this->page = 1;
}
+ common_set_returnto($this->selfUrl());
+
return true;
}
diff --git a/actions/showgroup.php b/actions/showgroup.php
index 468990e7b..7bc68fbc6 100644
--- a/actions/showgroup.php
+++ b/actions/showgroup.php
@@ -129,6 +129,8 @@ class ShowgroupAction extends Action
return false;
}
+ common_set_returnto($this->selfUrl());
+
return true;
}
diff --git a/actions/showstream.php b/actions/showstream.php
index 3b4c97865..6bed700c2 100644
--- a/actions/showstream.php
+++ b/actions/showstream.php
@@ -110,6 +110,8 @@ class ShowstreamAction extends Action
$this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
+ common_set_returnto($this->selfUrl());
+
return true;
}
@@ -140,7 +142,12 @@ class ShowstreamAction extends Action
function showPageTitle()
{
- $this->element('h1', NULL, $this->profile->nickname._("'s profile"));
+ $user =& common_current_user();
+ if ($user && ($user->id == $this->profile->id)) {
+ $this->element('h1', NULL, _("Your profile"));
+ } else {
+ $this->element('h1', NULL, sprintf(_('%s\'s profile'), $this->profile->nickname));
+ }
}
function showPageNoticeBlock()
@@ -170,26 +177,22 @@ class ShowstreamAction extends Action
function showFeeds()
{
- // Feeds
- $this->element('link', array('rel' => 'alternate',
- 'href' => common_local_url('api',
- array('apiaction' => 'statuses',
- 'method' => 'entity_timeline.rss',
- 'argument' => $this->user->nickname)),
- 'type' => 'application/rss+xml',
- 'title' => sprintf(_('Notice feed for %s'), $this->user->nickname)));
- $this->element('link', array('rel' => 'alternate feed',
- 'href' => common_local_url('api',
- array('apiaction' => 'statuses',
- 'method' => 'entity_timeline.atom',
- 'argument' => $this->user->nickname)),
- 'type' => 'application/atom+xml',
- 'title' => sprintf(_('Notice feed for %s'), $this->user->nickname)));
$this->element('link', array('rel' => 'alternate',
- 'href' => common_local_url('userrss', array('nickname' =>
- $this->user->nickname)),
- 'type' => 'application/rdf+xml',
- 'title' => sprintf(_('Notice feed for %s'), $this->user->nickname)));
+ 'type' => 'application/rss+xml',
+ 'href' => common_local_url('userrss',
+ array('nickname' => $this->user->nickname)),
+ 'title' => sprintf(_('Notice feed for %s (RSS)'),
+ $this->user->nickname)));
+
+ $this->element('link',
+ array('rel' => 'alternate',
+ 'href' => common_local_url('api',
+ array('apiaction' => 'statuses',
+ 'method' => 'user_timeline.atom',
+ 'argument' => $this->user->nickname)),
+ 'type' => 'application/atom+xml',
+ 'title' => sprintf(_('Notice feed for %s (Atom)'),
+ $this->user->nickname)));
}
function extraHead()
@@ -239,7 +242,7 @@ class ShowstreamAction extends Action
$this->elementStart('dl', 'entity_depiction');
$this->element('dt', null, _('Photo'));
$this->elementStart('dd');
- $this->element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_PROFILE_SIZE),
+ $this->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE),
'class' => 'photo avatar',
'width' => AVATAR_PROFILE_SIZE,
'height' => AVATAR_PROFILE_SIZE,
@@ -321,13 +324,22 @@ class ShowstreamAction extends Action
}
$this->elementEnd('div');
- //XXX: entity_actions doesn't need to be outputted if entity is looking at their own profile
$this->elementStart('div', 'entity_actions');
$this->element('h2', null, _('User actions'));
$this->elementStart('ul');
- $this->elementStart('li', array('class' => 'entity_subscribe'));
+ $cur = common_current_user();
+
+ if ($cur && $cur->id == $this->profile->id) {
+ $this->elementStart('li', 'entity_edit');
+ $this->element('a', array('href' => common_local_url('profilesettings'),
+ 'title' => _('Edit profile settings')),
+ _('Edit'));
+ $this->elementEnd('li');
+ }
+
if ($cur) {
if ($cur->id != $this->profile->id) {
+ $this->elementStart('li', 'entity_subscribe');
if ($cur->isSubscribed($this->profile)) {
$usf = new UnsubscribeForm($this, $this->profile);
$usf->show();
@@ -335,23 +347,23 @@ class ShowstreamAction extends Action
$sf = new SubscribeForm($this, $this->profile);
$sf->show();
}
+ $this->elementEnd('li');
}
} else {
+ $this->elementStart('li', 'entity_subscribe');
$this->showRemoteSubscribeLink();
+ $this->elementEnd('li');
}
- $this->elementEnd('li');
-
-// common_profile_new_message_nudge($cur, $this->user, $this->profile);
if ($cur && $cur->id != $user->id && $cur->mutuallySubscribed($user)) {
- $this->elementStart('li', array('class' => 'entity_send-a-message'));
+ $this->elementStart('li', 'entity_send-a-message');
$this->element('a', array('href' => common_local_url('newmessage', array('to' => $user->id)),
'title' => _('Send a direct message to this user')),
_('Message'));
$this->elementEnd('li');
if ($user->email && $user->emailnotifynudge) {
- $this->elementStart('li', array('class' => 'entity_nudge'));
+ $this->elementStart('li', 'entity_nudge');
$nf = new NudgeForm($this, $user);
$nf->show();
$this->elementEnd('li');
@@ -360,7 +372,7 @@ class ShowstreamAction extends Action
if ($cur && $cur->id != $this->profile->id) {
$blocked = $cur->hasBlocked($this->profile);
- $this->elementStart('li', array('class' => 'entity_block'));
+ $this->elementStart('li', 'entity_block');
if ($blocked) {
$ubf = new UnblockForm($this, $this->profile);
$ubf->show();
diff --git a/actions/smssettings.php b/actions/smssettings.php
index f89cbe1ab..a5f75d266 100644
--- a/actions/smssettings.php
+++ b/actions/smssettings.php
@@ -490,4 +490,55 @@ class SmssettingsAction extends ConnectSettingsAction
common_redirect(common_local_url('confirmaddress',
array('code' => $code)));
}
+
+ /**
+ * Handle a request to remove an incoming email address
+ *
+ * @return void
+ */
+
+ function removeIncoming()
+ {
+ $user = common_current_user();
+
+ if (!$user->incomingemail) {
+ $this->showForm(_('No incoming email address.'));
+ return;
+ }
+
+ $orig = clone($user);
+
+ $user->incomingemail = null;
+
+ if (!$user->updateKeys($orig)) {
+ common_log_db_error($user, 'UPDATE', __FILE__);
+ $this->serverError(_("Couldn't update user record."));
+ }
+
+ $this->showForm(_('Incoming email address removed.'), true);
+ }
+
+ /**
+ * Generate a new incoming email address
+ *
+ * @return void
+ *
+ * @see Emailsettings::newIncoming
+ */
+
+ function newIncoming()
+ {
+ $user = common_current_user();
+
+ $orig = clone($user);
+
+ $user->incomingemail = mail_new_incoming_address();
+
+ if (!$user->updateKeys($orig)) {
+ common_log_db_error($user, 'UPDATE', __FILE__);
+ $this->serverError(_("Couldn't update user record."));
+ }
+
+ $this->showForm(_('New incoming email address added.'), true);
+ }
}
diff --git a/actions/tag.php b/actions/tag.php
index 803026e62..4401f892a 100644
--- a/actions/tag.php
+++ b/actions/tag.php
@@ -37,6 +37,9 @@ class TagAction extends Action
}
$this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
+
+ common_set_returnto($this->selfUrl());
+
return true;
}
diff --git a/actions/tagother.php b/actions/tagother.php
index cbace5b6b..3e8a12fd6 100644
--- a/actions/tagother.php
+++ b/actions/tagother.php
@@ -80,7 +80,7 @@ class TagotherAction extends Action
$this->elementStart('dl', 'entity_depiction');
$this->element('dt', null, _('Photo'));
$this->elementStart('dd');
- $this->element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_PROFILE_SIZE),
+ $this->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE),
'class' => 'photo avatar',
'width' => AVATAR_PROFILE_SIZE,
'height' => AVATAR_PROFILE_SIZE,
diff --git a/actions/tagrss.php b/actions/tagrss.php
index b4c2dcdff..a77fa12c9 100644
--- a/actions/tagrss.php
+++ b/actions/tagrss.php
@@ -25,12 +25,12 @@ require_once(INSTALLDIR.'/lib/rssaction.php');
class TagrssAction extends Rss10Action
{
+ var $tag;
- function init()
- {
- $tag = $this->trimmed('tag');
+ function prepare($args) {
+ parent::prepare($args);
+ $tag = common_canonical_tag($this->trimmed('tag'));
$this->tag = Notice_tag::staticGet('tag', $tag);
-
if (!$this->tag) {
$this->clientError(_('No such tag.'));
return false;
@@ -39,7 +39,7 @@ class TagrssAction extends Rss10Action
}
}
- function get_notices($limit=0)
+ function getNotices($limit=0)
{
$tag = $this->tag;
@@ -48,7 +48,6 @@ class TagrssAction extends Rss10Action
}
$notice = Notice_tag::getStream($tag->tag, 0, ($limit == 0) ? NOTICES_PER_PAGE : $limit);
-
while ($notice->fetch()) {
$notices[] = clone($notice);
}
@@ -56,10 +55,9 @@ class TagrssAction extends Rss10Action
return $notices;
}
- function get_channel()
+ function getChannel()
{
- $tag = $this->tag->tag;
-
+ $tagname = $this->tag->tag;
$c = array('url' => common_local_url('tagrss', array('tag' => $tagname)),
'title' => $tagname,
'link' => common_local_url('tagrss', array('tag' => $tagname)),
diff --git a/actions/twitapistatuses.php b/actions/twitapistatuses.php
index a35f4b12e..18e24c0f5 100644
--- a/actions/twitapistatuses.php
+++ b/actions/twitapistatuses.php
@@ -450,7 +450,6 @@ class TwitapistatusesAction extends TwitterapiAction
if ($user->id == $notice->profile_id) {
$replies = new Reply;
$replies->get('notice_id', $notice_id);
- common_dequeue_notice($notice);
$replies->delete();
$notice->delete();
diff --git a/actions/twittersettings.php b/actions/twittersettings.php
index b3bf67dc3..2d41469bb 100644
--- a/actions/twittersettings.php
+++ b/actions/twittersettings.php
@@ -250,8 +250,8 @@ class TwittersettingsAction extends ConnectSettingsAction
$avatar = $other->getAvatar(AVATAR_MINI_SIZE);
$avatar_url = ($avatar) ?
- common_avatar_display_url($avatar) :
- common_default_avatar(AVATAR_MINI_SIZE);
+ $avatar->displayUrl() :
+ Avatar::defaultImage(AVATAR_MINI_SIZE);
$this->element('img', array('src' => $avatar_url,
'width' => AVATAR_MINI_SIZE,
diff --git a/actions/usergroups.php b/actions/usergroups.php
index 58cf7eeb6..ded4ba76b 100644
--- a/actions/usergroups.php
+++ b/actions/usergroups.php
@@ -125,6 +125,12 @@ class UsergroupsAction extends Action
_('Create a new group'));
$this->elementEnd('p');
+ $this->elementStart('p', array('id' => 'group_search'));
+ $this->element('a', array('href' => common_local_url('groupsearch'),
+ 'class' => 'more'),
+ _('Search for more groups'));
+ $this->elementEnd('p');
+
$offset = ($this->page-1) * GROUPS_PER_PAGE;
$limit = GROUPS_PER_PAGE + 1;
diff --git a/classes/Avatar.php b/classes/Avatar.php
index 6a9ea7686..db9d78e47 100644
--- a/classes/Avatar.php
+++ b/classes/Avatar.php
@@ -4,18 +4,18 @@
*/
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
-class Avatar extends Memcached_DataObject
+class Avatar extends Memcached_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
public $__table = 'avatar'; // table name
public $profile_id; // int(4) primary_key not_null
- public $original; // tinyint(1)
+ public $original; // tinyint(1)
public $width; // int(4) primary_key not_null
public $height; // int(4) primary_key not_null
public $mediatype; // varchar(32) not_null
- public $filename; // varchar(255)
+ public $filename; // varchar(255)
public $url; // varchar(255) unique_key
public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
@@ -33,13 +33,51 @@ class Avatar extends Memcached_DataObject
{
$filename = $this->filename;
if (parent::delete()) {
- @unlink(common_avatar_path($filename));
+ @unlink(Avatar::path($filename));
}
}
-
- function &pkeyGet($kv)
+
+ function &pkeyGet($kv)
{
return Memcached_DataObject::pkeyGet('Avatar', $kv);
}
+ // where should the avatar go for this user?
+
+ static function filename($id, $extension, $size=null, $extra=null)
+ {
+ if ($size) {
+ return $id . '-' . $size . (($extra) ? ('-' . $extra) : '') . $extension;
+ } else {
+ return $id . '-original' . (($extra) ? ('-' . $extra) : '') . $extension;
+ }
+ }
+
+ static function path($filename)
+ {
+ return INSTALLDIR . '/avatar/' . $filename;
+ }
+
+ static function url($filename)
+ {
+ return common_path('avatar/'.$filename);
+ }
+
+ function displayUrl()
+ {
+ $server = common_config('avatar', 'server');
+ if ($server) {
+ return 'http://'.$server.'/'.$this->filename;
+ } else {
+ return $this->url;
+ }
+ }
+
+ static function defaultImage($size)
+ {
+ static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
+ AVATAR_STREAM_SIZE => 'stream',
+ AVATAR_MINI_SIZE => 'mini');
+ return theme_path('default-avatar-'.$sizenames[$size].'.png');
+ }
}
diff --git a/classes/Channel.php b/classes/Channel.php
index 2e3e4e8d4..fdeff21fc 100644
--- a/classes/Channel.php
+++ b/classes/Channel.php
@@ -21,7 +21,7 @@ if (!defined('LACONICA')) { exit(1); }
class Channel
{
-
+
function on($user)
{
return false;
@@ -36,12 +36,12 @@ class Channel
{
return false;
}
-
+
function error($user, $text)
{
return false;
}
-
+
function source()
{
return null;
@@ -52,22 +52,22 @@ class XMPPChannel extends Channel
{
var $conn = null;
-
+
function source()
{
return 'xmpp';
}
-
+
function __construct($conn)
{
$this->conn = $conn;
}
-
+
function on($user)
{
return $this->set_notify($user, 1);
}
-
+
function off($user)
{
return $this->set_notify($user, 0);
@@ -78,13 +78,13 @@ class XMPPChannel extends Channel
$text = '['.common_config('site', 'name') . '] ' . $text;
jabber_send_message($user->jabber, $text);
}
-
+
function error($user, $text)
{
$text = '['.common_config('site', 'name') . '] ' . $text;
jabber_send_message($user->jabber, $text);
}
-
+
function set_notify(&$user, $notify)
{
$orig = clone($user);
@@ -105,20 +105,25 @@ class XMPPChannel extends Channel
}
}
-
class WebChannel extends Channel
{
+ var $out = null;
+
+ function __construct($out=null)
+ {
+ $this->out = $out;
+ }
function source()
{
return 'web';
}
-
+
function on($user)
{
return false;
}
-
+
function off($user)
{
return false;
@@ -129,47 +134,49 @@ class WebChannel extends Channel
# XXX: buffer all output and send it at the end
# XXX: even better, redirect to appropriate page
# depending on what command was run
- common_show_header(_('Command results'));
- common_element('p', null, $text);
- common_show_footer();
+ $this->out->startHTML();
+ $this->out->elementStart('head');
+ $this->out->element('title', null, _('Command results'));
+ $this->out->elementEnd('head');
+ $this->out->elementStart('body');
+ $this->out->element('p', array('id' => 'command_result'), $text);
+ $this->out->elementEnd('body');
+ $this->out->endHTML();
}
-
+
function error($user, $text)
{
common_user_error($text);
}
}
-
class AjaxWebChannel extends WebChannel
{
-
function output($user, $text)
{
- common_start_html('text/xml;charset=utf-8', true);
- common_element_start('head');
- common_element('title', null, _('Command results'));
- common_element_end('head');
- common_element_start('body');
- common_element('p', array('id' => 'command_result'), $text);
- common_element_end('body');
- common_element_end('html');
+ $this->out->startHTML('text/xml;charset=utf-8');
+ $this->out->elementStart('head');
+ $this->out->element('title', null, _('Command results'));
+ $this->out->elementEnd('head');
+ $this->out->elementStart('body');
+ $this->out->element('p', array('id' => 'command_result'), $text);
+ $this->out->elementEnd('body');
+ $this->out->endHTML();
}
function error($user, $text)
{
- common_start_html('text/xml;charset=utf-8', true);
- common_element_start('head');
- common_element('title', null, _('Ajax Error'));
- common_element_end('head');
- common_element_start('body');
- common_element('p', array('id' => 'error'), $text);
- common_element_end('body');
- common_element_end('html');
+ $this->out->startHTML('text/xml;charset=utf-8');
+ $this->out->elementStart('head');
+ $this->out->element('title', null, _('Ajax Error'));
+ $this->out->elementEnd('head');
+ $this->out->elementStart('body');
+ $this->out->element('p', array('id' => 'error'), $text);
+ $this->out->elementEnd('body');
+ $this->out->endHTML();
}
}
-
class MailChannel extends Channel
{
@@ -179,17 +186,17 @@ class MailChannel extends Channel
{
return 'mail';
}
-
+
function __construct($addr=null)
{
$this->addr = $addr;
}
-
+
function on($user)
{
return $this->set_notify($user, 1);
}
-
+
function off($user)
{
return $this->set_notify($user, 0);
@@ -200,23 +207,23 @@ class MailChannel extends Channel
$headers['From'] = $user->incomingemail;
$headers['To'] = $this->addr;
-
+
$headers['Subject'] = _('Command complete');
return mail_send(array($this->addr), $headers, $text);
}
-
+
function error($user, $text)
{
-
+
$headers['From'] = $user->incomingemail;
$headers['To'] = $this->addr;
-
+
$headers['Subject'] = _('Command failed');
return mail_send(array($this->addr), $headers, $text);
}
-
+
function set_notify($user, $value)
{
$orig = clone($user);
diff --git a/classes/Profile.php b/classes/Profile.php
index 5be632f87..f3bfe299c 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -71,7 +71,7 @@ class Profile extends Memcached_DataObject
function setOriginal($filename)
{
- $imagefile = new ImageFile($this->id, common_avatar_path($filename));
+ $imagefile = new ImageFile($this->id, Avatar::path($filename));
$avatar = new Avatar();
$avatar->profile_id = $this->id;
@@ -80,22 +80,22 @@ class Profile extends Memcached_DataObject
$avatar->mediatype = image_type_to_mime_type($imagefile->type);
$avatar->filename = $filename;
$avatar->original = true;
- $avatar->url = common_avatar_url($filename);
+ $avatar->url = Avatar::url($filename);
$avatar->created = DB_DataObject_Cast::dateTime(); # current time
# XXX: start a transaction here
if (!$this->delete_avatars() || !$avatar->insert()) {
- @unlink(common_avatar_path($filename));
+ @unlink(Avatar::path($filename));
return null;
}
foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) {
# We don't do a scaled one if original is our scaled size
if (!($avatar->width == $size && $avatar->height == $size)) {
-
+
$scaled_filename = $imagefile->resize($size);
-
+
//$scaled = DB_DataObject::factory('avatar');
$scaled = new Avatar();
$scaled->profile_id = $this->id;
@@ -104,7 +104,7 @@ class Profile extends Memcached_DataObject
$scaled->original = false;
$scaled->mediatype = image_type_to_mime_type($imagefile->type);
$scaled->filename = $scaled_filename;
- $scaled->url = common_avatar_url($scaled_filename);
+ $scaled->url = Avatar::url($scaled_filename);
$scaled->created = DB_DataObject_Cast::dateTime(); # current time
if (!$scaled->insert()) {
@@ -194,4 +194,13 @@ class Profile extends Memcached_DataObject
}
}
+ function avatarUrl($size=AVATAR_PROFILE_SIZE)
+ {
+ $avatar = $this->getAvatar($size);
+ if ($avatar) {
+ return $avatar->displayUrl();
+ } else {
+ return Avatar::defaultImage($size);
+ }
+ }
}
diff --git a/classes/User.php b/classes/User.php
index b1c061c18..a6a1b11b9 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -630,4 +630,15 @@ class User extends Memcached_DataObject
return $profile;
}
+
+ function hasOpenID()
+ {
+ $oid = new User_openid();
+
+ $oid->user_id = $this->id;
+
+ $cnt = $oid->find();
+
+ return ($cnt > 0);
+ }
}
diff --git a/classes/User_group.php b/classes/User_group.php
index 340d7f67a..d152f9d56 100755
--- a/classes/User_group.php
+++ b/classes/User_group.php
@@ -90,13 +90,13 @@ class User_group extends Memcached_DataObject
function setOriginal($filename)
{
- $imagefile = new ImageFile($this->id, common_avatar_path($filename));
+ $imagefile = new ImageFile($this->id, Avatar::path($filename));
$orig = clone($this);
- $this->original_logo = common_avatar_url($filename);
- $this->homepage_logo = common_avatar_url($imagefile->resize(AVATAR_PROFILE_SIZE));
- $this->stream_logo = common_avatar_url($imagefile->resize(AVATAR_STREAM_SIZE));
- $this->mini_logo = common_avatar_url($imagefile->resize(AVATAR_MINI_SIZE));
+ $this->original_logo = Avatar::url($filename);
+ $this->homepage_logo = Avatar::url($imagefile->resize(AVATAR_PROFILE_SIZE));
+ $this->stream_logo = Avatar::url($imagefile->resize(AVATAR_STREAM_SIZE));
+ $this->mini_logo = Avatar::url($imagefile->resize(AVATAR_MINI_SIZE));
common_debug(common_log_objstring($this));
return $this->update($orig);
}
diff --git a/db/laconica_pg.sql b/db/laconica_pg.sql
index c3efd9daa..9882d091a 100644
--- a/db/laconica_pg.sql
+++ b/db/laconica_pg.sql
@@ -50,7 +50,7 @@ create table "user" (
emailnotifyfav integer default 1 /* comment 'Notify by email of favorites' */,
emailnotifynudge integer default 1 /* comment 'Notify by email of nudges' */,
emailnotifymsg integer default 1 /* comment 'Notify by email of direct messages' */,
-emailmicroid integer default 1 /* comment 'whether to publish email microid' */,
+ emailmicroid integer default 1 /* comment 'whether to publish email microid' */,
language varchar(50) /* comment 'preferred language' */,
timezone varchar(50) /* comment 'timezone' */,
emailpost integer default 1 /* comment 'Post by email' */,
@@ -146,7 +146,6 @@ create table fave (
notice_id integer not null /* comment 'notice that is the favorite' */ references notice (id),
user_id integer not null /* comment 'user who likes this notice' */ references "user" (id) ,
modified timestamp not null /* comment 'date this record was modified' */,
-
primary key (notice_id, user_id)
);
@@ -288,6 +287,7 @@ create table foreign_link (
credentials varchar(255) /* comment 'authc credentials, typically a password' */,
noticesync int not null default 1 /* comment 'notice synchronisation, bit 1 = sync outgoing, bit 2 = sync incoming, bit 3 = filter local replies' */,
friendsync int not null default 2 /* comment 'friend synchronisation, bit 1 = sync outgoing, bit 2 = sync incoming */,
+ profilesync int not null default 1 /* comment 'profile synchronization, bit 1 = sync outgoing, bit 2 = sync incoming' */,
created timestamp not null /* comment 'date this record was created' */,
modified timestamp not null /* comment 'date this record was modified' */,
@@ -367,6 +367,59 @@ create table profile_block (
);
+create table user_group (
+
+ id serial primary key /* comment 'unique identifier' */,
+
+ nickname varchar(64) unique /* comment 'nickname for addressing' */,
+ fullname varchar(255) /* comment 'display name' */,
+ homepage varchar(255) /* comment 'URL, cached so we dont regenerate' */,
+ description varchar(140) /* comment 'descriptive biography' */,
+ location varchar(255) /* comment 'related physical location, if any' */,
+
+ original_logo varchar(255) /* comment 'original size logo' */,
+ homepage_logo varchar(255) /* comment 'homepage (profile) size logo' */,
+ stream_logo varchar(255) /* comment 'stream-sized logo' */,
+ mini_logo varchar(255) /* comment 'mini logo' */,
+
+ created timestamp not null /* comment 'date this record was created' */,
+ modified timestamp /* comment 'date this record was modified' */
+
+);
+create index user_group_nickname_idx on user_group using btree(nickname);
+
+create table group_member (
+
+ group_id integer not null /* comment 'foreign key to user_group' */ references user_group (id),
+ profile_id integer not null /* comment 'foreign key to profile table' */ references profile (id),
+ is_admin integer default 0 /* comment 'is this user an admin?' */,
+
+ created timestamp not null /* comment 'date this record was created' */,
+ modified timestamp /* comment 'date this record was modified' */,
+
+ primary key (group_id, profile_id)
+);
+
+create table related_group (
+
+ group_id integer not null /* comment 'foreign key to user_group' */ references user_group (id) ,
+ related_group_id integer not null /* comment 'foreign key to user_group' */ references user_group (id),
+
+ created timestamp not null /* comment 'date this record was created' */,
+
+ primary key (group_id, related_group_id)
+
+);
+
+create table group_inbox (
+ group_id integer not null /* comment 'group receiving the message' references user_group (id) */,
+ notice_id integer not null /* comment 'notice received' references notice (id) */,
+ created timestamp not null /* comment 'date the notice was created' */,
+
+ primary key (group_id, notice_id)
+);
+create index group_inbox_created_idx on group_inbox using btree(created);
+
/* Textsearch stuff */
create index textsearch_idx on profile using gist(textsearch);
diff --git a/js/facebookapp.js b/js/facebookapp.js
index 8ef9aa532..f0696c19e 100644
--- a/js/facebookapp.js
+++ b/js/facebookapp.js
@@ -19,10 +19,12 @@
var max = 140;
var noticeBox = document.getElementById('notice_data-text');
-noticeBox.addEventListener('keyup', keypress);
-noticeBox.addEventListener('keydown', keypress);
-noticeBox.addEventListener('keypress', keypress);
-noticeBox.addEventListener('change', keypress);
+if (noticeBox) {
+ noticeBox.addEventListener('keyup', keypress);
+ noticeBox.addEventListener('keydown', keypress);
+ noticeBox.addEventListener('keypress', keypress);
+ noticeBox.addEventListener('change', keypress);
+}
// Do our the countdown
function keypress(evt) {
diff --git a/lib/action.php b/lib/action.php
index 587d2ab13..c4172ada1 100644
--- a/lib/action.php
+++ b/lib/action.php
@@ -73,7 +73,6 @@ class Action extends HTMLOutputter // lawsuit
parent::__construct($output, $indent);
}
-
/**
* For initializing members of the class.
*
@@ -162,15 +161,15 @@ class Action extends HTMLOutputter // lawsuit
'media' => 'screen, projection, tv'));
$this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
'href="'.theme_path('css/ie.css', 'base').'?version='.LACONICA_VERSION.'" /><![endif]');
- $this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
- 'href="'.theme_path('css/ie.css', null).'?version='.LACONICA_VERSION.'" /><![endif]');
foreach (array(6,7) as $ver) {
- if (file_exists(theme_file('ie'.$ver.'.css'))) {
+ if (file_exists(theme_file('css/ie'.$ver.'.css', 'base'))) {
// Yes, IE people should be put in jail.
$this->comment('[if lte IE '.$ver.']><link rel="stylesheet" type="text/css" '.
'href="'.theme_path('css/ie'.$ver.'.css', 'base').'?version='.LACONICA_VERSION.'" /><![endif]');
}
}
+ $this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
+ 'href="'.theme_path('css/ie.css', null).'?version='.LACONICA_VERSION.'" /><![endif]');
}
/**
@@ -246,7 +245,6 @@ class Action extends HTMLOutputter // lawsuit
// does nothing by default
}
-
/**
* Show body.
*
@@ -257,7 +255,7 @@ class Action extends HTMLOutputter // lawsuit
function showBody()
{
$this->elementStart('body', array('id' => $this->trimmed('action')));
- $this->elementStart('div', 'wrap');
+ $this->elementStart('div', array('id' => 'wrap'));
$this->showHeader();
$this->showCore();
$this->showFooter();
@@ -354,7 +352,7 @@ class Action extends HTMLOutputter // lawsuit
$this->elementEnd('dd');
$this->elementEnd('dl');
}
-
+
/**
* Show site notice.
*
@@ -368,7 +366,9 @@ class Action extends HTMLOutputter // lawsuit
$this->elementStart('dl', array('id' => 'site_notice',
'class' => 'system_notice'));
$this->element('dt', null, _('Site notice'));
- $this->element('dd', null, $text);
+ $this->elementStart('dd', null);
+ $this->raw($text);
+ $this->elementEnd('dd');
$this->elementEnd('dl');
}
}
@@ -385,7 +385,7 @@ class Action extends HTMLOutputter // lawsuit
$notice_form = new NoticeForm($this);
$notice_form->show();
}
-
+
/**
* Show anonymous message.
*
@@ -761,7 +761,7 @@ class Action extends HTMLOutputter // lawsuit
/**
* Boolean understands english (yes, no, true, false)
*
- * @param string $key query key we're interested in
+ * @param string $key query key we're interested in
* @param string $def default value
*
* @return boolean interprets yes/no strings as boolean
diff --git a/lib/common.php b/lib/common.php
index 482800876..5b4e3c40c 100644
--- a/lib/common.php
+++ b/lib/common.php
@@ -19,7 +19,7 @@
if (!defined('LACONICA')) { exit(1); }
-define('LACONICA_VERSION', '0.7.0');
+define('LACONICA_VERSION', '0.7.1');
define('AVATAR_PROFILE_SIZE', 96);
define('AVATAR_STREAM_SIZE', 48);
diff --git a/lib/error.php b/lib/error.php
index 03065bc70..526d9f81b 100644
--- a/lib/error.php
+++ b/lib/error.php
@@ -111,7 +111,7 @@ class ErrorAction extends Action
function showBody()
{
$this->elementStart('body', array('id' => 'error'));
- $this->elementStart('div', 'wrap');
+ $this->elementStart('div', array('id' => 'wrap'));
$this->showHeader();
$this->showCore();
$this->showFooter();
diff --git a/lib/facebookaction.php b/lib/facebookaction.php
index bfba702e6..043a078cd 100644
--- a/lib/facebookaction.php
+++ b/lib/facebookaction.php
@@ -129,7 +129,7 @@ class FacebookAction extends Action
* Start an Facebook ready HTML document
*
* For Facebook we don't want to actually output any headers,
- * DTD info, etc.
+ * DTD info, etc. Just Stylesheet and JavaScript links.
*
* If $type isn't specified, will attempt to do content negotiation.
*
@@ -140,6 +140,9 @@ class FacebookAction extends Action
function startHTML($type=null)
{
+ $this->showStylesheets();
+ $this->showScripts();
+
$this->elementStart('div', array('class' => 'facebook-page'));
}
@@ -168,7 +171,7 @@ class FacebookAction extends Action
function showBody()
{
- $this->elementStart('div', 'wrap');
+ $this->elementStart('div', array('id' => 'wrap'));
$this->showHeader();
$this->showCore();
$this->showFooter();
@@ -181,8 +184,6 @@ class FacebookAction extends Action
function showHead($error, $success)
{
- $this->showStylesheets();
- $this->showScripts();
if ($error) {
$this->element("h1", null, $error);
@@ -204,7 +205,6 @@ class FacebookAction extends Action
// Make this into a widget later
function showLocalNav()
{
-
$this->elementStart('ul', array('class' => 'nav'));
$this->elementStart('li', array('class' =>
@@ -229,18 +229,7 @@ class FacebookAction extends Action
$this->elementEnd('li');
$this->elementEnd('ul');
-
}
-
- /**
- * Show primary navigation.
- *
- * @return nothing
- */
- function showPrimaryNav()
- {
- // we don't want to show anything for this
- }
/**
* Show header of the page.
@@ -254,7 +243,6 @@ class FacebookAction extends Action
$this->elementStart('div', array('id' => 'header'));
$this->showLogo();
$this->showNoticeForm();
- $this->showPrimaryNav();
$this->elementEnd('div');
}
@@ -282,7 +270,6 @@ class FacebookAction extends Action
$loginmsg_part1 = _('To use the %s Facebook Application you need to login ' .
'with your username and password. Don\'t have a username yet? ');
-
$loginmsg_part2 = _(' a new account.');
$this->elementStart('dd');
@@ -291,18 +278,18 @@ class FacebookAction extends Action
$this->element('a',
array('href' => common_local_url('register')), _('Register'));
$this->text($loginmsg_part2);
+ $this->elementEnd('p');
$this->elementEnd('dd');
+
$this->elementEnd('dl');
-
$this->elementEnd('div');
-
}
function showLoginForm($msg = null)
{
- $this->elementStart('div', array('class' => 'content'));
+ $this->elementStart('div', array('id' => 'content'));
$this->element('h1', null, _('Login'));
if ($msg) {
@@ -330,6 +317,7 @@ class FacebookAction extends Action
$this->elementEnd('ul');
$this->submit('submit', _('Login'));
+ $this->elementEnd('fieldset');
$this->elementEnd('form');
$this->elementStart('p');
@@ -338,6 +326,7 @@ class FacebookAction extends Action
$this->elementEnd('p');
$this->elementEnd('div');
+ $this->elementEnd('div');
}
@@ -347,42 +336,70 @@ class FacebookAction extends Action
// Need to include inline CSS for styling the Profile box
+ $app_props = $this->facebook->api_client->Admin_getAppProperties(array('icon_url'));
+ $icon_url = $app_props['icon_url'];
+
$style = '<style>
+ .entry-title *,
+ .entry-content * {
+ font-size:14px;
+ font-family:"Lucida Sans Unicode", "Lucida Grande", sans-serif;
+ }
+ .entry-title a,
+ .entry-content a {
+ color:#002E6E;
+ }
+
.entry-title .vcard .photo {
float:left;
display:inline;
+ margin-right:11px;
+ margin-bottom:11px
}
- .entry-title .vcard .nickname {
- margin-left:5px;
- }
-
+ .entry-title {
+ margin-bottom:11px;
+ }
.entry-title p.entry-content {
display:inline;
- margin-left:5px;
+ margin-left:5px;
}
+ div.entry-content {
+ clear:both;
+ }
div.entry-content dl,
div.entry-content dt,
div.entry-content dd {
display:inline;
+ text-transform:lowercase;
}
- div.entry-content dt,
- div.entry-content dd {
- display:inline;
- margin-left:5px;
+ div.entry-content dd,
+ div.entry-content .device dt {
+ margin-left:0;
+ margin-right:5px;
}
- div.entry-content dl.timestamp dt {
+ div.entry-content dl.timestamp dt,
+ div.entry-content dl.response dt {
display:none;
}
div.entry-content dd a {
display:inline-block;
}
+
+ #facebook_laconica_app {
+ text-indent:-9999px;
+ height:16px;
+ width:16px;
+ display:block;
+ background:url('.$icon_url.') no-repeat 0 0;
+ float:right;
+ }
</style>';
$this->xw->openMemory();
- $item = new FacebookNoticeListItem($notice, $this);
+ $item = new FacebookProfileBoxNotice($notice, $this);
$item->show();
$fbml = "<fb:wide>$style " . $this->xw->outputMemory(false) . "</fb:wide>";
@@ -465,8 +482,6 @@ class FacebookAction extends Action
$content_shortened = common_shorten_links($content);
if (mb_strlen($content_shortened) > 140) {
- common_debug("Content = '$content_shortened'", __FILE__);
- common_debug("mb_strlen(\$content) = " . mb_strlen($content_shortened), __FILE__);
$this->showPage(_('That\'s too long. Max notice size is 140 chars.'));
return;
}
@@ -539,6 +554,18 @@ class FacebookNoticeForm extends NoticeForm
class FacebookNoticeList extends NoticeList
{
+
+ /**
+ * constructor
+ *
+ * @param Notice $notice stream of notices from DB_DataObject
+ */
+
+ function __construct($notice, $out=null)
+ {
+ parent::__construct($notice, $out);
+ }
+
/**
* show the list of notices
*
@@ -593,6 +620,20 @@ class FacebookNoticeList extends NoticeList
class FacebookNoticeListItem extends NoticeListItem
{
+
+ /**
+ * constructor
+ *
+ * Also initializes the profile attribute.
+ *
+ * @param Notice $notice The notice we'll display
+ */
+
+ function __construct($notice, $out=null)
+ {
+ parent::__construct($notice, $out);
+ }
+
/**
* recipe function for displaying a single notice in the Facebook App.
*
@@ -645,3 +686,65 @@ class FacebookNoticeListItem extends NoticeListItem
}
}
+
+
+class FacebookProfileBoxNotice extends FacebookNoticeListItem
+{
+
+ /**
+ * constructor
+ *
+ * Also initializes the profile attribute.
+ *
+ * @param Notice $notice The notice we'll display
+ */
+
+ function __construct($notice, $out=null)
+ {
+ parent::__construct($notice, $out);
+ }
+
+ /**
+ * Recipe function for displaying a single notice in the
+ * Facebook App's Profile
+ *
+ * @return void
+ */
+
+ function show()
+ {
+
+ $this->out->elementStart('div', 'entry-title');
+ $this->showAuthor();
+ $this->showContent();
+ $this->out->elementEnd('div');
+
+ $this->out->elementStart('div', 'entry-content');
+
+ $this->showNoticeLink();
+ $this->showNoticeSource();
+ $this->showReplyTo();
+ $this->out->elementEnd('div');
+
+ $this->showAppLink();
+
+ }
+
+ function showAppLink()
+ {
+
+ $this->facebook = getFacebook();
+
+ $app_props = $this->facebook->api_client->Admin_getAppProperties(
+ array('canvas_name', 'application_name'));
+
+ $this->app_uri = 'http://apps.facebook.com/' . $app_props['canvas_name'];
+ $this->app_name = $app_props['application_name'];
+
+ $this->out->elementStart('a', array('id' => 'facebook_laconica_app',
+ 'href' => $this->app_uri));
+ $this->out->text($this->app_name);
+ $this->out->elementEnd('a');
+ }
+
+}
diff --git a/lib/htmloutputter.php b/lib/htmloutputter.php
index f9245414f..7780b1c19 100644
--- a/lib/htmloutputter.php
+++ b/lib/htmloutputter.php
@@ -172,7 +172,7 @@ class HTMLOutputter extends XMLOutputter
'type' => 'text',
'id' => $id);
if ($value) {
- $attrs['value'] = htmlspecialchars($value);
+ $attrs['value'] = $value;
}
$this->element('input', $attrs);
if ($instructions) {
@@ -206,7 +206,7 @@ class HTMLOutputter extends XMLOutputter
'class' => 'checkbox',
'id' => $id);
if ($value) {
- $attrs['value'] = htmlspecialchars($value);
+ $attrs['value'] = $value;
}
if ($checked) {
$attrs['checked'] = 'checked';
diff --git a/lib/imagefile.php b/lib/imagefile.php
index faec7f0ff..a8e963370 100644
--- a/lib/imagefile.php
+++ b/lib/imagefile.php
@@ -58,7 +58,7 @@ class ImageFile
{
$this->id = $id;
$this->filepath = $filepath;
-
+
$info = @getimagesize($this->filepath);
$this->type = ($info) ? $info[2]:$type;
$this->width = ($info) ? $info[0]:$width;
@@ -72,7 +72,7 @@ class ImageFile
break;
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
- throw new Exception(_('That file is too big. The maximum file size is '.$this->maxFileSize().'.'));
+ throw new Exception(sprintf(_('That file is too big. The maximum file size is %d.'), $this->maxFileSize()));
return;
case UPLOAD_ERR_PARTIAL:
@unlink($_FILES[$param]['tmp_name']);
@@ -82,19 +82,19 @@ class ImageFile
throw new Exception(_('System error uploading file.'));
return;
}
-
+
$info = @getimagesize($_FILES[$param]['tmp_name']);
-
+
if (!$info) {
@unlink($_FILES[$param]['tmp_name']);
throw new Exception(_('Not an image or corrupt file.'));
return;
}
-
+
if ($info[2] !== IMAGETYPE_GIF &&
$info[2] !== IMAGETYPE_JPEG &&
$info[2] !== IMAGETYPE_PNG) {
-
+
@unlink($_FILES[$param]['tmp_name']);
throw new Exception(_('Unsupported image file format.'));
return;
@@ -102,7 +102,7 @@ class ImageFile
return new ImageFile(null, $_FILES[$param]['tmp_name']);
}
-
+
function resize($size, $x = 0, $y = 0, $w = null, $h = null)
{
$w = ($w === null) ? $this->width:$w;
@@ -146,36 +146,36 @@ class ImageFile
}
$image_dest = imagecreatetruecolor($size, $size);
-
+
if ($this->type == IMAGETYPE_GIF || $this->type == IMAGETYPE_PNG) {
$transparent_idx = imagecolortransparent($image_src);
-
+
if ($transparent_idx >= 0) {
-
+
$transparent_color = imagecolorsforindex($image_src, $transparent_idx);
$transparent_idx = imagecolorallocate($image_dest, $transparent_color['red'], $transparent_color['green'], $transparent_color['blue']);
imagefill($image_dest, 0, 0, $transparent_idx);
imagecolortransparent($image_dest, $transparent_idx);
-
+
} elseif ($this->type == IMAGETYPE_PNG) {
-
+
imagealphablending($image_dest, false);
$transparent = imagecolorallocatealpha($image_dest, 0, 0, 0, 127);
imagefill($image_dest, 0, 0, $transparent);
imagesavealpha($image_dest, true);
-
+
}
}
imagecopyresampled($image_dest, $image_src, 0, 0, $x, $y, $size, $size, $w, $h);
- $outname = common_avatar_filename($this->id,
+ $outname = Avatar::filename($this->id,
image_type_to_extension($this->type),
$size,
common_timestamp());
- $outpath = common_avatar_path($outname);
+ $outpath = Avatar::path($outname);
switch ($this->type) {
case IMAGETYPE_GIF:
@@ -202,23 +202,32 @@ class ImageFile
{
@unlink($this->filename);
}
-
- static function maxFileSize($return_bytes = false)
+
+ static function maxFileSize()
{
- $limit = min(ImageFile::strToInt(ini_get('post_max_size')), ImageFile::strToInt(ini_get('upload_max_filesize')), ImageFile::strToInt(ini_get('memory_limit')));
-
- if ($return_bytes) {
- return $limit;
+ $value = ImageFile::maxFileSizeInt();
+
+ if ($value > 1024 * 1024) {
+ return ($value/(1024*1024)).'Mb';
+ } else if ($value > 1024) {
+ return ($value/(1024)).'kB';
+ } else {
+ return $value;
}
-
- return ($limit/(1024*1024)).'MB';
}
-
+
+ static function maxFileSizeInt()
+ {
+ return min(ImageFile::strToInt(ini_get('post_max_size')),
+ ImageFile::strToInt(ini_get('upload_max_filesize')),
+ ImageFile::strToInt(ini_get('memory_limit')));
+ }
+
static function strToInt($str)
{
$unit = substr($str, -1);
$num = substr($str, 0, -1);
-
+
switch(strtoupper($unit)){
case 'G':
$num *= 1024;
@@ -227,7 +236,7 @@ class ImageFile
case 'K':
$num *= 1024;
}
-
+
return $num;
}
} \ No newline at end of file
diff --git a/lib/jabber.php b/lib/jabber.php
index f1be57768..f41d984d6 100644
--- a/lib/jabber.php
+++ b/lib/jabber.php
@@ -178,7 +178,7 @@ function jabber_format_entry($profile, $notice)
$entry .= "<link href='" . htmlspecialchars($profile->profileurl) . "'/>\n";
$entry .= "<link rel='self' type='application/rss+xml' href='" . $self_url . "'/>\n";
$entry .= "<author><name>" . $profile->nickname . "</name></author>\n";
- $entry .= "<icon>" . common_profile_avatar_url($profile, AVATAR_PROFILE_SIZE) . "</icon>\n";
+ $entry .= "<icon>" . $profile->avatarUrl(AVATAR_PROFILE_SIZE) . "</icon>\n";
$entry .= "</source>\n";
$entry .= "<title>" . htmlspecialchars($msg) . "</title>\n";
$entry .= "<summary>" . htmlspecialchars($msg) . "</summary>\n";
diff --git a/lib/mail.php b/lib/mail.php
index b424d579f..a1faefc80 100644
--- a/lib/mail.php
+++ b/lib/mail.php
@@ -246,7 +246,7 @@ function mail_subscribe_notify_profile($listenee, $other)
"\n".'Faithfully yours,'."\n".'%7$s.'."\n\n".
"----\n".
"Change your email address or ".
- "notification options at ".'%8$s\n'),
+ "notification options at ".'%8$s' ."\n"),
$long_name,
common_config('site', 'name'),
$other->profileurl,
diff --git a/lib/mailbox.php b/lib/mailbox.php
index 8d5d44e49..d77234549 100644
--- a/lib/mailbox.php
+++ b/lib/mailbox.php
@@ -63,6 +63,8 @@ class MailboxAction extends PersonalAction
$this->page = 1;
}
+ common_set_returnto($this->selfUrl());
+
return true;
}
@@ -181,8 +183,8 @@ class MailboxAction extends PersonalAction
'class' => 'url'));
$avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
$this->element('img', array('src' => ($avatar) ?
- common_avatar_display_url($avatar) :
- common_default_avatar(AVATAR_STREAM_SIZE),
+ $avatar->displayUrl() :
+ Avatar::defaultImage(AVATAR_STREAM_SIZE),
'class' => 'photo avatar',
'width' => AVATAR_STREAM_SIZE,
'height' => AVATAR_STREAM_SIZE,
diff --git a/lib/noticelist.php b/lib/noticelist.php
index 7c88c33cc..9fc0126b3 100644
--- a/lib/noticelist.php
+++ b/lib/noticelist.php
@@ -203,11 +203,14 @@ class NoticeListItem extends Widget
function showNoticeOptions()
{
- $this->out->elementStart('div', 'notice-options');
- $this->showFaveForm();
- $this->showReplyLink();
- $this->showDeleteLink();
- $this->out->elementEnd('div');
+ $user = common_current_user();
+ if ($user) {
+ $this->out->elementStart('div', 'notice-options');
+ $this->showFaveForm();
+ $this->showReplyLink();
+ $this->showDeleteLink();
+ $this->out->elementEnd('div');
+ }
}
/**
@@ -282,8 +285,8 @@ class NoticeListItem extends Widget
$avatar = $this->profile->getAvatar($avatar_size);
$this->out->element('img', array('src' => ($avatar) ?
- common_avatar_display_url($avatar) :
- common_default_avatar($avatar_size),
+ $avatar->displayUrl() :
+ Avatar::defaultImage($avatar_size),
'class' => 'avatar photo',
'width' => $avatar_size,
'height' => $avatar_size,
diff --git a/lib/noticesection.php b/lib/noticesection.php
index aa8e03229..97b517529 100644
--- a/lib/noticesection.php
+++ b/lib/noticesection.php
@@ -82,7 +82,7 @@ class NoticeSection extends Section
$profile->nickname,
'href' => $profile->profileurl,
'class' => 'url'));
- $this->out->element('img', array('src' => (($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_MINI_SIZE)),
+ $this->out->element('img', array('src' => (($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_MINI_SIZE)),
'width' => AVATAR_MINI_SIZE,
'height' => AVATAR_MINI_SIZE,
'class' => 'avatar photo',
diff --git a/lib/personal.php b/lib/personal.php
index 900df0257..e46350c63 100644
--- a/lib/personal.php
+++ b/lib/personal.php
@@ -55,7 +55,6 @@ class PersonalAction extends Action
function handle($args)
{
parent::handle($args);
- common_set_returnto($this->selfUrl());
}
}
diff --git a/lib/popularnoticesection.php b/lib/popularnoticesection.php
index 89daaa563..5734d8001 100644
--- a/lib/popularnoticesection.php
+++ b/lib/popularnoticesection.php
@@ -31,7 +31,7 @@ if (!defined('LACONICA')) {
exit(1);
}
-define('NOTICES_PER_SECTION', 6);
+define('NOTICES_PER_SECTION', 5);
/**
* Base class for sections showing lists of notices
diff --git a/lib/profilelist.php b/lib/profilelist.php
index 6e14c0b69..4d924b039 100644
--- a/lib/profilelist.php
+++ b/lib/profilelist.php
@@ -97,7 +97,7 @@ class ProfileList extends Widget
$avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE);
$this->out->elementStart('a', array('href' => $this->profile->profileurl,
'class' => 'url'));
- $this->out->element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_STREAM_SIZE),
+ $this->out->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE),
'class' => 'photo avatar',
'width' => AVATAR_STREAM_SIZE,
'height' => AVATAR_STREAM_SIZE,
diff --git a/lib/profileminilist.php b/lib/profileminilist.php
index 81cd7aed5..0d466bba8 100644
--- a/lib/profileminilist.php
+++ b/lib/profileminilist.php
@@ -74,7 +74,7 @@ class ProfileMiniList extends ProfileList
'rel' => 'contact member',
'class' => 'url'));
$avatar = $this->profile->getAvatar(AVATAR_MINI_SIZE);
- $this->out->element('img', array('src' => (($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_MINI_SIZE)),
+ $this->out->element('img', array('src' => (($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_MINI_SIZE)),
'width' => AVATAR_MINI_SIZE,
'height' => AVATAR_MINI_SIZE,
'class' => 'avatar photo',
diff --git a/lib/profilesection.php b/lib/profilesection.php
index 3642ae164..8ed290e03 100644
--- a/lib/profilesection.php
+++ b/lib/profilesection.php
@@ -86,7 +86,7 @@ class ProfileSection extends Section
'rel' => 'contact member',
'class' => 'url'));
$avatar = $profile->getAvatar(AVATAR_MINI_SIZE);
- $this->out->element('img', array('src' => (($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_MINI_SIZE)),
+ $this->out->element('img', array('src' => (($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_MINI_SIZE)),
'width' => AVATAR_MINI_SIZE,
'height' => AVATAR_MINI_SIZE,
'class' => 'avatar photo',
diff --git a/lib/rssaction.php b/lib/rssaction.php
index 2bd7f1f19..131e8ac65 100644
--- a/lib/rssaction.php
+++ b/lib/rssaction.php
@@ -199,7 +199,7 @@ class Rss10Action extends Action
$this->element('dc:date', null, common_date_w3dtf($notice->created));
$this->element('dc:creator', null, ($profile->fullname) ? $profile->fullname : $profile->nickname);
$this->element('sioc:has_creator', array('rdf:resource' => $creator_uri));
- $this->element('laconica:postIcon', array('rdf:resource' => common_profile_avatar_url($profile)));
+ $this->element('laconica:postIcon', array('rdf:resource' => $profile->avatarUrl()));
$this->element('cc:licence', array('rdf:resource' => common_config('license', 'url')));
$this->elementEnd('item');
$this->creators[$creator_uri] = $profile;
@@ -216,7 +216,7 @@ class Rss10Action extends Action
$this->element('foaf:name', null, $profile->fullname);
}
$this->element('sioc:id', null, $id);
- $avatar = common_profile_avatar_url($profile);
+ $avatar = $profile->avatarUrl();
$this->element('sioc:avatar', array('rdf:resource' => $avatar));
$this->elementEnd('sioc:User');
}
diff --git a/lib/settingsaction.php b/lib/settingsaction.php
index dfe1f114b..53c807c6f 100644
--- a/lib/settingsaction.php
+++ b/lib/settingsaction.php
@@ -76,7 +76,12 @@ class SettingsAction extends Action
// change important settings or see private info, and
// _all_ our settings are important
common_set_returnto($this->selfUrl());
- common_redirect(common_local_url('login'));
+ $user = common_current_user();
+ if ($user->hasOpenID()) {
+ common_redirect(common_local_url('openidlogin'));
+ } else {
+ common_redirect(common_local_url('login'));
+ }
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$this->handlePost();
} else {
diff --git a/lib/twitterapi.php b/lib/twitterapi.php
index da8b8b1e5..a4d183fcd 100644
--- a/lib/twitterapi.php
+++ b/lib/twitterapi.php
@@ -43,7 +43,7 @@ class TwitterapiAction extends Action
$avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
- $twitter_user['profile_image_url'] = ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_STREAM_SIZE);
+ $twitter_user['profile_image_url'] = ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE);
$twitter_user['protected'] = 'false'; # not supported by Laconica yet
$twitter_user['url'] = ($profile->homepage) ? $profile->homepage : null;
diff --git a/lib/util.php b/lib/util.php
index 5f95c1a96..7ce4e229e 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -409,15 +409,15 @@ function common_replace_urls_callback($text, $callback) {
)
#ix';
preg_match_all($regex, $text, $matches);
-
+
// Then clean up what the regex left behind
$offset = 0;
foreach($matches[0] as $url) {
$url = htmlspecialchars_decode($url);
-
+
// Make sure we didn't pick up an email address
if (preg_match('#^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$#i', $url)) continue;
-
+
// Remove trailing punctuation
$url = rtrim($url, '.?!,;:\'"`');
@@ -436,48 +436,48 @@ function common_replace_urls_callback($text, $callback) {
// Remove trailing punctuation again (in case there were some inside parens)
$url = rtrim($url, '.?!,;:\'"`');
-
+
// Make sure we didn't capture part of the next sentence
preg_match('#((?:[^.\s/]+\.)+)(museum|travel|[a-z]{2,4})#i', $url, $url_parts);
-
+
// Were the parts capitalized any?
$last_part = (mb_strtolower($url_parts[2]) !== $url_parts[2]) ? true:false;
$prev_part = (mb_strtolower($url_parts[1]) !== $url_parts[1]) ? true:false;
-
+
// If the first part wasn't cap'd but the last part was, we captured too much
if ((!$prev_part && $last_part)) {
$url = substr_replace($url, '', mb_strpos($url, '.'.$url_parts[2], 0));
}
-
+
// Capture the new TLD
preg_match('#((?:[^.\s/]+\.)+)(museum|travel|[a-z]{2,4})#i', $url, $url_parts);
-
+
$tlds = array('ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao', 'aq', 'ar', 'arpa', 'as', 'asia', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'biz', 'bj', 'bm', 'bn', 'bo', 'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cat', 'cc', 'cd', 'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'com', 'coop', 'cr', 'cu', 'cv', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'edu', 'ee', 'eg', 'er', 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm', 'gn', 'gov', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'info', 'int', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jobs', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mg', 'mh', 'mil', 'mk', 'ml', 'mm', 'mn', 'mo', 'mobi', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'name', 'nc', 'ne', 'net', 'nf', 'ng', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'org', 'pa', 'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'pro', 'ps', 'pt', 'pw', 'py', 'qa', 're', 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr', 'st', 'su', 'sv', 'sy', 'sz', 'tc', 'td', 'tel', 'tf', 'tg', 'th', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'travel', 'tt', 'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'yt', 'yu', 'za', 'zm', 'zw');
if (!in_array($url_parts[2], $tlds)) continue;
-
+
// Call user specified func
$modified_url = $callback($url);
-
+
// Replace it!
$start = mb_strpos($text, $url, $offset);
$text = mb_substr($text, 0, $start).$modified_url.mb_substr($text, $start + mb_strlen($url), mb_strlen($text));
$offset = $start + mb_strlen($modified_url);
}
-
+
return $text;
}
function common_linkify($url) {
$display = $url;
$url = (!preg_match('#^([a-z]+://|(mailto|aim|tel):)#i', $url)) ? 'http://'.$url:$url;
-
+
if ($longurl = common_longurl($url)) {
$longurl = htmlentities($longurl, ENT_QUOTES, 'UTF-8');
$title = "title=\"$longurl\"";
}
else $title = '';
-
+
return "<a href=\"$url\" $title class=\"extlink\">$display</a>";
}
@@ -667,48 +667,6 @@ function common_relative_profile($sender, $nickname, $dt=null)
return null;
}
-// where should the avatar go for this user?
-
-function common_avatar_filename($id, $extension, $size=null, $extra=null)
-{
- global $config;
-
- if ($size) {
- return $id . '-' . $size . (($extra) ? ('-' . $extra) : '') . $extension;
- } else {
- return $id . '-original' . (($extra) ? ('-' . $extra) : '') . $extension;
- }
-}
-
-function common_avatar_path($filename)
-{
- global $config;
- return INSTALLDIR . '/avatar/' . $filename;
-}
-
-function common_avatar_url($filename)
-{
- return common_path('avatar/'.$filename);
-}
-
-function common_avatar_display_url($avatar)
-{
- $server = common_config('avatar', 'server');
- if ($server) {
- return 'http://'.$server.'/'.$avatar->filename;
- } else {
- return $avatar->url;
- }
-}
-
-function common_default_avatar($size)
-{
- static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
- AVATAR_STREAM_SIZE => 'stream',
- AVATAR_MINI_SIZE => 'mini');
- return theme_path('default-avatar-'.$sizenames[$size].'.png');
-}
-
function common_local_url($action, $args=null, $fragment=null)
{
$url = null;
@@ -750,6 +708,8 @@ function common_fancy_url($action, $args=null)
return common_path("api/statuses/public_timeline.atom");
case 'publicxrds':
return common_path('xrds');
+ case 'tagrss':
+ return common_path('tag/' . $args['tag'] . '/rss');
case 'featuredrss':
return common_path('featuredrss');
case 'favoritedrss':
@@ -951,7 +911,7 @@ function common_fancy_url($action, $args=null)
case 'grouprss':
return common_path('group/'.$args['nickname'].'/rss');
case 'groupmembers':
- return common_path('group/'.$args['nickname'].'/members');
+ return common_path('group/'.$args['nickname'].'/members' . (($args['page']) ? ('?page=' . $args['page']) : ''));
case 'grouplogo':
return common_path('group/'.$args['nickname'].'/logo');
case 'usergroups':
@@ -1523,16 +1483,6 @@ function common_markup_to_html($c)
return Markdown($c);
}
-function common_profile_avatar_url($profile, $size=AVATAR_PROFILE_SIZE)
-{
- $avatar = $profile->getAvatar($size);
- if ($avatar) {
- return common_avatar_display_url($avatar);
- } else {
- return common_default_avatar($size);
- }
-}
-
function common_profile_uri($profile)
{
if (!$profile) {
diff --git a/scripts/enjitqueuehandler.php b/scripts/enjitqueuehandler.php
index 3a4f8315d..40f60da5d 100755
--- a/scripts/enjitqueuehandler.php
+++ b/scripts/enjitqueuehandler.php
@@ -74,7 +74,7 @@ class EnjitQueueHandler extends QueueHandler
$atom .= "<link href='" . $profile->profileurl . "'/>\n";
$atom .= "<link rel='self' type='application/rss+xml' href='" . common_local_url('userrss', array('nickname' => $profile->nickname)) . "'/>\n";
$atom .= "<author><name>" . $profile->nickname . "</name></author>\n";
- $atom .= "<icon>" . common_profile_avatar_url($profile, AVATAR_PROFILE_SIZE) . "</icon>\n";
+ $atom .= "<icon>" . $profile->avatarUrl(AVATAR_PROFILE_SIZE) . "</icon>\n";
$atom .= "</source>\n";
$atom .= "<title>" . htmlspecialchars($msg) . "</title>\n";
$atom .= "<summary>" . htmlspecialchars($msg) . "</summary>\n";
diff --git a/theme/base/css/display.css b/theme/base/css/display.css
index 809c1ba6f..3b72d00ce 100644
--- a/theme/base/css/display.css
+++ b/theme/base/css/display.css
@@ -20,12 +20,11 @@ font-family:sans-serif;
font-size:1em;
line-height:1.65;
position:relative;
-margin:0 auto;
-width:71.714em;
}
h1,h2,h3,h4,h5,h6 {
text-transform:uppercase;
margin-bottom:7px;
+overflow:hidden;
}
h1 {
font-size:1.4em;
@@ -153,7 +152,8 @@ font-weight:bold;
#form_remote_subscribe legend,
#form_openid_login legend,
#form_search legend,
-#form_invite legend {
+#form_invite legend,
+#form_notice_delete legend {
display:none;
}
@@ -180,6 +180,7 @@ float:left;
width:90%;
}
+
#form_login p.form_guide,
#form_register #settings_rememberme p.form_guide,
#form_openid_login #settings_rememberme p.form_guide,
@@ -195,12 +196,16 @@ border-radius:4px;
padding:0 7px;
}
+
+.form_settings input.form_action-secondary {
+margin-left:29px;
+padding:0;
+}
+
#form_search .submit {
margin-left:11px;
}
-
-
address {
float:left;
margin-bottom:18px;
@@ -240,10 +245,9 @@ display:none;
#site_notice {
position:absolute;
-right:0;
-top:49px;
-float:right;
-width:300px;
+top:65px;
+right:18px;
+width:250px;
}
#page_notice {
clear:both;
@@ -254,6 +258,7 @@ margin-bottom:18px;
#anon_notice {
float:left;
width:432px;
+width:28.052em;
padding:11px;
border-radius:7px;
-moz-border-radius:7px;
@@ -361,9 +366,10 @@ margin-right:4px;
}
#wrap {
-float:left;
margin:0 auto;
width:71.714em;
+width:1003px;
+overflow:hidden;
}
#core {
@@ -391,9 +397,9 @@ float:left;
}
#aside_primary {
-width:284px;
+width:280px;
float:left;
-margin-left:2px;
+margin-left:4px;
padding:18px;
border-radius:7px;
-moz-border-radius:7px;
@@ -509,6 +515,7 @@ min-height:123px;
float:left;
margin-bottom:18px;
margin-left:0;
+overflow:hidden;
}
.entity_profile dt,
#entity_statistics dt {
@@ -606,12 +613,14 @@ display:block;
.form_user_block input.submit,
.form_user_unblock input.submit,
.entity_send-a-message a,
+.entity_edit a,
.form_user_nudge input.submit,
.entity_nudge p {
border:0;
padding-left:20px;
}
+.entity_edit a,
.entity_send-a-message a,
.entity_nudge p {
padding:4px 4px 4px 23px;
@@ -749,7 +758,7 @@ border-radius:4px;
/* NOTICES */
#notices_primary {
float:left;
-width:644px;
+width:100%;
border-radius:7px;
-moz-border-radius:7px;
-webkit-border-radius:7px;
@@ -766,6 +775,10 @@ padding-left:28px;
margin-right:11px;
}
+.fn {
+overflow:hidden;
+}
+
.notice .author .fn {
font-weight:bold;
}
@@ -790,7 +803,7 @@ text-decoration:underline;
.notice .entry-title {
float:left;
width:100%;
-overflow:auto;
+overflow:hidden;
}
#shownotice .notice .entry-title {
font-size:2.2em;
@@ -934,7 +947,7 @@ padding:0;
-#new_group {
+#new_group, #group_search {
margin-bottom:18px;
}
#new_group a {
@@ -1063,13 +1076,20 @@ margin-bottom:0;
}
.section .notice {
-padding-top:11px;
-padding-bottom:11px;
+padding-top:7px;
+padding-bottom:7px;
+border-top:0;
}
.section .notice:first-child {
padding-top:0;
-border-top:0;
+}
+
+.section .notice .author {
+margin-right:0;
+}
+.section .notice .author .fn {
+display:none;
}
@@ -1154,3 +1174,5 @@ clear:both;
#form_settings_avatar .form_actions {
margin-bottom:0;
}
+
+
diff --git a/theme/base/css/facebookapp.css b/theme/base/css/facebookapp.css
index af188ad7a..163b41fb4 100644
--- a/theme/base/css/facebookapp.css
+++ b/theme/base/css/facebookapp.css
@@ -1,10 +1,86 @@
@import url("display.css");
@import url("../../identica/css/display.css");
-span.facebook-button { border: 2px solid #777; padding: 5px; display: block; float: left; margin-right: 20px; -moz-border-radius: 4px; border-radius:4px; -webkit-border-radius:4px; font-weight: bold; background-color:#A9BF4F; color:#fff; font-size:1.2em }
+* {
+font-size:14px;
+font-family:"Lucida Sans Unicode", "Lucida Grande", sans-serif;
+}
+
+#wrap {
+background-color:#F0F2F5;
+padding-left:18px;
+padding-right:18px;
+width:auto;
+}
+
+p,label,
+h1,h2,h3,h4,h5,h6 {
+color:#000;
+}
+
+#content {
+width:95%;
+}
+
+#site_nav_local_views a {
+background-color:#D0DFE7;
+}
+#site_nav_local_views a:hover {
+background-color:#FAFBFC;
+}
+
+span.facebook-button {
+border: 2px solid #aaa;
+padding: 3px;
+display: block;
+float: left;
+margin-right: 20px;
+-moz-border-radius: 4px;
+border-radius:4px;
+-webkit-border-radius:4px;
+font-weight: bold;
+background-color:#A9BF4F;
+color:#fff;
+font-size:1.2em
+}
span.facebook-button a { color:#fff }
+.facebook_guide {
+margin-bottom:18px;
+}
+.facebook_guide p {
+font-weight:bold;
+}
+
+
+input {
+height:auto !important;
+}
+
+#facebook-friends {
+float:left;
+width:100%;
+}
+
+#facebook-friends li {
+float:left;
+margin-right:2%;
+margin-bottom:11px;
+width:18%;
+height:115px;
+}
+#facebook-friends li a {
+float:left;
+}
+
+#add_to_profile {
+position:absolute;
+right:18px;
+top:10px;
+z-index:2;
+}
+
.notice div.entry-content dl,
.notice div.entry-content dt,
.notice div.entry-content dd {
@@ -19,12 +95,6 @@ margin-bottom:18px;
list-style-type:none;
}
-.facebook_guide p {
-margin-bottom:18px;
-font-size:1.3em;
-font-weight:bold;
-}
-
.form_settings label {
margin-right:18px;
}
diff --git a/theme/base/images/icons/icon_atom.jpg b/theme/base/images/icons/icon_atom.jpg
deleted file mode 100644
index 22853edc4..000000000
--- a/theme/base/images/icons/icon_atom.jpg
+++ /dev/null
Binary files differ
diff --git a/theme/base/images/icons/icon_atom.png b/theme/base/images/icons/icon_atom.png
new file mode 100644
index 000000000..6a001f11a
--- /dev/null
+++ b/theme/base/images/icons/icon_atom.png
Binary files differ
diff --git a/theme/base/images/icons/icon_rss.jpg b/theme/base/images/icons/icon_rss.jpg
deleted file mode 100644
index da23422d0..000000000
--- a/theme/base/images/icons/icon_rss.jpg
+++ /dev/null
Binary files differ
diff --git a/theme/base/images/icons/icon_rss.png b/theme/base/images/icons/icon_rss.png
new file mode 100644
index 000000000..0ccd1ce25
--- /dev/null
+++ b/theme/base/images/icons/icon_rss.png
Binary files differ
diff --git a/theme/default/bg-body.gif b/theme/default/bg-body.gif
deleted file mode 100644
index 5e1afa048..000000000
--- a/theme/default/bg-body.gif
+++ /dev/null
Binary files differ
diff --git a/theme/default/bg-header.gif b/theme/default/bg-header.gif
deleted file mode 100644
index a34b9b34f..000000000
--- a/theme/default/bg-header.gif
+++ /dev/null
Binary files differ
diff --git a/theme/default/css/display.css b/theme/default/css/display.css
index 97a6a12a8..85b5aa13e 100644
--- a/theme/default/css/display.css
+++ b/theme/default/css/display.css
@@ -34,6 +34,9 @@ border-color:#aaa;
border-color:#97BFD1;
}
+.form_settings input.form_action-secondary {
+background:none;
+}
input.submit,
#form_notice.warning #notice_text-count,
@@ -59,7 +62,8 @@ div.notice-options input,
.form_user_unblock input.submit,
.entity_send-a-message a,
.form_user_nudge input.submit,
-.entity_nudge p {
+.entity_nudge p,
+.form_settings input.form_action-secondary {
color:#002E6E;
}
@@ -67,7 +71,6 @@ color:#002E6E;
.profile {
border-top-color:#D1D9E4;
}
-.section .notice,
.section .profile {
border-top-color:#97BFD1;
}
@@ -92,12 +95,6 @@ color:#333;
color:#000;
}
-#form_notice #notice_data-attach_view {
-background-image:url(../images/icons/twotone/green/paper-clip.gif);
-background-repeat:no-repeat;
-background-position:0 45%;
-background-color:transparent;
-}
#nav_register a {
text-decoration:none;
@@ -123,8 +120,6 @@ background-color:rgba(255, 255, 255, 0.7);
}
-
-
#page_notice .error {
background-color:#F7E8E8;
}
@@ -144,26 +139,21 @@ background-color:#A9BF4F;
}
-
-
#export_data li a {
background-repeat:no-repeat;
background-position:0 45%;
}
#export_data li a.rss {
-background-image:url(../../base/images/icons/icon_rss.jpg);
+background-image:url(../../base/images/icons/icon_rss.png);
}
#export_data li a.atom {
-background-image:url(../../base/images/icons/icon_atom.jpg);
+background-image:url(../../base/images/icons/icon_atom.png);
}
#export_data li a.foaf {
background-image:url(../../base/images/icons/icon_foaf.gif);
}
-#export_data li a.export_vcard {
-background-image:url(../../base/images/icons/icon_vcard.gif);
-}
-
+.entity_edit a,
.entity_send-a-message a,
.form_user_nudge input.submit,
.form_user_block input.submit,
@@ -185,6 +175,9 @@ color:#fff;
background-color:#97BFD1;
}
+.entity_edit a {
+background-image:url(../images/icons/twotone/green/edit.gif);
+}
.entity_send-a-message a {
background-image:url(../images/icons/twotone/green/quote.gif);
}
@@ -204,30 +197,6 @@ background-image:url(../images/icons/twotone/green/shield.gif);
background-color:#fcfcfc;
}
-.notice-data a span {
-background-color:transparent;
-background-repeat:no-repeat;
-background-position:0 45%;
-}
-.notice_video .notice-data a span {
-background-image:url(../images/icons/twotone/green/camera.gif);
-}
-.notice_audio .notice-data a span {
-background-image:url(../images/icons/twotone/green/music.gif);
-}
-.notice_image .notice-data a span {
-background-image:url(../images/icons/twotone/green/search.gif);
-}
-.notice_event .notice-data a span {
-background-image:url(../images/icons/twotone/green/calendar.gif);
-}
-.notice_location .notice-data a span {
-background-image:url(../images/icons/twotone/green/flag.gif);
-}
-.notice_document .notice-data a span {
-background-image:url(../images/icons/twotone/green/document.gif);
-}
-
.notice-options .notice_reply a,
.notice-options form input.submit {
background-color:transparent;
@@ -269,17 +238,21 @@ background-color:#fcfcfc;
#new_group a {
background:transparent url(../images/icons/twotone/green/news.gif) no-repeat 0 45%;
}
-
+#usergroups #new_group {
+float: left;
+margin-right: 2em;
+}
.pagination .nav_prev a,
.pagination .nav_next a {
background-repeat:no-repeat;
+border-color:#D1D9E4;
}
.pagination .nav_prev a {
background-image:url(../images/icons/twotone/green/arrow-left.gif);
-background-position:0 45%;
+background-position:10% 45%;
}
.pagination .nav_next a {
background-image:url(../images/icons/twotone/green/arrow-right.gif);
-background-position:100% 45%;
+background-position:90% 45%;
}
diff --git a/theme/default/css/ie.css b/theme/default/css/ie.css
new file mode 100644
index 000000000..2b06768ea
--- /dev/null
+++ b/theme/default/css/ie.css
@@ -0,0 +1,9 @@
+/* IE specific styles */
+
+.notice-options input.submit {
+color:#fff;
+}
+
+#site_nav_local_views a {
+background-color:#ACCCDA;
+}
diff --git a/theme/default/display.css b/theme/default/display.css
deleted file mode 100644
index f22f9aa69..000000000
--- a/theme/default/display.css
+++ /dev/null
@@ -1,1107 +0,0 @@
-/* CSS Document */
-/* Design & CSS by Marie-Claude Doyon http://www.marieclaudedoyon.com */
-
-html {
- background-color: #f6e5b0;
- }
-body {
- position: absolute;
- width: 100%;
- margin: 0;
- padding: 0;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- line-height: 12px;
- min-height: 100%;
- height: 100%;
- color: #701238;
- }
-a {
- color: #d1451a;
- text-decoration: none;
- }
-a:hover {
- text-decoration: underline;
- }
-img, img a {
- border: 0;
- }
-h1 {
- font-size: 14px;
- }
-
-#wrap {
- margin: 0 auto;
- padding: 0 20px;
- width: 760px;
- background: url(bg-header.gif) repeat-x #fbf2d7;
- }
-#header {
- position: relative;
- margin: 0 auto;
- width: 600px;
- height: 216px;
- }
-#logo {
- margin-top: 9px;
- }
-p#branding {
- margin: 0;
- padding: 6px 0 3px 0;
- color: #fbf2d7;
- font-size: 21px;
- font-weight: bold;
- line-height: 27px;
- }
-p#branding a {
- color: #dab134;
- }
-
-#header h1.pagetitle {
- margin: 0;
- padding: 0;
- font-size: 15px;
- line-height: 24px;
- color: #fff6d5;
-}
-
-#header h2.sitename {
- display: none;
- margin: 0;
- padding: 0;
- color: #fff6d5;
-}
-
-abbr.published { border-bottom:0; }
-
-/* ===== Begin Navigation Styling ===== */
-
-/* ----- Navigation ------ */
-#nav {
- float: right;
- margin: 0;
- padding: 0;
- list-style-type: none;
- font-size: 12px;
- }
-#nav li {
- display: block;
- float: left;
- }
-#nav li a {
- display: block;
- padding: 9px 9px 12px 9px;
- color: #F60;
- }
-#nav li a:hover {
- text-decoration: underline;
- }
-
-/* ----- Tabs ----- */
-#nav_views {
- margin: 0 auto;
- padding: 0;
- position: absolute;
- bottom: 0;
- list-style-type: none;
- font-size: 14px;
- font-weight: bold;
- width: 600px;
- /*height: 30px;*/
- }
-#nav_views li {
- display: block;
- float: left;
- line-height: 21px;
- }
-#nav_views li a {
- display: block;
- margin: 0;
- padding: 4px 12px 3px 12px;
- color: #fff6d5;
- background-color: #d1451a;
- border-right: 1px solid #dcaa3f;
- }
-#nav_views li a:hover {
- text-decoration: none;
- }
-#nav_views li.current a, #nav_views li.current a:hover {
- color: #701238;
- background-color: #fff6d5;
- border-right: 1px solid #dcaa3f;
- }
-#nav_views li.current a:hover {
- color: #d1451a;
- }
-#nav_views li a:hover {
- color: #fff6d5;
- background-color: #701238;
- border-right: 1px solid #dcaa3f;
- }
-
-.feeds {
-clear:both;
-float:right;
-margin-top:1.25em;
-position:absolute;
-right:0;
-bottom:-30px;
-}
-.feeds * {
-line-height:1.4;
-padding:0;
-margin:0;
-font-size:12px;
-}
-
-.feeds p {
-font-weight:bold;
-display:inline;
-display:none;
-}
-.feeds ul {
-display:inline;
-}
-.feeds li {
-list-style-type:none;
-display:inline;
-margin-left:0.5em;
-}
-.feeds li a.rss,
-.feeds li a.atom {
-background:url(icon_feed.jpg) no-repeat;
-padding-top:2px;
-padding-left:20px;
-}
-.feeds li a.foaf {
-background:url(icon_foaf.gif) no-repeat;
-padding-top:2px;
-padding-left:30px;
-}
-
-form#disfavor, form.disfavor,
-form#favor, form.favor {
- float: right;
-}
-
-/*favorites*/
-input#favor, input.favor,
-input#disfavor, input.disfavor {
- background-color:#fcfff5;
- background-color:transparent;
- background-image:url(icon_heart-02.gif);
- background-repeat:no-repeat;
- cursor: pointer;
- border: 0;
- width: 16px;
- height:16px;
- text-indent:-9999px;
-}
-
-input#disfavor, input.disfavor {
- background-image:url(icon_heart-01.gif);
-}
-
-.notice_single:hover input.favor,
-.notice_single:hover input.disfavor {
- background-color:#f3f8ea;
-}
-
-/*profile_actions*/
-#profile_actions {
-padding-left:0;
-list-style-type:none;
-margin:0;
-}
-#profile_actions li {
-margin-bottom:0.5em;
-clear:both;
-}
-
-#profile_actions #profile_nudge input.submit,
-#profile_actions #profile_block input.submit,
-.profile_single form.block input.submit {
-margin:0 0 0 -3px;
-padding:0;
-background-color:transparent;
-color:#C15D42;
-font-family:Georgia,"Times New Roman",Times,serif;
-font-weight:normal;
-font-size:14px;
-text-align:left;
-float:left;
-line-height:18px;
-}
-#profile_actions #profile_nudge input.submit:hover,
-#profile_actions #profile_block input.submit:hover {
-background-color:transparent;
-color:#C15D42;
-}
-
-#wrap p#nudge_response {
-background-color:transparent;
-line-height:18px;
-font-size:14px;
-}
-#wrap #profile_nudge input.disabled {
-color:#999;
-cursor:default;
-}
-
-
-#wrap form input.disabled,
-#wrap form input.disabled:hover {
-background-color:#999;
-cursor:default;
-}
-
-/* ----- Nav Footer ----- */
-#nav_sub {
- clear: both;
- margin: 18px auto 0 auto;
- padding: 0;
- list-style-type: none;
- font-size: 11px;
- font-weight: bold;
- line-height: 21px;
- border-top: 1px solid #dec5b5;
- width: 600px;
- }
-#nav_sub li {
- display: block;
- float: left;
- }
-#nav_sub li a {
- padding: 6px 24px 6px 0;
- }
-#nav_sub li a:hover {
- text-decoration: underline;
- }
-/* ===== End Navigation Styling ===== */
-
-#content {
- clear: left;
- margin: 40px 0 45px 0;
- padding: 0 80px;
- font-family: Georgia, "Times New Roman", Times, serif;
- font-size: 14px;
- line-height: 18px;
- }
-#content h2 {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 15px;
- }
-#content label {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- }
-.instructions p, .success, .error {
- font-weight: normal;
- margin: 36px 0 0 0;
- padding: 10px;
- font-family: Georgia, "Times New Roman", Times, serif;
- font-size: 13px;
- line-height: 15px;
- border: 1px solid #dec5b5;
- color: #fff6d5;
- }
-.instructions a, .success a, .error a {
- color: #d8e2d7;
- text-decoration: underline;
- }
-.instructions a:hover, .success a:hover, .error a:hover {
- color: #fff6d5;
- }
-.success {
- background-color: #48705b;
- }
-.error {
- background-color: #ce3728;
- }
-
-/* ----- Stream -----*/
-
-#notices {
- clear: both;
- margin: 0 auto;
- padding: 0;
- list-style-type: none;
- width: 600px;
- border-top: 1px solid #dec5b5;
- }
-#notices a:hover {
- text-decoration: underline;
- }
-.notice_single {
- clear: both;
- display: block;
- margin: 0;
- padding: 5px 5px 5px 0;
- min-height: 48px;
- font-family: Georgia, "Times New Roman", Times, serif;
- font-size: 13px;
- line-height: 16px;
- border-bottom: 1px solid #dec5b5;
- background-color:#FCFFF5;
- opacity:1;
- }
-.notice_single:hover {
- background-color: #f7ebcc;
- }
-.notice_single p {
- display: inline;
- margin: 0;
- padding: 0;
- }
-#notice_delete_form #confirmation_text {
- display: block;
- font-size: 14px;
- font-weight: bold;
- }
-
-input#submit_yes, input#submit_no {
- margin: 18px 10px 0px 0px;
- padding: 4px;
- font-weight: bold;
- color: #fff6d5;
- background-color: #F60;
- cursor: pointer;
- border: 0;
- width: 40px;
- }
-input#submit_yes:hover, input#submit_no:hover {
- background-color: #701238;
- }
-.avatar.stream {
- float: left;
- margin: 0 10px 0.5em 0;
- }
-p.time {
- display: block;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 10px;
- line-height: 15px;
- }
-p.time a {
- color: #dab134;
- }
-
-/* ----- Profile -----*/
-#profile {
- clear: left;
- margin: 0 -80px;
- padding: 10px 0 0 0;
- min-height: 170px;
- border-top: 1px solid #dec5b5;
- font-family: Georgia, "Times New Roman", Times, serif;
- margin-bottom:1em;
- float:left;
- width:750px;
- }
-#profile h1 {
- margin: 0;
- padding: 0;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 14px;
- }
-#profile h2 {
- margin: 0;
- padding: 0;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 11px;
- text-transform: uppercase;
- color: #dab134;
- }
-#profile p {
- margin: 0 10px 0 0;
- font-size: 12px;
- line-height: 14px;
- }
-#profile p.location {
- margin: 0 10px 12px 0;
- font-style: italic;
- }
-#profile p.notice_current {
- font-size: 18px;
- line-height: 21px;
- }
-#profile_avatar {
- float: left;
- margin-right: 4px;
- }
-#profile_avatar img {
- margin-bottom: 5px;
- }
-.avatar.profile {
- clear: left;
- margin: 0 10px 5px 0;
- }
-.avatar.original {
- float: left;
- margin: 0 10px 18px 0;
- }
-
-#profilesettings {
- margin-bottom:2em;
-}
-
-
-.avatar_view {
- float:left;
- margin-bottom:1em;
- margin-right:1em;
-}
-
-#avatar_preview_view {
- overflow:hidden;
- width:96px;
- height:96px;
-}
-#avatar_crop {
- margin-bottom:2em;
-}
-
-#avatar_crop,
-#avatarfile {
- clear:both;
-}
-
-a.nickname {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-weight: bold;
- font-size: 12px;
- padding-right: 3px;
- }
-.hentry a.nickname {
- font-weight:normal;
-}
-#profile_information {
- float: left;
- position: relative;
- width: 270px;
- }
-.statistics {
- margin-top: 18px;
- }
-.statistics h2 {
- margin: 12px 0 3px 0;
- }
-dl.statistics {
- margin: 0;
- font-size: 12px;
- line-height: 14px;
- }
-.statistics dt {
- float: left;
- width: 96px;
-}
-.statistics dd {
- margin-left: 100px;
-}
-.statistics dt:after {
- content: ":";
- }
-#subscriptions {
- float: left;
- margin: 18px 0 30px 0;
- }
-#subscriptions_avatars {
- float: left;
- margin: 6px 0 0 0;
- padding: 0;
- list-style-type: none;
- width: 270px;
- }
-#subscriptions_avatars li .avatar.mini {
- float: left;
- margin: 0 3px 3px 0;
- padding: 0;
- line-height: 0;
- /* border: 1px solid #f00; */
- }
-#subscriptions_viewall {
- clear: left;
- }
-/* ----- End Profile -----*/
-
-/* ----- Begin Subscriptions & Subscribers -----*/
-
-ul.subscriptions, ul.subscribers {
- float: none;
- margin: 0;
- padding: 0;
- list-style-type: none;
- overflow: auto;
- clear:both;
- }
-ul.subscriptions li, ul.subscribers li {
- display: block;
- float: left;
- padding: 0;
- }
-/* ----- End Subscriptions & Subscribers -----*/
-
-#pagination {
- margin: 18px auto;
- width: 600px;
- }
-#nav_pagination {
- margin: 0 0 36px 0;
- padding: 0;
- float: right;
- list-style-type: none;
- font-size: 12px;
- font-weight: bold;
- }
-#nav_pagination li {
- display: block;
- float: left;
- background-color: #701238;
- }
-#nav_pagination li.before {
- margin-right: 1px;
- }
-#nav_pagination li a {
- padding: 6px 15px;
- line-height: 21px;
- background-color: #701238;
- color: #fff6d5;
- }
-#nav_pagination li a:hover {
- background-color: #3F606F;
- color: #fff6d5;
- text-decoration: none;
- }
-
-#footer {
- clear: both;
- margin: 0 auto;
- padding: 0 0 36px 0;
- width: 600px;
- border-top: 1px solid #dec5b5;
- }
-#footer p {
- margin-top: 9px;
- line-height: 12px;
- }
-#cc {
- float: left;
- margin: 3px 10px 0 0;
- }
-
-/* ===== Begin Forms Styling ===== */
-
-/* ----- Forms General Style ----- */
-form {
- margin: 0 auto;
- padding: 0;
- }
-form {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- }
-form label {
- display: block;
- font-size: 12px;
- font-weight: bold;
- line-height: 18px;
- }
-form input {
- border: 1px solid #dec5b5;
- width: 264px;
- }
-input#submit, input.submit {
- display: block;
- margin: 18px 0;
- padding: 4px;
- font-weight: bold;
- color: #fff6d5;
- background-color: #F60;
- cursor: pointer;
- border: 0;
- width: auto;
- }
-input#submit:hover, input.submit:hover {
- background-color: #701238;
- }
-input.checkbox {
- /*width: 14px;
- height: 14px;*/
- width: auto;
- border: 0;
- }
-
-label.checkbox_label {
- display: inline;
- font-weight: normal;
-}
-
-textarea, input {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- color: #701238;
- padding: 3px;
- }
-textarea:focus, input:focus {
- background-color: #f8ebc0;
- }
-textarea {
- width: 270px;
- border: 1px solid #D8E2D7;
- }
-.input_instructions {
- margin-top: 3px;
- display: block;
- font-size: 11px;
- line-height: 15px;
- color: #924959;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- }
-
-/* ----- Status Form ----- */
-#status_form {
- height: 96px;
- /*background-color: #F00;*/
- }
-#status_form p {
- margin: 36px 0 0 0;
- padding: 0;
- }
-#status_label {
- display: block;
- clear: both;
- margin: 0;
- padding: 0 0 3px 0;
- font-size: 18px;
- font-weight: bold;
- line-height: 24px;
- color: #dab134;
- }
-#status_textarea {
- display: block;
- float: left;
- width: 463px;
- height: 35px;
- padding: 5px;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- color: #701238;
- border: 0;
- }
-#status_submit {
- display: block;
- float: left;
- margin: 1px 0 0 4px;
- width: 63px;
- height: 45px;
- background-color: #F60;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-weight: bold;
- font-size: 14px;
- color: #fff6d5;
- cursor: pointer;
- border: 0;
- }
-#status_submit:hover {
- background-color: #d1451a;
- }
-#counter {
- position: absolute;
- top: 140px;
- left: -64px;
- width: 50px;
- font-weight: bold;
- text-align: right;
-}
-.response_error textarea,
-.response_error .on_max {
-background-color:#fee;
-}
-
-/* ----- Subscribe Form ----- */
-#content .subscribe .submit, #content .unsubscribe .submit, #remotesubscribe .button, #remotesubscribe {
- clear: left;
- margin: 0;
- width: 96px;
- height: 27px;
- font-family: verdana, arial, helvetica, sans-serif;
- font-weight: bold;
- font-size: 10px;
- text-transform: uppercase;
- background-color: #F60;
- color: #fff6d5;
- border: 0;
- }
-#remotesubscribe {
- width: 96px;
- height: 22px;
- padding: 5px 0 0 0;
- text-align: center;
- }
-#content .subscribe .button:hover, #content .unsubscribe .button:hover {
- background-color: #904632;
- cursor: pointer;
- }
-
-a#remotesubscribe {
- display: block;
-}
-
-/* ----- Login Form -----*/
-input#license {
- width: auto;
- border: 0;
- }
-/* ----- Avatar Form -----*/
-form {
- clear: left;
-}
-
-/* ----- OpenID Form -----*/
-
-input#openid_url {
- background: url(login-bg.gif) no-repeat;
- background-color: #fff;
- background-position: 4px 50%;
- color: #000;
- padding-left: 24px;
-}
-
-/* People lists (search results, maybe subscribers) */
-
-#profiles {
- clear: both;
- margin: 0 auto;
- padding: 0;
- list-style-type: none;
- width: 600px;
- border-top: 1px solid #dec5b5;
- /*border: 1px solid #F00;*/
- }
-#profiles a:hover {
- text-decoration: underline;
- }
-
-.profile_single {
- clear: both;
- display: block;
- margin: 0;
- padding: 5px 5px 5px 0;
- min-height: 48px;
- font-family: Georgia, "Times New Roman", Times, serif;
- font-size: 13px;
- line-height: 16px;
- border-bottom: 1px solid #dec5b5;
- width:100%;
- float:left;
- }
-.profile_single:hover {
- background-color: #f7ebcc;
- }
-
-.profile_single form.block,
-.profile_single form.subscribe,
-.profile_single form.unsubscribe {
- float: right;
-}
-
-form.subedit {
- margin-left:4.5em;
-}
-form.subedit p {
- display:inline;
-
-}
-form.subedit input.submit {
- margin:0 0 0 0.5em;
- display:inline;
- background-color:transparent;
- padding:0;
- color:#C15D42;
- border:1px solid #C15D42;
-}
-
-
-
-/* ----- IM Settings Form -----*/
-
-#imsettings p {
- margin: 0;
- padding: 0;
- line-height: 15px;
-}
-
-/* ----- direct message ----- */
-
-#message_form {
- height: 96px;
- /*background-color: #F00;*/
- }
-
-#message_form p {
- margin: 21px 0 0 0;
- padding: 0;
- }
-#message_form label {
- display: inline;
- }
-
-#message_content {
- display: block;
- float: left;
- width: 463px;
- height: 35px;
- padding: 5px;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
- color: #193441;
- border: 0;
- }
-
-#message_send {
- display: block;
- float: left;
- margin: 1px 0 0 4px;
- width: 63px;
- height: 45px;
- background-color: #C15D42;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-weight: bold;
- font-size: 14px;
- color: #FCFFF5;
- cursor: pointer;
- border: 0;
- }
-
-#message_send:hover {
- background-color: #904632;
- }
-
-/* ===== End Forms Styling ===== */
-
-/* ===== Tag Cloud Styling ===== */
-
-p.tagcloud {
-text-align: center;
-}
-
-p.tagcloud a {
-line-height:100%;
-vertical-align:middle;
-}
-
-p.tagcloud a.largest {
-font-size: 400%;
-}
-p.tagcloud a.verylarge {
-font-size: 300%;
-}
-
-p.tagcloud a.large {
-font-size: 200%;
-}
-
-p.tagcloud a.medium {
-font-size: 150%;
-}
-
-p.tagcloud a.small {
-font-size: 100%;
-}
-
-p.tagcloud a.verysmall {
-font-size: 80%;
-}
-
-p.tagcloud a.smallest {
-font-size: 60%;
-}
-
-#subscriptions_nav,
-#filter_tags {
-margin:0 0 2em 0;
-}
-
-#subscriptions_nav {
-padding-bottom:0.5em;
-/*border-bottom:1px solid #D8E2D7;*/
-float:right;
-}
-#filter_tags {
-float:left;
-}
-
-#subscriptions_nav dt,
-#filter_tags dt {
-display:none;
-}
-#subscriptions_nav dd,
-#filter_tags dd {
-margin-left:0;
-}
-#subscriptions_nav ul,
-#filter_tags ul {
-padding-left:0;
-list-style-type:none;
-margin-left:0;
-}
-#subscriptions_nav ul li {
-display:inline;
-padding-left:0.5em;
-margin-left:0.5em;
-border-left:1px solid #D8E2D7;;
-}
-#subscriptions_nav ul li.child_1 {
-border-left:0;
-padding-left:0;
-margin-left:0;
-}
-
-#filter_tags ul li {
-float:left;
-margin-left:0.5em;
-padding-left:0.5em;
-border-left:1px solid #D8E2D7;;
-}
-#filter_tags ul li.child_1 {
-margin-left:0;
-border-left:0;
-padding-left:0;
-}
-#filter_tags ul li li {
-margin-left:0;
-}
-#filter_tags ul li#filter_tags_item {
-width:30em;
-}
-#filter_tags ul li#filter_tags_item form {
-clear:none;
-}
-#filter_tags ul li#filter_tags_item label {
-margin-right:0.5em;
-font-size:14px;
-font-weight:normal;
-font-family:Georgia,"Times New Roman",Times,serif;
-}
-#filter_tags ul li#filter_tags_item label,
-#filter_tags ul li#filter_tags_item select {
-margin-top:-1px;
-margin-bottom:0.5em;
-display:inline;
-}
-#filter_tags ul li#filter_tags_item p {
-margin:0 1em 0 0;
-padding:0;
-float:left;
-}
-#filter_tags ul li .input_instructions {
-display:inline;
-display:block;
-margin:0;
-}
-#filter_tags ul li#filter_tags_item .submit {
-margin:0;
-}
-
-.tags_self,
-.tags_user {
-margin-left:4.5em;
-}
-.tags_self dl,
-.tags_user dl {
-margin-left:0;
-}
-
-.tags_self dt,
-.tags_user dt {
-display:inline;
-margin-right:0.5em;
-}
-
-.tags_self dd,
-.tags_user dd {
-margin-left:0;
-display:inline;
-}
-
-ul.tags {
-padding-left:0;
-margin-left:0;
-list-style-type:none;
-display:inline;
-}
-ul.tags li {
-display:inline;
-margin-right:0.75em;
-}
-ul.tags li a {
-padding-left:17px;
-background:url(icon_tag-01.gif) no-repeat;
-line-height:1.5;
-}
-
-.tags_user {
-margin-bottom:0.5em;
-}
-
-form#tag_user {
-margin-left:8.75em;
-clear:both;
-}
-form#tag_user p {
-margin:0;
-}
-
-form#tag_user label {
-display:inline;
-margin-right:1em;
-}
-form#tag_user .submit {
-margin-left:4em;
-}
-
-form#tag_user .input_instructions {
-margin-left:4.5em;
-}
-
-.profile_list p {
-margin:0 0 0.5em 0;
-}
-
-.profile_list .bio {
-margin-left:4.5em;
-}
-
-/* ----- Mailbox ----- */
-#messages {
- clear: both;
- margin: 0 auto;
- padding: 0;
- list-style-type: none;
- width: 600px;
- border-top: 1px solid #dec5b5;
- }
-
-#messages a:hover {
- text-decoration: underline;
- }
-
-.message_single {
- clear: both;
- display: block;
- margin: 0;
- padding: 5px 5px 5px 0;
- min-height: 48px;
- font-family: Georgia, "Times New Roman", Times, serif;
- font-size: 13px;
- line-height: 16px;
- border-bottom: 1px solid #dec5b5;
- }
-.message_single:hover {
- background-color: #f7ebcc;
- }
-.message_single p {
- display: inline;
- margin: 0;
- padding: 0;
- }
diff --git a/theme/default/icon_feed.jpg b/theme/default/icon_feed.jpg
deleted file mode 100644
index 53c4d4959..000000000
--- a/theme/default/icon_feed.jpg
+++ /dev/null
Binary files differ
diff --git a/theme/default/icon_foaf.gif b/theme/default/icon_foaf.gif
deleted file mode 100644
index f8f784423..000000000
--- a/theme/default/icon_foaf.gif
+++ /dev/null
Binary files differ
diff --git a/theme/default/icon_heart-01.gif b/theme/default/icon_heart-01.gif
deleted file mode 100644
index bdfd7483f..000000000
--- a/theme/default/icon_heart-01.gif
+++ /dev/null
Binary files differ
diff --git a/theme/default/icon_heart-02.gif b/theme/default/icon_heart-02.gif
deleted file mode 100644
index cbb35e0dc..000000000
--- a/theme/default/icon_heart-02.gif
+++ /dev/null
Binary files differ
diff --git a/theme/default/icon_tag-01.gif b/theme/default/icon_tag-01.gif
deleted file mode 100644
index 92e5742ce..000000000
--- a/theme/default/icon_tag-01.gif
+++ /dev/null
Binary files differ
diff --git a/theme/default/ie6.css b/theme/default/ie6.css
deleted file mode 100644
index f9fc8150e..000000000
--- a/theme/default/ie6.css
+++ /dev/null
@@ -1,73 +0,0 @@
-@charset "UTF-8";
-/* CSS Document */
-body {
- text-align: center;
-}
-input {
- height: 24px;
-}
-#wrap {
- margin: 0 auto;
- padding: 0 20px;
- width: 800px;
- text-align: left;
- background: url(bg-header.gif) repeat-x #fbf2d7;
- }
-#header {
- position: relative;
- margin-left: 108px;
- }
-#nav_views {
- margin: 0;
- }
-#nav_views li {
- line-height: 19px;
- }
-.statistics dd {
- margin-top: -15px;
- clear: both;
- }
-#notices {
- margin: 0;
- }
-.notice_single {
- height: 48px;
- }
-#profile {
- margin-left:0px;
-}
-#profile p.notice_current {
- height: 96px;
- }
-#filter_tags {
- margin-left:20px;
-}
-#content .subscriptions {
- margin-left:30px;
- width:100%;
-}
-
-#subscriptions_avatars li {
- float: left;
- margin: 0;
- padding: 0;
- }
-img.avatar.original, img.avatar.profile {
- clear: none;
- float: left;
-}
-#status_textarea {
- height: 46px;
- }
-
-#nav_pagination li a {
- padding: 6px 15px;
- line-height: 27px;
- }
-#nav_sub {
- position: relative;
- margin-left: 108px;
- }
-#footer {
- margin-left: 108px;
-}
diff --git a/theme/default/ie7.css b/theme/default/ie7.css
deleted file mode 100644
index 23a3241b7..000000000
--- a/theme/default/ie7.css
+++ /dev/null
@@ -1,39 +0,0 @@
-@charset "UTF-8";
-/* CSS Document */
-input.disfavor,
-input.favor {
- text-indent:0;
- text-align:right;
- padding-left:25px;
-}
-
-#profile_actions li {
-float:left;
-clear:both;
-}
-#profile_actions #profile_nudge input.submit {
-margin-left:0;
-width:100px;
-}
-
-#statistics dd {
- clear: both;
- }
-
-#subscriptions_avatars li {
- float: left;
- }
-img.avatar.original, img.avatar.profile {
- clear: none;
- float: left;
-}
-
-#nav_pagination li a {
- padding: 6px 15px;
- line-height: 27px;
- }
-
-#filter_tags ul li#filter_tags_item label {
-position:relative;
-top:-8px;
-} \ No newline at end of file
diff --git a/theme/default/login-bg.gif b/theme/default/login-bg.gif
deleted file mode 100644
index e2d8377db..000000000
--- a/theme/default/login-bg.gif
+++ /dev/null
Binary files differ
diff --git a/theme/identica/bg-body.gif b/theme/identica/bg-body.gif
deleted file mode 100644
index d87e2e8d7..000000000
--- a/theme/identica/bg-body.gif
+++ /dev/null
Binary files differ
diff --git a/theme/identica/bg-header.gif b/theme/identica/bg-header.gif
deleted file mode 100644
index 5154b2e5e..000000000
--- a/theme/identica/bg-header.gif
+++ /dev/null
Binary files differ
diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css
index beb5a2c13..576a2e14b 100644
--- a/theme/identica/css/display.css
+++ b/theme/identica/css/display.css
@@ -34,6 +34,9 @@ border-color:#aaa;
border-color:#ddd;
}
+.form_settings input.form_action-secondary {
+background:none;
+}
input.submit,
#form_notice.warning #notice_text-count,
@@ -59,7 +62,8 @@ div.notice-options input,
.form_user_unblock input.submit,
.entity_send-a-message a,
.form_user_nudge input.submit,
-.entity_nudge p {
+.entity_nudge p,
+.form_settings input.form_action-secondary {
color:#002E6E;
}
@@ -67,7 +71,6 @@ color:#002E6E;
.profile {
border-top-color:#CEE1E9;
}
-.section .notice,
.section .profile {
border-top-color:#87B4C8;
}
@@ -92,12 +95,6 @@ color:#333;
color:#000;
}
-#form_notice #notice_data-attach_view {
-background-image:url(../images/icons/twotone/green/paper-clip.gif);
-background-repeat:no-repeat;
-background-position:0 45%;
-background-color:transparent;
-}
#nav_register a {
text-decoration:none;
@@ -123,8 +120,6 @@ background-color:rgba(255, 255, 255, 0.7);
}
-
-
#page_notice .error {
background-color:#F7E8E8;
}
@@ -144,26 +139,21 @@ background-color:#9BB43E;
}
-
-
#export_data li a {
background-repeat:no-repeat;
background-position:0 45%;
}
#export_data li a.rss {
-background-image:url(../../base/images/icons/icon_rss.jpg);
+background-image:url(../../base/images/icons/icon_rss.png);
}
#export_data li a.atom {
-background-image:url(../../base/images/icons/icon_atom.jpg);
+background-image:url(../../base/images/icons/icon_atom.png);
}
#export_data li a.foaf {
background-image:url(../../base/images/icons/icon_foaf.gif);
}
-#export_data li a.export_vcard {
-background-image:url(../../base/images/icons/icon_vcard.gif);
-}
-
+.entity_edit a,
.entity_send-a-message a,
.form_user_nudge input.submit,
.form_user_block input.submit,
@@ -185,6 +175,9 @@ color:#fff;
background-color:#87B4C8;
}
+.entity_edit a {
+background-image:url(../images/icons/twotone/green/edit.gif);
+}
.entity_send-a-message a {
background-image:url(../images/icons/twotone/green/quote.gif);
}
@@ -204,30 +197,6 @@ background-image:url(../images/icons/twotone/green/shield.gif);
background-color:#fcfcfc;
}
-.notice-data a span {
-background-color:transparent;
-background-repeat:no-repeat;
-background-position:0 45%;
-}
-.notice_video .notice-data a span {
-background-image:url(../images/icons/twotone/green/camera.gif);
-}
-.notice_audio .notice-data a span {
-background-image:url(../images/icons/twotone/green/music.gif);
-}
-.notice_image .notice-data a span {
-background-image:url(../images/icons/twotone/green/search.gif);
-}
-.notice_event .notice-data a span {
-background-image:url(../images/icons/twotone/green/calendar.gif);
-}
-.notice_location .notice-data a span {
-background-image:url(../images/icons/twotone/green/flag.gif);
-}
-.notice_document .notice-data a span {
-background-image:url(../images/icons/twotone/green/document.gif);
-}
-
.notice-options .notice_reply a,
.notice-options form input.submit {
background-color:transparent;
@@ -269,7 +238,10 @@ background-color:#fcfcfc;
#new_group a {
background:transparent url(../images/icons/twotone/green/news.gif) no-repeat 0 45%;
}
-
+#usergroups #new_group {
+float: left;
+margin-right: 2em;
+}
.pagination .nav_prev a,
.pagination .nav_next a {
diff --git a/theme/identica/display.css b/theme/identica/display.css
deleted file mode 100644
index 62d34f00e..000000000
--- a/theme/identica/display.css
+++ /dev/null
@@ -1,187 +0,0 @@
-/* CSS Document */
-/* Design & CSS by Marie-Claude Doyon http://www.marieclaudedoyon.com */
-
-@import url(../default/display.css);
-
-html {
- background: url(bg-body.gif) repeat-y top center #d8e2d7;
-}
-
-body {
- color: #193441;
-}
-
-a {
- color: #C15D42;
-}
-
-#wrap {
- background: url(bg-header.gif) repeat-x #FCFFF5;
-}
-
-#header h1.pagetitle {
- color: #d8e2d7;
-}
-
-#header h2.sitename {
- color: #FCFFF5;
-}
-
-#nav li a {
- color: #91AA9D;
-}
-
-#nav_views li a {
- color: #FCFFF5;
- background-color: #91AA9D;
- border-right: 1px solid #6A8787;
-}
-
-#nav_views li.current a, #nav_views li.current a:hover {
- color: #3F606F;
- background-color: #FCFFF5;
- border-right: 1px solid #6A8787;
-}
-
-#nav_views li.current a:hover {
- color: #193441;
-}
-
-#nav_views li a:hover {
- color: #FCFFF5;
- background-color: #3F606F;
- border-right: 1px solid #6A8787;
- }
-
-#nav_sub {
- border-top: 1px solid #D8E2D7;
- }
-
-.instructions p, .success, .error {
- border: 1px solid #91AA9D;
- color: #FCFFF5;
- }
-.instructions a:hover, .success a:hover, .error a:hover {
- color: #FCFFF5;
- }
-
-#notices {
- border-top: 1px solid #D8E2D7;
- }
-
-.notice_single {
- border-bottom: 1px solid #D8E2D7;
-}
-
-.notice_single:hover {
- background-color: #F3F8EA;
- }
-
-input#submit_yes, input#submit_no {
- color: #FCFFF5;
- background-color: #C15D42;
- }
-
-input#submit_yes:hover, input#submit_no:hover {
- background-color: #904632;
- }
-
-p.time a {
- color: #91AA9D;
- }
-
-#profile {
- border-top: 1px solid #D8E2D7;
- }
-
-#profile h2 {
- color: #91AA9D;
- }
-
-#nav_pagination li {
- background-color: #91AA9D;
- }
-
-#nav_pagination li a {
- background-color: #91AA9D;
- color: #FCFFF5;
- }
-
-#nav_pagination li a:hover {
- color: #FCFFF5;
- }
-
-#footer {
- border-top: 1px solid #D8E2D7;
- }
-
-form input {
- border: 1px solid #D8E2D7;
- }
-
-input#submit, input.submit {
- color: #FCFFF5;
- background-color: #C15D42;
- }
-
-input#submit:hover, input.submit:hover {
- background-color: #904632;
- }
-
-textarea, input {
- color: #193441;
- }
-
-textarea:focus, input:focus {
- background-color: #f0f6eb;
- }
-
-.input_instructions {
- color: #91aa9d;
- }
-
-#status_label {
- color: #91AA9D;
- }
-
-#status_textarea {
- color: #193441;
-}
-
-#status_submit {
- background-color: #C15D42;
- color: #FCFFF5;
- }
-
-#status_submit:hover {
- background-color: #904632;
- }
-
-#content .subscribe .submit, #content .unsubscribe .submit, #remotesubscribe .button, #remotesubscribe {
- background-color: #c15d42;
- color: #fcfff5;
- }
-
-#profiles {
- border-top: 1px solid #D8E2D7;
- }
-
-.profile_single {
- border-bottom: 1px solid #D8E2D7;
- }
-
-.profile_single:hover {
- background-color: #F3F8EA;
- }
-
-#messages {
- border-top: 1px solid #D8E2D7;
- }
-
-.message_single {
- border-bottom: 1px solid #D8E2D7;
- }
-
-.message_single:hover {
- background-color: #F3F8EA;
- }
diff --git a/theme/identica/ie6.css b/theme/identica/ie6.css
deleted file mode 100644
index a301f1dc5..000000000
--- a/theme/identica/ie6.css
+++ /dev/null
@@ -1,14 +0,0 @@
-@charset "UTF-8";
-/* CSS Document */
-@import url(../default/ie6.css);
-#wrap {
- background: url(bg-header.gif) repeat-x #FCFFF5;
- }
-
-
-input.disfavor,
-input.favor {
- text-indent:0px;
- text-align:right;
- padding-left:25px;
-} \ No newline at end of file
diff --git a/theme/identica/ie7.css b/theme/identica/ie7.css
deleted file mode 100644
index cab6f4059..000000000
--- a/theme/identica/ie7.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@charset "UTF-8";
-/* CSS Document */
-@import url(../default/ie7.css);
diff --git a/theme/identica/login-bg.gif b/theme/identica/login-bg.gif
deleted file mode 100644
index e2d8377db..000000000
--- a/theme/identica/login-bg.gif
+++ /dev/null
Binary files differ