Merge branch '0.7.x' of git@gitorious.org:laconica/dev into 0.7.x

This commit is contained in:
Evan Prodromou 2009-03-04 11:05:58 -08:00
commit 8cc19b90ee
18 changed files with 223 additions and 97 deletions

View File

@ -88,9 +88,18 @@ StartShowLocalNavBlock: Showing the local nav menu
EndShowLocalNavBlock: At the end of the local nav menu EndShowLocalNavBlock: At the end of the local nav menu
- $action: the current action - $action: the current action
StartShowHTML: Chance to set document content type, charset, language, DOCTYPE and html element properties StartShowHTML: Chance to set document headers (e.g., content type, charset, language), DOCTYPE and html element properties
- $action: the current action - $action: the current action
EndShowHTML: Showing after the html element EndShowHTML: Showing after the html element
- $action: the current action - $action: the current action
StartPublicGroupNav: Showing the public group nav menu
- $action: the current action
EndPublicGroupNav: At the end of the public group nav menu
- $action: the current action
RouterInitialized: After the router instance has been initialized
- $m: the Net_URL_Mapper that has just been set up

View File

@ -324,11 +324,13 @@ class AvatarsettingsAction extends AccountSettingsAction
return; return;
} }
// If image is not being cropped assume pos & dimensions of original. $file_d = ($filedata['width'] > $filedata['height'])
? $filedata['height'] : $filedata['width'];
$dest_x = $this->arg('avatar_crop_x') ? $this->arg('avatar_crop_x'):0; $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; $dest_y = $this->arg('avatar_crop_y') ? $this->arg('avatar_crop_y'):0;
$dest_w = $this->arg('avatar_crop_w') ? $this->arg('avatar_crop_w'):$filedata['width']; $dest_w = $this->arg('avatar_crop_w') ? $this->arg('avatar_crop_w'):$file_d;
$dest_h = $this->arg('avatar_crop_h') ? $this->arg('avatar_crop_h'):$filedata['height']; $dest_h = $this->arg('avatar_crop_h') ? $this->arg('avatar_crop_h'):$file_d;
$size = min($dest_w, $dest_h, MAX_ORIGINAL); $size = min($dest_w, $dest_h, MAX_ORIGINAL);
$user = common_current_user(); $user = common_current_user();

View File

@ -169,8 +169,14 @@ class FavoritedAction extends Action
function showContent() function showContent()
{ {
if (common_config('db', 'type') == 'pgsql') {
$weightexpr='sum(exp(-extract(epoch from (now() - fave.modified)) / %s))';
} else {
$weightexpr='sum(exp(-(now() - fave.modified) / %s))';
}
$qry = 'SELECT notice.*, '. $qry = 'SELECT notice.*, '.
'sum(exp(-(now() - fave.modified) / %s)) as weight ' . $weightexpr . ' as weight ' .
'FROM notice JOIN fave ON notice.id = fave.notice_id ' . 'FROM notice JOIN fave ON notice.id = fave.notice_id ' .
'GROUP BY fave.notice_id ' . 'GROUP BY fave.notice_id ' .
'ORDER BY weight DESC'; 'ORDER BY weight DESC';

View File

@ -152,6 +152,11 @@ class NewnoticeAction extends Action
} }
$replyto = $this->trimmed('inreplyto'); $replyto = $this->trimmed('inreplyto');
#If an ID of 0 is wrongly passed here, it will cause a database error,
#so override it...
if ($replyto == 0) {
$replyto = 'false';
}
$notice = Notice::saveNew($user->id, $content, 'web', 1, $notice = Notice::saveNew($user->id, $content, 'web', 1,
($replyto == 'false') ? null : $replyto); ($replyto == 'false') ? null : $replyto);

View File

@ -585,7 +585,7 @@ class Notice extends Memcached_DataObject
$inbox = new Notice_inbox(); $inbox = new Notice_inbox();
$UT = common_config('db','type')=='pgsql'?'"user"':'user'; $UT = common_config('db','type')=='pgsql'?'"user"':'user';
$qry = 'INSERT INTO notice_inbox (user_id, notice_id, created) ' . $qry = 'INSERT INTO notice_inbox (user_id, notice_id, created) ' .
"SELECT $UT.id, " . $this->id . ', "' . $this->created . '" ' . "SELECT $UT.id, " . $this->id . ", '" . $this->created . "' " .
"FROM $UT JOIN subscription ON $UT.id = subscription.subscriber " . "FROM $UT JOIN subscription ON $UT.id = subscription.subscriber " .
'WHERE subscription.subscribed = ' . $this->profile_id . ' ' . 'WHERE subscription.subscribed = ' . $this->profile_id . ' ' .
'AND NOT EXISTS (SELECT user_id, notice_id ' . 'AND NOT EXISTS (SELECT user_id, notice_id ' .
@ -655,7 +655,7 @@ class Notice extends Memcached_DataObject
$inbox = new Notice_inbox(); $inbox = new Notice_inbox();
$UT = common_config('db','type')=='pgsql'?'"user"':'user'; $UT = common_config('db','type')=='pgsql'?'"user"':'user';
$qry = 'INSERT INTO notice_inbox (user_id, notice_id, created, source) ' . $qry = 'INSERT INTO notice_inbox (user_id, notice_id, created, source) ' .
"SELECT $UT.id, " . $this->id . ', "' . $this->created . '", 2 ' . "SELECT $UT.id, " . $this->id . ", '" . $this->created . "', 2 " .
"FROM $UT JOIN group_member ON $UT.id = group_member.profile_id " . "FROM $UT JOIN group_member ON $UT.id = group_member.profile_id " .
'WHERE group_member.group_id = ' . $group->id . ' ' . 'WHERE group_member.group_id = ' . $group->id . ' ' .
'AND NOT EXISTS (SELECT user_id, notice_id ' . 'AND NOT EXISTS (SELECT user_id, notice_id ' .

View File

@ -34,6 +34,9 @@ $config['site']['path'] = 'laconica';
# If you want logging sent to a file instead of syslog # If you want logging sent to a file instead of syslog
#$config['site']['logfile'] = '/tmp/laconica.log'; #$config['site']['logfile'] = '/tmp/laconica.log';
# Enables extra log information, for example full details of PEAR DB errors
#$config['site']['logdebug'] = true;
# This is a PEAR DB DSN, see http://pear.php.net/manual/en/package.database.db.intro-dsn.php # This is a PEAR DB DSN, see http://pear.php.net/manual/en/package.database.db.intro-dsn.php
# Set it to match your actual database # Set it to match your actual database

View File

@ -8,7 +8,7 @@ create table profile (
homepage varchar(255) /* comment 'identifying URL' */, homepage varchar(255) /* comment 'identifying URL' */,
bio varchar(140) /* comment 'descriptive biography' */, bio varchar(140) /* comment 'descriptive biography' */,
location varchar(255) /* comment 'physical location' */, location varchar(255) /* comment 'physical location' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */, modified timestamp /* comment 'date this record was modified' */,
textsearch tsvector textsearch tsvector
@ -23,7 +23,7 @@ create table avatar (
mediatype varchar(32) not null /* comment 'file type' */, mediatype varchar(32) not null /* comment 'file type' */,
filename varchar(255) null /* comment 'local filename, if local' */, filename varchar(255) null /* comment 'local filename, if local' */,
url varchar(255) unique /* comment 'avatar location' */, url varchar(255) unique /* comment 'avatar location' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */, modified timestamp /* comment 'date this record was modified' */,
primary key(profile_id, width, height) primary key(profile_id, width, height)
@ -34,7 +34,7 @@ create table sms_carrier (
id serial primary key /* comment 'primary key for SMS carrier' */, id serial primary key /* comment 'primary key for SMS carrier' */,
name varchar(64) unique /* comment 'name of the carrier' */, name varchar(64) unique /* comment 'name of the carrier' */,
email_pattern varchar(255) not null /* comment 'sprintf pattern for making an email address from a phone number' */, email_pattern varchar(255) not null /* comment 'sprintf pattern for making an email address from a phone number' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified ' */ modified timestamp /* comment 'date this record was modified ' */
); );
@ -50,6 +50,7 @@ create table "user" (
emailnotifyfav integer default 1 /* comment 'Notify by email of favorites' */, emailnotifyfav integer default 1 /* comment 'Notify by email of favorites' */,
emailnotifynudge integer default 1 /* comment 'Notify by email of nudges' */, emailnotifynudge integer default 1 /* comment 'Notify by email of nudges' */,
emailnotifymsg integer default 1 /* comment 'Notify by email of direct messages' */, emailnotifymsg integer default 1 /* comment 'Notify by email of direct messages' */,
emailnotifyattn integer default 1 /* command 'Notify by email of @-replies' */,
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' */, language varchar(50) /* comment 'preferred language' */,
timezone varchar(50) /* comment 'timezone' */, timezone varchar(50) /* comment 'timezone' */,
@ -68,7 +69,7 @@ create table "user" (
autosubscribe integer default 0 /* comment 'automatically subscribe to users who subscribe to us' */, autosubscribe integer default 0 /* comment 'automatically subscribe to users who subscribe to us' */,
urlshorteningservice varchar(50) default 'ur1.ca' /* comment 'service to use for auto-shortening URLs' */, urlshorteningservice varchar(50) default 'ur1.ca' /* comment 'service to use for auto-shortening URLs' */,
inboxed integer default 0 /* comment 'has an inbox been created for this user?' */, inboxed integer default 0 /* comment 'has an inbox been created for this user?' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */ modified timestamp /* comment 'date this record was modified' */
); );
@ -81,7 +82,7 @@ create table remote_profile (
uri varchar(255) unique /* comment 'universally unique identifier, usually a tag URI' */, uri varchar(255) unique /* comment 'universally unique identifier, usually a tag URI' */,
postnoticeurl varchar(255) /* comment 'URL we use for posting notices' */, postnoticeurl varchar(255) /* comment 'URL we use for posting notices' */,
updateprofileurl varchar(255) /* comment 'URL we use for updates to this profile' */, updateprofileurl varchar(255) /* comment 'URL we use for updates to this profile' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */ modified timestamp /* comment 'date this record was modified' */
); );
@ -92,7 +93,7 @@ create table subscription (
sms integer default 1 /* comment 'deliver sms messages' */, sms integer default 1 /* comment 'deliver sms messages' */,
token varchar(255) /* comment 'authorization token' */, token varchar(255) /* comment 'authorization token' */,
secret varchar(255) /* comment 'token secret' */, secret varchar(255) /* comment 'token secret' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */, modified timestamp /* comment 'date this record was modified' */,
primary key (subscriber, subscribed) primary key (subscriber, subscribed)
@ -108,7 +109,7 @@ create table notice (
content varchar(140) /* comment 'update content' */, content varchar(140) /* comment 'update content' */,
rendered text /* comment 'HTML version of the content' */, rendered text /* comment 'HTML version of the content' */,
url varchar(255) /* comment 'URL of any attachment (image, video, bookmark, whatever)' */, url varchar(255) /* comment 'URL of any attachment (image, video, bookmark, whatever)' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */, modified timestamp /* comment 'date this record was modified' */,
reply_to integer /* comment 'notice replied to (usually a guess)' */ references notice (id) , reply_to integer /* comment 'notice replied to (usually a guess)' */ references notice (id) ,
is_local integer default 0 /* comment 'notice was generated by a user' */, is_local integer default 0 /* comment 'notice was generated by a user' */,
@ -123,7 +124,7 @@ create table notice_source (
code varchar(32) primary key not null /* comment 'source code' */, code varchar(32) primary key not null /* comment 'source code' */,
name varchar(255) not null /* comment 'name of the source' */, name varchar(255) not null /* comment 'name of the source' */,
url varchar(255) not null /* comment 'url to link to' */, url varchar(255) not null /* comment 'url to link to' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */ modified timestamp /* comment 'date this record was modified' */
); );
@ -131,7 +132,7 @@ create table reply (
notice_id integer not null /* comment 'notice that is the reply' */ references notice (id) , notice_id integer not null /* comment 'notice that is the reply' */ references notice (id) ,
profile_id integer not null /* comment 'profile replied to' */ references profile (id) , profile_id integer not null /* comment 'profile replied to' */ references profile (id) ,
modified timestamp not null default 'now' /* comment 'date this record was modified' */, modified timestamp /* comment 'date this record was modified' */,
replied_id integer /* comment 'notice replied to (not used, see notice.reply_to)' */, replied_id integer /* comment 'notice replied to (not used, see notice.reply_to)' */,
primary key (notice_id, profile_id) primary key (notice_id, profile_id)
@ -145,7 +146,7 @@ create table fave (
notice_id integer not null /* comment 'notice that is the favorite' */ references notice (id), 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) , user_id integer not null /* comment 'user who likes this notice' */ references "user" (id) ,
modified timestamp not null /* comment 'date this record was modified' */, modified timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was modified' */,
primary key (notice_id, user_id) primary key (notice_id, user_id)
); );
@ -159,7 +160,7 @@ create table consumer (
consumer_key varchar(255) primary key /* comment 'unique identifier, root URL' */, consumer_key varchar(255) primary key /* comment 'unique identifier, root URL' */,
seed char(32) not null /* comment 'seed for new tokens by this consumer' */, seed char(32) not null /* comment 'seed for new tokens by this consumer' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */ modified timestamp /* comment 'date this record was modified' */
); );
@ -170,7 +171,7 @@ create table token (
type integer not null default 0 /* comment 'request or access' */, type integer not null default 0 /* comment 'request or access' */,
state integer default 0 /* comment 'for requests; 0 = initial, 1 = authorized, 2 = used' */, state integer default 0 /* comment 'for requests; 0 = initial, 1 = authorized, 2 = used' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */, modified timestamp /* comment 'date this record was modified' */,
primary key (consumer_key, tok) primary key (consumer_key, tok)
@ -182,7 +183,7 @@ create table nonce (
nonce char(32) not null /* comment 'nonce' */, nonce char(32) not null /* comment 'nonce' */,
ts timestamp not null /* comment 'timestamp sent' */, ts timestamp not null /* comment 'timestamp sent' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */, modified timestamp /* comment 'date this record was modified' */,
primary key (consumer_key, tok, nonce), primary key (consumer_key, tok, nonce),
@ -195,7 +196,7 @@ create table user_openid (
canonical varchar(255) primary key /* comment 'Canonical true URL' */, canonical varchar(255) primary key /* comment 'Canonical true URL' */,
display varchar(255) not null unique /* comment 'URL for viewing, may be different from canonical' */, display varchar(255) not null unique /* comment 'URL for viewing, may be different from canonical' */,
user_id integer not null /* comment 'user owning this URL' */ references "user" (id) , user_id integer not null /* comment 'user owning this URL' */ references "user" (id) ,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */ modified timestamp /* comment 'date this record was modified' */
); );
@ -241,7 +242,7 @@ create table queue_item (
notice_id integer not null /* comment 'notice queued' */ references notice (id) , notice_id integer not null /* comment 'notice queued' */ references notice (id) ,
transport varchar(8) not null /* comment 'queue for what? "email", "jabber", "sms", "irc", ...' */, transport varchar(8) not null /* comment 'queue for what? "email", "jabber", "sms", "irc", ...' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
claimed timestamp /* comment 'date this item was claimed' */, claimed timestamp /* comment 'date this item was claimed' */,
primary key (notice_id, transport) primary key (notice_id, transport)
@ -253,7 +254,7 @@ create index queue_item_created_idx on queue_item using btree(created);
create table notice_tag ( create table notice_tag (
tag varchar( 64 ) not null /* comment 'hash tag associated with this notice' */, tag varchar( 64 ) not null /* comment 'hash tag associated with this notice' */,
notice_id integer not null /* comment 'notice tagged' */ references notice (id) , notice_id integer not null /* comment 'notice tagged' */ references notice (id) ,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
primary key (tag, notice_id) primary key (tag, notice_id)
); );
@ -265,7 +266,7 @@ create table foreign_service (
id int not null primary key /* comment 'numeric key for service' */, id int not null primary key /* comment 'numeric key for service' */,
name varchar(32) not null unique /* comment 'name of the service' */, name varchar(32) not null unique /* comment 'name of the service' */,
description varchar(255) /* comment 'description' */, description varchar(255) /* comment 'description' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */ modified timestamp /* comment 'date this record was modified' */
); );
@ -274,7 +275,7 @@ create table foreign_user (
service int not null /* comment 'foreign key to service' */ references foreign_service(id) , service int not null /* comment 'foreign key to service' */ references foreign_service(id) ,
uri varchar(255) not null unique /* comment 'identifying URI' */, uri varchar(255) not null unique /* comment 'identifying URI' */,
nickname varchar(255) /* comment 'nickname on foreign service' */, nickname varchar(255) /* comment 'nickname on foreign service' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */, modified timestamp /* comment 'date this record was modified' */,
primary key (id, service) primary key (id, service)
@ -288,8 +289,8 @@ create table foreign_link (
noticesync int not null default 1 /* comment 'notice synchronisation, bit 1 = sync outgoing, bit 2 = sync incoming, bit 3 = filter local replies' */, 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 */, 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' */, 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' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp not null /* comment 'date this record was modified' */, modified timestamp /* comment 'date this record was modified' */,
primary key (user_id,foreign_id,service) primary key (user_id,foreign_id,service)
); );
@ -299,7 +300,7 @@ create table foreign_subscription (
service int not null /* comment 'service where relationship happens' */ references foreign_service(id) , service int not null /* comment 'service where relationship happens' */ references foreign_service(id) ,
subscriber int not null /* comment 'subscriber on foreign service' */ , subscriber int not null /* comment 'subscriber on foreign service' */ ,
subscribed int not null /* comment 'subscribed user' */ , subscribed int not null /* comment 'subscribed user' */ ,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
primary key (service, subscriber, subscribed) primary key (service, subscriber, subscribed)
); );
@ -311,7 +312,7 @@ create table invitation (
user_id int not null /* comment 'who sent the invitation' */ references "user" (id), user_id int not null /* comment 'who sent the invitation' */ references "user" (id),
address varchar(255) not null /* comment 'invitation sent to' */, address varchar(255) not null /* comment 'invitation sent to' */,
address_type varchar(8) not null /* comment 'address type ("email", "jabber", "sms") '*/, address_type varchar(8) not null /* comment 'address type ("email", "jabber", "sms") '*/,
created timestamp not null /* comment 'date this record was created' */ created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */
); );
create index invitation_address_idx on invitation using btree(address,address_type); create index invitation_address_idx on invitation using btree(address,address_type);
@ -326,7 +327,7 @@ create table message (
content varchar(140) /* comment 'message content' */, content varchar(140) /* comment 'message content' */,
rendered text /* comment 'HTML version of the content' */, rendered text /* comment 'HTML version of the content' */,
url varchar(255) /* comment 'URL of any attachment (image, video, bookmark, whatever)' */, url varchar(255) /* comment 'URL of any attachment (image, video, bookmark, whatever)' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */, modified timestamp /* comment 'date this record was modified' */,
source varchar(32) /* comment 'source of comment, like "web", "im", or "clientname"' */ source varchar(32) /* comment 'source of comment, like "web", "im", or "clientname"' */
@ -339,7 +340,7 @@ create table notice_inbox (
user_id integer not null /* comment 'user receiving the message' */ references "user" (id), user_id integer not null /* comment 'user receiving the message' */ references "user" (id),
notice_id integer not null /* comment 'notice received' */ references notice (id), notice_id integer not null /* comment 'notice received' */ references notice (id),
created timestamp not null /* comment 'date the notice was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date the notice was created' */,
source integer default 1 /* comment 'reason it is in the inbox; 1=subscription' */, source integer default 1 /* comment 'reason it is in the inbox; 1=subscription' */,
primary key (user_id, notice_id) primary key (user_id, notice_id)
@ -382,7 +383,7 @@ create table user_group (
stream_logo varchar(255) /* comment 'stream-sized logo' */, stream_logo varchar(255) /* comment 'stream-sized logo' */,
mini_logo varchar(255) /* comment 'mini logo' */, mini_logo varchar(255) /* comment 'mini logo' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */ modified timestamp /* comment 'date this record was modified' */
); );
@ -394,7 +395,7 @@ create table group_member (
profile_id integer not null /* comment 'foreign key to profile table' */ references profile (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?' */, is_admin integer default 0 /* comment 'is this user an admin?' */,
created timestamp not null /* comment 'date this record was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
modified timestamp /* comment 'date this record was modified' */, modified timestamp /* comment 'date this record was modified' */,
primary key (group_id, profile_id) primary key (group_id, profile_id)
@ -405,7 +406,7 @@ create table related_group (
group_id integer not null /* comment 'foreign key to user_group' */ references user_group (id) , 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), 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' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,
primary key (group_id, related_group_id) primary key (group_id, related_group_id)
@ -414,7 +415,7 @@ create table related_group (
create table group_inbox ( create table group_inbox (
group_id integer not null /* comment 'group receiving the message' references user_group (id) */, 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) */, notice_id integer not null /* comment 'notice received' references notice (id) */,
created timestamp not null /* comment 'date the notice was created' */, created timestamp not null default CURRENT_TIMESTAMP /* comment 'date the notice was created' */,
primary key (group_id, notice_id) primary key (group_id, notice_id)
); );

View File

@ -43,7 +43,11 @@ function handleError($error)
return; return;
} }
common_log(LOG_ERR, "PEAR error: " . $error->getMessage()); $logmsg = "PEAR error: " . $error->getMessage();
if(common_config('site', 'logdebug')) {
$logmsg .= " : ". $error->getDebugInfo();
}
common_log(LOG_ERR, $logmsg);
$msg = sprintf(_('The database for %s isn\'t responding correctly, '. $msg = sprintf(_('The database for %s isn\'t responding correctly, '.
'so the site won\'t work properly. '. 'so the site won\'t work properly. '.
'The site admins probably know about the problem, '. 'The site admins probably know about the problem, '.

View File

@ -37,10 +37,3 @@
$('#avatar_crop_w').val(c.w); $('#avatar_crop_w').val(c.w);
$('#avatar_crop_h').val(c.h); $('#avatar_crop_h').val(c.h);
}; };
function checkCoords() {
if (parseInt($('#avatar_crop_w').val())) return true;
alert('Please select a crop region then press submit.');
return false;
};

View File

@ -73,6 +73,7 @@ $config =
'theme' => 'default', 'theme' => 'default',
'path' => $_path, 'path' => $_path,
'logfile' => null, 'logfile' => null,
'logdebug' => false,
'fancy' => false, 'fancy' => false,
'locale_path' => INSTALLDIR.'/locale', 'locale_path' => INSTALLDIR.'/locale',
'language' => 'en_US', 'language' => 'en_US',

View File

@ -45,7 +45,7 @@ class GroupsByMembersSection extends GroupSection
{ {
function getGroups() function getGroups()
{ {
$qry = 'SELECT user_group.*, count(*) as value ' . $qry = 'SELECT user_group.id, count(*) as value ' .
'FROM user_group JOIN group_member '. 'FROM user_group JOIN group_member '.
'ON user_group.id = group_member.group_id ' . 'ON user_group.id = group_member.group_id ' .
'GROUP BY user_group.id ' . 'GROUP BY user_group.id ' .

View File

@ -45,7 +45,7 @@ class GroupsByPostsSection extends GroupSection
{ {
function getGroups() function getGroups()
{ {
$qry = 'SELECT user_group.*, count(*) as value ' . $qry = 'SELECT user_group.id, count(*) as value ' .
'FROM user_group JOIN group_inbox '. 'FROM user_group JOIN group_inbox '.
'ON user_group.id = group_inbox.group_id ' . 'ON user_group.id = group_inbox.group_id ' .
'GROUP BY user_group.id ' . 'GROUP BY user_group.id ' .

View File

@ -58,8 +58,14 @@ class GroupTagCloudSection extends TagCloudSection
function getTags() function getTags()
{ {
if (common_config('db', 'type') == 'pgsql') {
$weightexpr='sum(exp(-extract(epoch from (now() - notice_tag.created)) / %s))';
} else {
$weightexpr='sum(exp(-(now() - notice_tag.created) / %s))';
}
$qry = 'SELECT notice_tag.tag, '. $qry = 'SELECT notice_tag.tag, '.
'sum(exp(-(now() - notice_tag.created)/%s)) as weight ' . $weightexpr . ' as weight ' .
'FROM notice_tag JOIN notice ' . 'FROM notice_tag JOIN notice ' .
'ON notice_tag.notice_id = notice.id ' . 'ON notice_tag.notice_id = notice.id ' .
'JOIN group_inbox on group_inbox.notice_id = notice.id ' . 'JOIN group_inbox on group_inbox.notice_id = notice.id ' .

View File

@ -58,8 +58,14 @@ class PersonalTagCloudSection extends TagCloudSection
function getTags() function getTags()
{ {
$qry = 'SELECT notice_tag.tag, '. if (common_config('db', 'type') == 'pgsql') {
'sum(exp(-(now() - notice_tag.created)/%s)) as weight ' . $weightexpr='sum(exp(-extract(epoch from (now() - notice_tag.created)) / %s))';
} else {
$weightexpr='sum(exp(-(now() - notice_tag.created) / %s))';
}
$qry = 'SELECT notice_tag.tag, '.
$weightexpr . ' as weight ' .
'FROM notice_tag JOIN notice ' . 'FROM notice_tag JOIN notice ' .
'ON notice_tag.notice_id = notice.id ' . 'ON notice_tag.notice_id = notice.id ' .
'WHERE notice.profile_id = %d ' . 'WHERE notice.profile_id = %d ' .

View File

@ -48,10 +48,16 @@ class PopularNoticeSection extends NoticeSection
{ {
function getNotices() function getNotices()
{ {
$qry = 'SELECT notice.*, '. if (common_config('db', 'type') == 'pgsql') {
'sum(exp(-(now() - fave.modified) / %s)) as weight ' . $weightexpr='sum(exp(-extract(epoch from (now() - fave.modified)) / %s))';
} else {
$weightexpr='sum(exp(-(now() - fave.modified) / %s))';
}
$qry = 'SELECT notice.id, '.
$weightexpr . ' as weight ' .
'FROM notice JOIN fave ON notice.id = fave.notice_id ' . 'FROM notice JOIN fave ON notice.id = fave.notice_id ' .
'GROUP BY fave.notice_id ' . 'GROUP BY notice.id ' .
'ORDER BY weight DESC'; 'ORDER BY weight DESC';
$offset = 0; $offset = 0;

View File

@ -39,6 +39,7 @@ require_once INSTALLDIR.'/lib/widget.php';
* @category Output * @category Output
* @package Laconica * @package Laconica
* @author Evan Prodromou <evan@controlyourself.ca> * @author Evan Prodromou <evan@controlyourself.ca>
* @author Sarven Capadisli <csarven@controlyourself.ca>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://laconi.ca/ * @link http://laconi.ca/
* *
@ -73,23 +74,26 @@ class PublicGroupNav extends Widget
$this->action->elementStart('ul', array('class' => 'nav')); $this->action->elementStart('ul', array('class' => 'nav'));
$this->out->menuItem(common_local_url('public'), _('Public'), if (Event::handle('StartPublicGroupNav', array($this))) {
_('Public timeline'), $action_name == 'public', 'nav_timeline_public'); $this->out->menuItem(common_local_url('public'), _('Public'),
_('Public timeline'), $action_name == 'public', 'nav_timeline_public');
$this->out->menuItem(common_local_url('groups'), _('Groups'), $this->out->menuItem(common_local_url('groups'), _('Groups'),
_('User groups'), $action_name == 'groups', 'nav_groups'); _('User groups'), $action_name == 'groups', 'nav_groups');
$this->out->menuItem(common_local_url('publictagcloud'), _('Recent tags'), $this->out->menuItem(common_local_url('publictagcloud'), _('Recent tags'),
_('Recent tags'), $action_name == 'publictagcloud', 'nav_recent-tags'); _('Recent tags'), $action_name == 'publictagcloud', 'nav_recent-tags');
if (count(common_config('nickname', 'featured')) > 0) { if (count(common_config('nickname', 'featured')) > 0) {
$this->out->menuItem(common_local_url('featured'), _('Featured'), $this->out->menuItem(common_local_url('featured'), _('Featured'),
_('Featured users'), $action_name == 'featured', 'nav_featured'); _('Featured users'), $action_name == 'featured', 'nav_featured');
}
$this->out->menuItem(common_local_url('favorited'), _('Popular'),
_("Popular notices"), $action_name == 'favorited', 'nav_timeline_favorited');
Event::handle('EndPublicGroupNav', array($this));
} }
$this->out->menuItem(common_local_url('favorited'), _('Popular'),
_("Popular notices"), $action_name == 'favorited', 'nav_timeline_favorited');
$this->action->elementEnd('ul'); $this->action->elementEnd('ul');
} }
} }

View File

@ -393,6 +393,8 @@ class Router
array('action' => 'showstream'), array('action' => 'showstream'),
array('nickname' => '[a-zA-Z0-9]{1,64}')); array('nickname' => '[a-zA-Z0-9]{1,64}'));
Event::handle('RouterInitialized', array($m));
return $m; return $m;
} }

View File

@ -2,14 +2,21 @@
* *
* @package Laconica * @package Laconica
* @author Meitar Moscovitz <meitar@maymay.net> * @author Meitar Moscovitz <meitar@maymay.net>
* @author Sarven Capadisli <csarven@controlyourself.ca>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://laconi.ca/ * @link http://laconi.ca/
*/ */
/* Go linear. */ body {
font-size:2.5em;
}
#wrap {
width:95%;
}
#header, #header,
#header address, #header address,
#site_nav_global_primary,
#anon_notice, #anon_notice,
#site_nav_local_views .nav, #site_nav_local_views .nav,
#form_notice, #form_notice,
@ -24,49 +31,120 @@
.notice .notice-options a, .notice .notice-options a,
.pagination, .pagination,
.pagination .nav, .pagination .nav,
.aside .section { float: none; } .aside .section {
float:none;
}
.notice-options .notice_reply, .notice-options .notice_reply,
.notice-options .notice_delete, .notice-options .notice_delete,
.notice-options .form_favor, .notice-options .form_favor,
.notice-options .form_disfavor { position: static; } .notice-options .form_disfavor {
position:static;
}
#form_notice, #form_notice,
#anon_notice, #anon_notice,
#content_inner, #footer,
#footer { width: auto; } #form_notice .form_actions input.submit {
width:auto;
}
/* And liquid. */ .form_settings label {
#wrap { width: 95%; } width:25%;
}
.form_settings .form_data p.form_guide {
margin-left:26%;
}
/* Make things bigger on smaller screens. */ #site_nav_global_primary {
body { font-size: 2em; } width:75%;
.notices { font-size: 1.5em; } }
#site_nav_global_primary, #site_nav_global_secondary { text-align: center; } .entity_profile {
width:65%;
}
.entity_actions {
margin-left:0;
}
.notice div.entry-content { margin-left: 0; } #form_notice,
address { margin: 0; } #anon_notice {
clear:both;
}
#anon_notice, #footer { clear: left; font-size: .5em; } #content,
#aside_primary {
width:96%;
padding-left:2%;
padding-right:2%;
}
#form_notice textarea { width: 80%; height: 5em; } #site_notice {
#form_notice .form_note { right: 20%; top: 6em; } position:static;
#form_notice .form_actions input.submit { width: auto; } float:right;
clear:right;
width:75%;
margin-right:0;
margin-bottom:11px;
}
#content { padding: 18px 0; width: 100%; } .notices {
#content h1, #page_notice, #content_inner { padding: 0 18px; } font-size:1.5em;
.notices .entry-title, .notices div.entry-content { width: 90%; } }
.notice .author .photo { height: 4.5em; width: 4.5em; } /* about double physical size; TODO: do this scaling better */
.notice-options { position: absolute; top: 0; right: 0; padding-left: 7%; width: 3%; }
.notice-options .notice_delete a { float: left; } /* Works, but feels like it shouldn't. */
/* TODO: Make the icons of the notice options bigger. Probably with mobile-specific images. */
.pagination .nav { overflow: auto; }
#aside_primary { margin: 10px 0 0 0; border: none; padding: 0; width: 100%; } #form_notice textarea {
#popular_notices { float: none; width: auto; } width:80%;
/* Columns for supplemental info. */ height:5em;
.aside .section { clear: none; padding: 9px; width: 45%; } }
#top_groups_by_post { float: left; } #form_notice .form_note {
#featured_users { float: right; } right:20%;
#export_data { display: none; } top:6em;
}
.vcard .photo,
.section .vcard .photo {
margin-right:18px;
}
.notice,
.profile {
margin-bottom:18px;
}
.notices .entry-title,
.notices div.entry-content {
width:90%;
}
.notice div.entry-content {
margin-left:0;
}
.notice .author .photo {
height:4.5em;
width:4.5em;
}
.notice-options {
position:absolute;
top:0;
right:0;
padding-left:7%;
width:3%;
}
.notice-options .notice_delete a {
float:left;
}
.pagination .nav {
overflow:auto;
}
#export_data {
display:none;
}
#site_nav_local_views li {
margin-right:4px;
}
#site_nav_local_views a {
padding:18px 11px;
}