Merge branch 'master' of /var/www/trunk

This commit is contained in:
Robin Millette 2009-01-23 07:51:02 +00:00
commit aa100884fb
15 changed files with 370 additions and 79 deletions

View File

@ -119,9 +119,8 @@ class AvatarsettingsAction extends AccountSettingsAction
$this->elementStart('ul', 'form_data');
if ($original) {
$this->elementStart('li',
array('id' => 'avatar_original',
'class' => 'avatar_view'));
$this->elementStart('li', array('id' => 'avatar_original',
'class' => 'avatar_view'));
$this->element('h2', null, _("Original"));
$this->elementStart('div', array('id'=>'avatar_original_view'));
$this->element('img', array('src' => $original->url,
@ -135,16 +134,16 @@ class AvatarsettingsAction extends AccountSettingsAction
$avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
if ($avatar) {
$this->elementStart('li',
array('id' => 'avatar_preview',
'class' => 'avatar_view'));
$this->elementStart('li', array('id' => 'avatar_preview',
'class' => 'avatar_view'));
$this->element('h2', null, _("Preview"));
$this->elementStart('div', array('id'=>'avatar_preview_view'));
$this->element('img', array('src' => $original->url,//$avatar->url,
$this->element('img', array('src' => $original->url,
'width' => AVATAR_PROFILE_SIZE,
'height' => AVATAR_PROFILE_SIZE,
'alt' => $user->nickname));
$this->elementEnd('div');
$this->elementEnd('li');
}
$this->elementStart('li', array ('id' => 'settings_attach'));

View File

@ -57,29 +57,30 @@ class FacebookhomeAction extends FacebookAction
$this->user = $this->flink->getUser();
// If this is the first time the user has started the app
// prompt for Facebook status update permission
if (!$this->facebook->api_client->users_hasAppPermission('status_update')) {
// prompt for Facebook status update permission
if (!$this->facebook->api_client->users_hasAppPermission('status_update')) {
if ($this->facebook->api_client->data_getUserPreference(
FACEBOOK_PROMPTED_UPDATE_PREF) != 'true') {
$this->getUpdatePermission();
return;
FACEBOOK_PROMPTED_UPDATE_PREF) != 'true') {
$this->getUpdatePermission();
return;
}
}
// Make sure the user's profile box has the lastest notice
$notice = $this->user->getCurrentNotice();
$this->updateProfileBox($notice);
if ($notice) {
$this->updateProfileBox($notice);
}
if ($this->arg('status_submit') == 'Send') {
if ($this->arg('status_submit') == 'Send') {
$this->saveNewNotice();
}
}
// User is authenticated and has already been prompted once for
// Facebook status update permission? Then show the main page
// of the app
$this->showPage();
} else {
@ -201,13 +202,13 @@ class FacebookhomeAction extends FacebookAction
$this->elementEnd('p');
$this->elementStart('form', array('method' => 'post',
'action' => $app_url,
'action' => "$app_url/index.php",
'id' => 'facebook-skip-permissions'));
$this->elementStart('ul', array('id' => 'fb-permissions-list'));
$this->elementStart('li', array('id' => 'fb-permissions-item'));
$this->elementStart('fb:prompt-permission', array('perms' => 'status_update',
'next_fbjs' => 'document.setLocation(\'' . $this->app_uri . '\')'));
'next_fbjs' => 'document.setLocation(\'' . "$this->app_uri/index.php" . '\')'));
$this->element('span', array('class' => 'facebook-button'),
sprintf(_('Allow %s to update my Facebook status'), $this->app_name));
$this->elementEnd('fb:prompt-permission');

101
actions/facebooklogin.php Normal file
View File

@ -0,0 +1,101 @@
<?php
/*
* Laconica - a distributed open-source microblogging tool
* Copyright (C) 2008, Controlez-Vous, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
if (!defined('LACONICA')) { exit(1); }
require_once(INSTALLDIR.'/lib/facebookaction.php');
class FacebookinviteAction extends FacebookAction
{
function handle($args)
{
parent::handle($args);
$this->error = $error;
if ($this->flink) {
if (!$this->facebook->api_client->users_hasAppPermission('status_update') &&
$this->facebook->api_client->data_getUserPreference(
FACEBOOK_PROMPTED_UPDATE_PREF) == 'true') {
echo '<h1>REDIRECT TO HOME</h1>';
}
} else {
$this->showPage();
}
}
function showContent()
{
// If the user has opted not to initially allow the app to have
// Facebook status update permission, store that preference. Only
// promt the user the first time she uses the app
if ($this->arg('skip')) {
$this->facebook->api_client->data_setUserPreference(
FACEBOOK_PROMPTED_UPDATE_PREF, 'true');
}
if ($this->flink) {
$this->user = $this->flink->getUser();
// If this is the first time the user has started the app
// prompt for Facebook status update permission
if (!$this->facebook->api_client->users_hasAppPermission('status_update')) {
if ($this->facebook->api_client->data_getUserPreference(
FACEBOOK_PROMPTED_UPDATE_PREF) != 'true') {
$this->getUpdatePermission();
return;
}
}
} else {
$this->showLoginForm();
}
}
function showSuccessContent()
{
}
function showFormContent()
{
}
function title()
{
return sprintf(_('Login'));
}
function redirectHome()
{
}
}

View File

@ -132,7 +132,7 @@ class FacebooksettingsAction extends FacebookAction
$this->elementStart('ul', array('id' => 'fb-permissions-list'));
$this->elementStart('li', array('id' => 'fb-permissions-item'));
$this->elementStart('fb:prompt-permission', array('perms' => 'status_update',
'next_fbjs' => 'document.setLocation(\'' . "$this->app_url/settings.php" . '\')'));
'next_fbjs' => 'document.setLocation(\'' . "$this->app_uri/settings.php" . '\')'));
$this->element('span', array('class' => 'facebook-button'),
sprintf(_('Allow %s to update my Facebook status'), common_config('site', 'name')));
$this->elementEnd('fb:prompt-permission');

42
doc/groups Normal file
View File

@ -0,0 +1,42 @@
Users on %%site.name%% can create *groups* that other users can join.
Groups can be a great way to share information and entertainment with
a group of people who have a common interest or background.
You can find out about groups on the server on the
[Groups](%%action.groups%%) page. You can join a group by clicking on
the "Join" button either in the group list or on the group's home page.
Starting a new group
--------------------
If you want, you can start a new group for friends and people with
common interests. Note that all groups are free for anyone to join.
To start a new group, use the [new group](%%action.newgroup%%) tool
and fill out the form. Describe your group as best you can if you want
people to be able to find it.
When choosing the nickname for your group, try to keep it short. The
nickname is included in every message to and from the group, so the
less chars the better. Try using acronyms for organizations, or
airport codes for places (like 'pdx' instead of 'portland').
Sending messages to a group
---------------------------
You can send a message to a group using the syntax "!groupname"
anywhere in the message. If you have more than one group named, the
notice will go to each group. Only members can send notices to a
group, and groups do not respond to direct messages (DMs).
Receiving messages
------------------
New group messages will appear in your inbox, and will also come to
your phone or IM client if you've set them up to receive notices.
Remote groups
-------------
While it's technically possible, this version of Laconica does not
support remote group membership.

View File

@ -23,6 +23,9 @@ Here are some documents that you might find helpful in understanding
* [FAQ](%%doc.faq%%) - frequently-asked questions about %%site.name%%
* [Contact](%%doc.contact%%) - who to contact with questions about the service
* [IM](%%doc.im%%) - using the instant-message (IM) features of %%site.name%%
* [SMS](%%doc.sms%%) - tying your cellphone to %%site.name%%
* [tags](%%doc.tags%%) - different ways to use tagging
* [Groups](%%doc.groups%%) - joining together in groups
* [OpenID](%%doc.openid%%) - what OpenID is and how to use it with this service
* [OpenMicroBlogging](%%doc.openmublog%%) - subscribing to remote users
* [Privacy](%%doc.privacy%%) - %%site.name%%'s privacy policy

68
doc/sms Normal file
View File

@ -0,0 +1,68 @@
You can post messages to %%site.name%% using a many kinds of cell
phones that support SMS messaging. This site does not support SMS
directly; rather, it uses your carrier's email gateway to send and
receive messages.
Managing your SMS settings
--------------------------
Use the [SMS settings](%%action.smssettings%%) page to set your SMS
preferences. You can add or change your SMS number and set the
flags for SMS updates.
When you add or change your phone number, you'll receive a message on your
phone with a verification code. Enter it into the SMS settings page to
confirm that the owner of the phone authorizes sending it messages.
Note that only the carriers listed in the drop down list on the form
are supported by %%site.name%%. They're the only ones we know how to
make email addresses for.
Receiving messages
------------------
Once you've verified your phone number, you can enable sending
messages to your phone. If you have a lot of friends and a typical
phone, it can be hard to keep up.
Sending messages
----------------
To send a message, you must send an email to the incoming email
address visible on your SMS settings page. The method for sending
email from your phone varies from carrier to carrier and from handset
to handet; if in doubt, ask your carrier.
Keep your incoming email address a secret -- it's the only way we know
you're really you!
Commands
--------
You can use the following commands with %%site.name%%.
* on - turn on notifications
* off - turn off notifications
* help - show this help
* follow <nickname> - subscribe to user
* leave <nickname> - unsubscribe from user
* d <nickname> <text> - direct message to user
* get <nickname> - get last notice from user
* whois <nickname> - get profile info on user
* fav <nickname> - add user's last notice as a 'fave'
* stats - get your stats
* stop - same as 'off'
* quit - same as 'off'
* sub <nickname> - same as 'follow'
* unsub <nickname> - same as 'leave'
* last <nickname> - same as 'get'
* on <nickname> - not yet implemented.
* off <nickname> - not yet implemented.
* nudge <nickname> - not yet implemented.
* invite <phone number> - not yet implemented.
* track <word> - not yet implemented.
* untrack <word> - not yet implemented.
* track off - not yet implemented.
* untrack all - not yet implemented.
* tracks - not yet implemented.
* tracking - not yet implemented.

40
doc/tags Normal file
View File

@ -0,0 +1,40 @@
%%site.name%% supports
[tags](http://en.wikipedia.org/wiki/Tag_(metadata)) to help you
organize your activities here. You can use tags for people and for
notices.
Tagging a notice
----------------
You can tag a notice using a *hashtag*; a # character followed by
letters and numbers as well as '.', '-', and '_'. Note that accented
latin characters are not supported, and non-roman scripts are right out.
The HTML for the notice will link to a stream of all the other notices
with that tag. This can be a great way to keep track of a conversation.
The most popular current tags on the site can be found in the [public
tag cloud](%%action.publictagcloud%%). Their size shows their
popularity and recency.
Tagging yourself
----------------
You can also add tags for yourself on your [profile
settings](%%action.profilesettings%%) page. Use single words to
describe yourself, your experiences and your interest. The tags will
become links on your profile page to a list of all the users on the
site who use that same tag. It can be a nice way to find people who
are related to you geographically or who have a common interest.
Tagging your subscriptions
--------------------------
You can also tag your subscriptions, on the subscriptions page. This
makes it easy to organize your subscriptions into groups and sort
through them separately.
You can also send a notice "to the attention of" everyone you've
marked with a particular tag (note: *not* people who've marked
themselves with that tag). "@#family hello" will send a notice to
everyone you've marked with the tag 'family'.

View File

@ -21,6 +21,9 @@ RewriteRule ^doc/openid$ index.php?action=doc&title=openid [L,QSA]
RewriteRule ^doc/openmublog$ index.php?action=doc&title=openmublog [L,QSA]
RewriteRule ^doc/privacy$ index.php?action=doc&title=privacy [L,QSA]
RewriteRule ^doc/source$ index.php?action=doc&title=source [L,QSA]
RewriteRule ^doc/tags$ index.php?action=doc&title=tags [L,QSA]
RewriteRule ^doc/groups$ index.php?action=doc&title=groups [L,QSA]
RewriteRule ^doc/sms$ index.php?action=doc&title=sms [L,QSA]
RewriteRule ^facebook/$ index.php?action=facebookhome [L,QSA]
RewriteRule ^facebook/index.php$ index.php?action=facebookhome [L,QSA]

View File

@ -156,10 +156,6 @@ class Action extends HTMLOutputter // lawsuit
'type' => 'text/css',
'href' => theme_path('css/display.css', 'base') . '?version=' . LACONICA_VERSION,
'media' => 'screen, projection, tv'));
$this->element('link', array('rel' => 'stylesheet',
'type' => 'text/css',
'href' => theme_path('css/thickbox.css', 'base') . '?version=' . LACONICA_VERSION,
'media' => 'screen, projection, tv'));
$this->element('link', array('rel' => 'stylesheet',
'type' => 'text/css',
'href' => theme_path('css/display.css', null) . '?version=' . LACONICA_VERSION,

View File

@ -68,6 +68,8 @@ class FacebookAction extends Action
$this->fbuid = $flink->foreign_id;
$this->user = $flink->getUser();
}
$this->args = array();
}
function prepare($argarray)

View File

@ -57,7 +57,7 @@ function getFacebookBaseCSS()
{
# Add a timestamp to the CSS file so Facebook cache wont ignore our changes
$ts = filemtime(INSTALLDIR.'/theme/base/css/facebookapp.base.css');
$cssurl = INSTALLDIR.'/theme/base/css/facebookapp.base.css' . "?ts=$ts";
$cssurl = theme_path('css/facebookapp.base.css', 'base') . "?ts=$ts";
return $cssurl;
}

View File

@ -34,7 +34,7 @@ require_once INSTALLDIR . '/lib/facebookutil.php';
$last_updated_file = INSTALLDIR . '/scripts/facebook_last_updated';
// Lock file name
$tmp_file = "/tmp/update_facebook.lock";
$tmp_file = INSTALLDIR . '/scripts/update_facebook.lock';
// Make sure only one copy of the script is running at a time
if (!($tmp_file = @fopen($tmp_file, "w")))

View File

@ -226,7 +226,7 @@ position:absolute;
right:0;
top:49px;
float:right;
width:322px;
width:300px;
}
#page_notice {
clear:both;
@ -371,7 +371,7 @@ border-radius:7px;
#content_inner {
position:relative;
width:100%;
float;left;
float:left;
}
#aside_primary {

View File

@ -1,8 +1,16 @@
/* theme: identica */
/** theme: default
*
* @package Laconica
* @author Sarven Capadisli <csarven@controlyourself.ca>
* @copyright 2009 Control Yourself, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://laconi.ca/
*/
html,
body,
a:active {
background-color:#CEE1E9;
background-color:#97BFD1;
}
body {
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
@ -18,14 +26,17 @@ display:none;
input, textarea, select, option {
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
}
input, textarea, select {
input, textarea, select,
.entity_remote_subscribe {
border-color:#aaa;
}
input.submit,
#form_notice.warning #notice_text-count,
#nav_register a,
.form_settings .form_note {
.form_settings .form_note,
.entity_remote_subscribe {
background-color:#A9BF4F;
}
@ -34,35 +45,47 @@ input:focus, textarea:focus, select:focus,
border-color:#A9BF4F;
}
input.submit,
#nav_register a {
color:#F5FDFD;
#nav_register a,
.entity_remote_subscribe {
color:#fff;
}
a,
div.notice-options input {
div.notice-options input,
.form_user_block input.submit,
.form_user_unblock input.submit,
#entity_send-a-message a,
.form_user_nudge input.submit,
#entity_nudge p {
color:#002E6E;
}
.notice p.entry-content a:visited {
.notice,
.profile {
border-top-color:#D1D9E4;
}
.section .notice,
.section .profile {
border-top-color:#97BFD1;
}
#content .notice p.entry-content a:visited {
background-color:#fcfcfc;
}
.notice p.entry-content .vcard a {
#content .notice p.entry-content .vcard a {
background-color:#fcfffc;
}
#aside_primary,
#user_subscribe a,
#TB_window input.submit,
.form_user_subscribe input.submit {
background-color:#fff;
#aside_primary {
background-color:#CEE1E9;
}
#notice_text-count {
color:#333;
}
#form_notice.warning #notice_text-count,
#user_actions a {
#form_notice.warning #notice_text-count {
color:#000;
}
@ -81,11 +104,11 @@ padding:2px 4px;
#content,
#site_nav_local_views a {
border-color:#F5FDFD;
border-color:#fff;
}
#content,
#site_nav_local_views .current a {
background-color:#F5FDFD;
background-color:#fff;
}
#site_nav_local_views a {
@ -105,6 +128,20 @@ background-color:#F7E8E8;
background-color:#EFF3DC;
}
#anon_notice {
background-color:#97BFD1;
color:#fff;
border-color:#fff;
}
#showstream #anon_notice {
background-color:#A9BF4F;
}
#export_data li a {
background-repeat:no-repeat;
background-position:0 45%;
@ -123,32 +160,41 @@ background-image:url(../../base/images/icons/icon_vcard.gif);
}
/*user_actions*/
#user_actions li {
border-top-color:#eee;
}
#user_subscribe a,
#TB_window input.submit,
.form_user_subscribe input.submit {
background-image: url(../images/icons/twotone/green/shield.gif);
background-position: 0 45%;
#entity_send-a-message a,
.form_user_nudge input.submit,
.form_user_block input.submit,
.form_user_unblock input.submit,
#entity_nudge p {
background-position: 0 40%;
background-repeat: no-repeat;
background-color:transparent;
}
.form_group_join input.submit,
.form_group_leave input.submit
.form_user_subscribe input.submit,
.form_user_unsubscribe input.submit {
background-color:#647819;
color:#F5FDFD;
background-color:#A9BF4F;
color:#fff;
}
#user_send-a-message a {
background:url(../images/icons/twotone/green/quote.gif) 0 45% no-repeat;
.form_user_unsubscribe input.submit,
.form_group_leave input.submit {
background-color:#97BFD1;
}
#entity_send-a-message a {
background-image:url(../images/icons/twotone/green/quote.gif);
}
#entity_nudge p,
.form_user_nudge input.submit {
background:url(../images/icons/twotone/green/mail.gif) 0 45% no-repeat;
background-image:url(../images/icons/twotone/green/mail.gif);
}
.form_user_block input.submit {
background:url(../images/icons/twotone/green/against.gif) 0 45% no-repeat;
.form_user_block input.submit,
.form_user_unblock input.submit {
background-image:url(../images/icons/twotone/green/shield.gif);
}
/* NOTICES */
.notices li.over {
background-color:#fcfcfc;
@ -195,9 +241,11 @@ background:transparent url(../images/icons/twotone/green/disfavourite.gif) no-re
background:transparent url(../images/icons/twotone/green/trash.gif) no-repeat 0 45%;
}
div.notice-options {
opacity:0.3;
.notices div.entry-content,
.notices div.notice-options {
opacity:0.4;
}
.notices li.hover div.entry-content,
.notices li.hover div.notice-options {
opacity:1;
}
@ -214,6 +262,10 @@ background-color:#fcfcfc;
/*END: NOTICES */
#groups #new_group a {
background:transparent url(../images/icons/twotone/green/news.gif) no-repeat 0 45%;
}
.pagination .nav_prev a,
.pagination .nav_next a {
@ -227,19 +279,3 @@ background-position:0 45%;
background-image:url(../images/icons/twotone/green/arrow-right.gif);
background-position:100% 45%;
}
#home #intro #guide_steps li a {
border-color:#ccc;
color:#F5FDFD;
}
#home #intro #step_join-now a {
background-color:#f00;
}
#home #intro #step_start-a-group a {
background-color:#0f0;
}
#home #intro #step_create-a-community a {
background-color:#00f;
}