From d309fd27c5ed073d6031184c1c4a9c0d76224e40 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Sun, 1 Feb 2009 20:05:13 +0000 Subject: Rearraned stylesheet order for IE and fixed path to files for base IE stylesheets --- lib/action.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/action.php b/lib/action.php index 4d4c3d4c9..dcf98f669 100644 --- a/lib/action.php +++ b/lib/action.php @@ -162,15 +162,15 @@ class Action extends HTMLOutputter // lawsuit 'media' => 'screen, projection, tv')); $this->comment('[if IE]>comment('[if IE]>comment('[if lte IE '.$ver.']>comment('[if IE]> Date: Sun, 1 Feb 2009 23:37:54 +0000 Subject: If user is not logged in, then notice-options container shouldn't be outputted. --- lib/noticelist.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'lib') diff --git a/lib/noticelist.php b/lib/noticelist.php index 7c88c33cc..3ef6691af 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'); + } } /** -- cgit v1.2.3-54-g00ecf From 4f1345620a5df2a618dc2139249786335589abca Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Mon, 2 Feb 2009 14:14:14 +0000 Subject: Better cross-browser support for page and text zoom-in/out. --- lib/action.php | 2 +- theme/base/css/display.css | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/action.php b/lib/action.php index dcf98f669..15a44ad1b 100644 --- a/lib/action.php +++ b/lib/action.php @@ -257,7 +257,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(); diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 0ba4f7628..db669c088 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -20,8 +20,6 @@ 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; @@ -253,6 +251,7 @@ margin-bottom:18px; #anon_notice { float:left; width:432px; +width:28.052em; padding:11px; border-radius:7px; -moz-border-radius:7px; @@ -360,9 +359,10 @@ margin-right:4px; } #wrap { -float:left; margin:0 auto; width:71.714em; +width:1003px; +overflow:hidden; } #core { @@ -390,9 +390,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; @@ -748,7 +748,7 @@ border-radius:4px; /* NOTICES */ #notices_primary { float:left; -width:644px; +width:100%; border-radius:7px; -moz-border-radius:7px; -webkit-border-radius:7px; @@ -1153,3 +1153,4 @@ clear:both; #form_settings_avatar .form_actions { margin-bottom:0; } + -- cgit v1.2.3-54-g00ecf From 99fba4932d774e9891d29f18f2d8417a323bce1d Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Mon, 2 Feb 2009 17:02:58 +0000 Subject: Ticket 1044 -- Removed border-top, reduced padding, changed notice count from 6 to 5, removed nickname. --- lib/popularnoticesection.php | 2 +- theme/base/css/display.css | 9 ++++++--- theme/default/css/display.css | 1 - theme/identica/css/display.css | 1 - 4 files changed, 7 insertions(+), 6 deletions(-) (limited to 'lib') 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/theme/base/css/display.css b/theme/base/css/display.css index 207be17f3..242818c9a 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -1064,13 +1064,16 @@ 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 .fn { +display:none; } diff --git a/theme/default/css/display.css b/theme/default/css/display.css index faff64967..6c6b514a6 100644 --- a/theme/default/css/display.css +++ b/theme/default/css/display.css @@ -67,7 +67,6 @@ color:#002E6E; .profile { border-top-color:#D1D9E4; } -.section .notice, .section .profile { border-top-color:#97BFD1; } diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css index 39b839d26..40eeab2a6 100644 --- a/theme/identica/css/display.css +++ b/theme/identica/css/display.css @@ -67,7 +67,6 @@ color:#002E6E; .profile { border-top-color:#CEE1E9; } -.section .notice, .section .profile { border-top-color:#87B4C8; } -- cgit v1.2.3-54-g00ecf From 3b6d2653fb82271771d5889e63275666409b0eb1 Mon Sep 17 00:00:00 2001 From: Meitar Moscovitz Date: Wed, 4 Feb 2009 04:02:30 +1100 Subject: Fixes ticket:1087; correctly paginate group members list in fancy URLs. --- lib/util.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/util.php b/lib/util.php index 07e124811..8f93a8319 100644 --- a/lib/util.php +++ b/lib/util.php @@ -898,7 +898,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': -- cgit v1.2.3-54-g00ecf From 19724a51b3da1fb076ca47ce1ea7a4f229fa3b5d Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 3 Feb 2009 21:22:41 -0800 Subject: trac533 Removed redundant calls to htmlspecialcharacters(). XMLWriter::writeAttribute() already takes care of the escaping for us, although that doesn't seem to be well documented. --- lib/htmloutputter.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') 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'; -- cgit v1.2.3-54-g00ecf From e8d3615b3f59355f1360af4a027a2b4725c81291 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 4 Feb 2009 08:49:42 -0500 Subject: Allow HTML in site notice (Bug#1002) --- lib/action.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/action.php b/lib/action.php index f9b068878..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. * @@ -246,7 +245,6 @@ class Action extends HTMLOutputter // lawsuit // does nothing by default } - /** * Show body. * @@ -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 -- cgit v1.2.3-54-g00ecf From b8e10428d3f5e86cab97e226947f077ba98f907e Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Wed, 4 Feb 2009 17:03:59 +0000 Subject: Changed error and facebookaction wrap selector from @class to @id. --- lib/error.php | 2 +- lib/facebookaction.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') 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..f42427540 100644 --- a/lib/facebookaction.php +++ b/lib/facebookaction.php @@ -168,7 +168,7 @@ class FacebookAction extends Action function showBody() { - $this->elementStart('div', 'wrap'); + $this->elementStart('div', array('id' => 'wrap')); $this->showHeader(); $this->showCore(); $this->showFooter(); -- cgit v1.2.3-54-g00ecf From 68152dcf3acca51b85fc80e5549718c8123f943c Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 4 Feb 2009 22:33:50 +0000 Subject: Facebook app - reorganized some stuff; better HTML output --- actions/facebookhome.php | 5 ----- lib/facebookaction.php | 20 ++++---------------- 2 files changed, 4 insertions(+), 21 deletions(-) (limited to 'lib') 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/lib/facebookaction.php b/lib/facebookaction.php index f42427540..b6481011f 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')); } @@ -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'); } -- cgit v1.2.3-54-g00ecf From e5b075b912e1fb416e73988547e2ece8f89e6453 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Thu, 5 Feb 2009 04:54:42 +0000 Subject: Matching Facebook app UI to identi.ca. Fixed tabs, add to profile, widths, font-size, and some HTML markup. --- actions/facebookinvite.php | 8 ++-- lib/facebookaction.php | 9 +++-- theme/base/css/facebookapp.css | 84 ++++++++++++++++++++++++++++++++++++++---- 3 files changed, 86 insertions(+), 15 deletions(-) (limited to 'lib') 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/lib/facebookaction.php b/lib/facebookaction.php index b6481011f..d369cc385 100644 --- a/lib/facebookaction.php +++ b/lib/facebookaction.php @@ -270,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'); @@ -279,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) { @@ -318,6 +317,7 @@ class FacebookAction extends Action $this->elementEnd('ul'); $this->submit('submit', _('Login')); + $this->elementEnd('fieldset'); $this->elementEnd('form'); $this->elementStart('p'); @@ -326,6 +326,7 @@ class FacebookAction extends Action $this->elementEnd('p'); $this->elementEnd('div'); + $this->elementEnd('div'); } 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; } -- cgit v1.2.3-54-g00ecf From 7bc764fdc0b2bfc2f74df1174f9369c98bc9605b Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Thu, 5 Feb 2009 07:07:36 +0000 Subject: Facebook profile box CSS and a link back to the app page. --- lib/facebookaction.php | 140 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 127 insertions(+), 13 deletions(-) (limited to 'lib') diff --git a/lib/facebookaction.php b/lib/facebookaction.php index d369cc385..043a078cd 100644 --- a/lib/facebookaction.php +++ b/lib/facebookaction.php @@ -336,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 = ''; $this->xw->openMemory(); - $item = new FacebookNoticeListItem($notice, $this); + $item = new FacebookProfileBoxNotice($notice, $this); $item->show(); $fbml = "$style " . $this->xw->outputMemory(false) . ""; @@ -454,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; } @@ -528,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 * @@ -582,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. * @@ -634,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'); + } + +} -- cgit v1.2.3-54-g00ecf From 7ad3ff4a2cd494ef8c1cc293e15c0a70b8786fee Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 5 Feb 2009 11:46:17 -0500 Subject: Allow re-authentication with OpenID "Rememberme" logins aren't allowed to make changes to an account (since cookie-stealing is too easy). Users have to re-authenticate. Previously, it was impossible to do so without having a username and password; this change lets you do it with OpenID, too. --- actions/finishopenidlogin.php | 2 +- actions/openidlogin.php | 13 +++++++++++-- classes/User.php | 11 +++++++++++ lib/settingsaction.php | 7 ++++++- 4 files changed, 29 insertions(+), 4 deletions(-) (limited to 'lib') 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/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/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/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 { -- cgit v1.2.3-54-g00ecf From 9febe8ce394d8428355ac73f1c0f6a9555252bd2 Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 5 Feb 2009 18:10:47 +0000 Subject: trac #1142 fix tag rss --- actions/tagrss.php | 16 +++++++--------- lib/util.php | 2 ++ 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'lib') 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/lib/util.php b/lib/util.php index 579f964ac..cbff35a9d 100644 --- a/lib/util.php +++ b/lib/util.php @@ -736,6 +736,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': -- cgit v1.2.3-54-g00ecf From 99d520b351cdcfd93901732228d3be3d9e0a442b Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 5 Feb 2009 16:32:58 -0500 Subject: Two different functions for file size Made two different functions for file size in ImageFile; one uses the other. Also, use sprintf() for gettext msgs. --- actions/avatarsettings.php | 4 ++-- actions/grouplogo.php | 8 +++---- lib/imagefile.php | 57 +++++++++++++++++++++++++++------------------- 3 files changed, 39 insertions(+), 30 deletions(-) (limited to 'lib') diff --git a/actions/avatarsettings.php b/actions/avatarsettings.php index 0f8122c07..5c702ecc0 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'); diff --git a/actions/grouplogo.php b/actions/grouplogo.php index 473303373..7cf198dc7 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'); @@ -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/lib/imagefile.php b/lib/imagefile.php index 74c3d14f0..fa0581dd0 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; @@ -129,25 +129,25 @@ 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); - + } } @@ -182,23 +182,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; @@ -207,7 +216,7 @@ class ImageFile case 'K': $num *= 1024; } - + return $num; } } \ No newline at end of file -- cgit v1.2.3-54-g00ecf From ab82978b2d67545a9cd7bfc80837798212cff31b Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 5 Feb 2009 16:16:10 -0800 Subject: Trac #894 and #1013 - fixed bad redirects after delete notice --- actions/all.php | 3 +++ actions/deletenotice.php | 4 ++++ actions/favorited.php | 3 +++ actions/noticesearch.php | 10 ++++++++++ actions/public.php | 3 +++ actions/replies.php | 2 ++ actions/showfavorites.php | 2 ++ actions/showgroup.php | 2 ++ actions/showstream.php | 2 ++ actions/tag.php | 3 +++ lib/mailbox.php | 2 ++ lib/personal.php | 1 - 12 files changed, 36 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/actions/all.php b/actions/all.php index b03ad7ec3..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; } diff --git a/actions/deletenotice.php b/actions/deletenotice.php index d4b8e50e5..fc4a74eac 100644 --- a/actions/deletenotice.php +++ b/actions/deletenotice.php @@ -134,6 +134,10 @@ class DeletenoticeAction extends DeleteAction $url = common_get_returnto(); + + $urlval = ($url) ? $url : 'null'; + common_debug("deleteNotice() - returnto url = $urlval"); + if ($url) { common_set_returnto(null); } else { 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/noticesearch.php b/actions/noticesearch.php index 630fb8857..c0c238120 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 * 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 4b1679969..224bbce9f 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; } 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/lib/mailbox.php b/lib/mailbox.php index 8d5d44e49..e8323dc28 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; } 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()); } } -- cgit v1.2.3-54-g00ecf From 343cd6f20577c44487eae4e90ec10bfd954980e3 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 6 Feb 2009 03:13:08 -0500 Subject: Move common_avatar_* functions to Avatar Moved the common_avatar_* functions to the Avatar class. Typically either as methods on the object or as static methods. Replaced all the uses of the functions in other modules. --- actions/avatarbynickname.php | 4 +-- actions/avatarsettings.php | 8 ++--- actions/grouplogo.php | 8 ++--- actions/noticesearch.php | 2 +- actions/showstream.php | 2 +- actions/tagother.php | 2 +- actions/twittersettings.php | 4 +-- classes/Avatar.php | 50 +++++++++++++++++++++++---- classes/Profile.php | 21 ++++++++---- classes/User_group.php | 10 +++--- lib/imagefile.php | 4 +-- lib/jabber.php | 2 +- lib/mailbox.php | 4 +-- lib/noticelist.php | 4 +-- lib/noticesection.php | 2 +- lib/profilelist.php | 2 +- lib/profileminilist.php | 2 +- lib/profilesection.php | 2 +- lib/rssaction.php | 4 +-- lib/twitterapi.php | 2 +- lib/util.php | 78 ++++++++----------------------------------- scripts/enjitqueuehandler.php | 2 +- 22 files changed, 107 insertions(+), 112 deletions(-) (limited to 'lib') 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 3f50ca24c..a0be5d8f8 100644 --- a/actions/avatarsettings.php +++ b/actions/avatarsettings.php @@ -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, + $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); diff --git a/actions/grouplogo.php b/actions/grouplogo.php index 7cf198dc7..650c95255 100644 --- a/actions/grouplogo.php +++ b/actions/grouplogo.php @@ -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, + $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); diff --git a/actions/noticesearch.php b/actions/noticesearch.php index c0c238120..a5f01350c 100644 --- a/actions/noticesearch.php +++ b/actions/noticesearch.php @@ -166,7 +166,7 @@ class NoticesearchAction extends SearchAction $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); $this->elementStart('a', array('href' => $profile->profileurl, 'class' => 'url')); - $this->element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_STREAM_SIZE), + $this->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE), 'class' => 'avatar photo', 'width' => AVATAR_STREAM_SIZE, 'height' => AVATAR_STREAM_SIZE, diff --git a/actions/showstream.php b/actions/showstream.php index 224bbce9f..28bb8453f 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -242,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, 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/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/classes/Avatar.php b/classes/Avatar.php index 6a9ea7686..6248a84d3 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 defaultAvatar($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/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_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/lib/imagefile.php b/lib/imagefile.php index fa0581dd0..db344db8f 100644 --- a/lib/imagefile.php +++ b/lib/imagefile.php @@ -153,12 +153,12 @@ class ImageFile 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: 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 .= "\n"; $entry .= "\n"; $entry .= "" . $profile->nickname . "\n"; - $entry .= "" . common_profile_avatar_url($profile, AVATAR_PROFILE_SIZE) . "\n"; + $entry .= "" . $profile->avatarUrl(AVATAR_PROFILE_SIZE) . "\n"; $entry .= "\n"; $entry .= "" . htmlspecialchars($msg) . "\n"; $entry .= "" . htmlspecialchars($msg) . "\n"; diff --git a/lib/mailbox.php b/lib/mailbox.php index e8323dc28..d77234549 100644 --- a/lib/mailbox.php +++ b/lib/mailbox.php @@ -183,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 3ef6691af..9fc0126b3 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -285,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/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/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 5275ad6b6..0655ebf27 100644 --- a/lib/util.php +++ b/lib/util.php @@ -395,15 +395,15 @@ function common_render_text($text) function common_replace_urls_callback($text, $callback) { // Start off with a regex preg_match_all('#(?:(?:(?:https?|ftps?|mms|rtsp|gopher|news|nntp|telnet|wais|file|prospero|webcal|xmpp|irc)://|(?:mailto|aim|tel):)[^.\s]+\.[^\s]+|(?:[^.\s/]+\.)+(?:museum|travel|[a-z]{2,4})(?:[:/][^\s]*)?)#i', $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, '.?!,;:\'"`'); @@ -422,48 +422,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 "$display"; } @@ -653,48 +653,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; @@ -1511,16 +1469,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 .= "\n"; $atom .= " $profile->nickname)) . "'/>\n"; $atom .= "" . $profile->nickname . "\n"; - $atom .= "" . common_profile_avatar_url($profile, AVATAR_PROFILE_SIZE) . "\n"; + $atom .= "" . $profile->avatarUrl(AVATAR_PROFILE_SIZE) . "\n"; $atom .= "\n"; $atom .= "" . htmlspecialchars($msg) . "\n"; $atom .= "" . htmlspecialchars($msg) . "\n"; -- cgit v1.2.3-54-g00ecf From 60f737dc1eb2f126bae28ce095bc2d17a22bd7d9 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 6 Feb 2009 15:35:29 -0500 Subject: Update README and version number README and version number. --- README | 38 +++++++++++++++++++++++++++++--------- lib/common.php | 2 +- 2 files changed, 30 insertions(+), 10 deletions(-) (limited to 'lib') diff --git a/README b/README index f3aa0d9de..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 @@ -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 @@ -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 @@ -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. @@ -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/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); -- cgit v1.2.3-54-g00ecf From 08db50b24eaf9e6e5f651448c394f1f50dd2409b Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Fri, 6 Feb 2009 21:17:45 -0800 Subject: "Change your email address..." msg was printing out \n instead of a newline --- lib/mail.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') 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, -- cgit v1.2.3-54-g00ecf