From 88eb8c924ce35124560df71a58b8353309f2d25c Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Sun, 1 Feb 2009 19:34:11 +0000 Subject: [PATCH 01/48] Reduced width and realigned anon_notice --- theme/base/css/display.css | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 809c1ba6f8..0ba4f7628e 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -240,10 +240,9 @@ display:none; #site_notice { position:absolute; -right:0; -top:49px; -float:right; -width:300px; +top:65px; +right:18px; +width:250px; } #page_notice { clear:both; From d309fd27c5ed073d6031184c1c4a9c0d76224e40 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Sun, 1 Feb 2009 20:05:13 +0000 Subject: [PATCH 02/48] 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(-) diff --git a/lib/action.php b/lib/action.php index 4d4c3d4c9a..dcf98f6698 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: [PATCH 03/48] 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(-) diff --git a/lib/noticelist.php b/lib/noticelist.php index 7c88c33cc4..3ef6691afa 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'); + } } /** From 55c99d0018c5fafe7f47f14e07ec28c883f55183 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Sun, 1 Feb 2009 23:43:07 +0000 Subject: [PATCH 04/48] Using startXML() instead of deprecated common_start_xml() --- actions/opensearch.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/actions/opensearch.php b/actions/opensearch.php index 7709249bb1..2eb8183066 100644 --- a/actions/opensearch.php +++ b/actions/opensearch.php @@ -67,7 +67,7 @@ class OpensearchAction extends Action $short_name = _('Notice Search'); } header('Content-Type: text/html'); - common_start_xml(); + $this->startXML(); $this->elementStart('OpenSearchDescription', array('xmlns' => 'http://a9.com/-/spec/opensearch/1.1/')); $short_name = common_config('site', 'name').' '.$short_name; $this->element('ShortName', null, $short_name); @@ -81,7 +81,7 @@ class OpensearchAction extends Action $this->element('OutputEncoding', null, 'UTF-8'); $this->element('InputEncoding', null, 'UTF-8'); $this->elementEnd('OpenSearchDescription'); - common_end_xml(); + $this->endXML(); } function isReadOnly() From 4f1345620a5df2a618dc2139249786335589abca Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Mon, 2 Feb 2009 14:14:14 +0000 Subject: [PATCH 05/48] 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(-) diff --git a/lib/action.php b/lib/action.php index dcf98f6698..15a44ad1b1 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 0ba4f7628e..db669c088d 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; } + From 5f004c0158f228531230bb6f2f668e368b69a9f3 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Mon, 2 Feb 2009 16:33:47 +0000 Subject: [PATCH 06/48] Added "Edit" entity_action. Updated theme files. --- actions/showstream.php | 24 ++++++++++++------- theme/base/css/display.css | 2 ++ theme/default/css/display.css | 43 ++++++---------------------------- theme/default/css/ie.css | 9 +++++++ theme/identica/css/display.css | 38 ++++-------------------------- 5 files changed, 38 insertions(+), 78 deletions(-) create mode 100644 theme/default/css/ie.css diff --git a/actions/showstream.php b/actions/showstream.php index eab1fc0a2d..ecd9526353 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -312,14 +312,22 @@ class ShowstreamAction extends Action } $this->elementEnd('div'); - //XXX: entity_actions doesn't need to be outputted if entity is looking at their own profile $this->elementStart('div', 'entity_actions'); $this->element('h2', null, _('User actions')); $this->elementStart('ul'); - $this->elementStart('li', array('class' => 'entity_subscribe')); $cur = common_current_user(); + + if ($cur && $cur->id == $this->profile->id) { + $this->elementStart('li', 'entity_edit'); + $this->element('a', array('href' => common_local_url('profilesettings'), + 'title' => _('Edit profile settings')), + _('Edit')); + $this->elementEnd('li'); + } + if ($cur) { if ($cur->id != $this->profile->id) { + $this->elementStart('li', 'entity_subscribe'); if ($cur->isSubscribed($this->profile)) { $usf = new UnsubscribeForm($this, $this->profile); $usf->show(); @@ -327,24 +335,24 @@ class ShowstreamAction extends Action $sf = new SubscribeForm($this, $this->profile); $sf->show(); } + $this->elementEnd('li'); } } else { + $this->elementStart('li', 'entity_subscribe'); $this->showRemoteSubscribeLink(); + $this->elementEnd('li'); } - $this->elementEnd('li'); - -// common_profile_new_message_nudge($cur, $this->user, $this->profile); $user = User::staticGet('id', $this->profile->id); if ($cur && $cur->id != $user->id && $cur->mutuallySubscribed($user)) { - $this->elementStart('li', array('class' => 'entity_send-a-message')); + $this->elementStart('li', 'entity_send-a-message'); $this->element('a', array('href' => common_local_url('newmessage', array('to' => $user->id)), 'title' => _('Send a direct message to this user')), _('Message')); $this->elementEnd('li'); if ($user->email && $user->emailnotifynudge) { - $this->elementStart('li', array('class' => 'entity_nudge')); + $this->elementStart('li', 'entity_nudge'); $nf = new NudgeForm($this, $user); $nf->show(); $this->elementEnd('li'); @@ -353,7 +361,7 @@ class ShowstreamAction extends Action if ($cur && $cur->id != $this->profile->id) { $blocked = $cur->hasBlocked($this->profile); - $this->elementStart('li', array('class' => 'entity_block')); + $this->elementStart('li', 'entity_block'); if ($blocked) { $ubf = new UnblockForm($this, $this->profile); $ubf->show(); diff --git a/theme/base/css/display.css b/theme/base/css/display.css index db669c088d..207be17f3e 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -605,12 +605,14 @@ display:block; .form_user_block input.submit, .form_user_unblock input.submit, .entity_send-a-message a, +.entity_edit a, .form_user_nudge input.submit, .entity_nudge p { border:0; padding-left:20px; } +.entity_edit a, .entity_send-a-message a, .entity_nudge p { padding:4px 4px 4px 23px; diff --git a/theme/default/css/display.css b/theme/default/css/display.css index 97a6a12a8f..faff64967d 100644 --- a/theme/default/css/display.css +++ b/theme/default/css/display.css @@ -92,12 +92,6 @@ color:#333; color:#000; } -#form_notice #notice_data-attach_view { -background-image:url(../images/icons/twotone/green/paper-clip.gif); -background-repeat:no-repeat; -background-position:0 45%; -background-color:transparent; -} #nav_register a { text-decoration:none; @@ -123,8 +117,6 @@ background-color:rgba(255, 255, 255, 0.7); } - - #page_notice .error { background-color:#F7E8E8; } @@ -144,8 +136,6 @@ background-color:#A9BF4F; } - - #export_data li a { background-repeat:no-repeat; background-position:0 45%; @@ -164,6 +154,7 @@ background-image:url(../../base/images/icons/icon_vcard.gif); } +.entity_edit a, .entity_send-a-message a, .form_user_nudge input.submit, .form_user_block input.submit, @@ -185,6 +176,9 @@ color:#fff; background-color:#97BFD1; } +.entity_edit a { +background-image:url(../images/icons/twotone/green/edit.gif); +} .entity_send-a-message a { background-image:url(../images/icons/twotone/green/quote.gif); } @@ -204,30 +198,6 @@ background-image:url(../images/icons/twotone/green/shield.gif); background-color:#fcfcfc; } -.notice-data a span { -background-color:transparent; -background-repeat:no-repeat; -background-position:0 45%; -} -.notice_video .notice-data a span { -background-image:url(../images/icons/twotone/green/camera.gif); -} -.notice_audio .notice-data a span { -background-image:url(../images/icons/twotone/green/music.gif); -} -.notice_image .notice-data a span { -background-image:url(../images/icons/twotone/green/search.gif); -} -.notice_event .notice-data a span { -background-image:url(../images/icons/twotone/green/calendar.gif); -} -.notice_location .notice-data a span { -background-image:url(../images/icons/twotone/green/flag.gif); -} -.notice_document .notice-data a span { -background-image:url(../images/icons/twotone/green/document.gif); -} - .notice-options .notice_reply a, .notice-options form input.submit { background-color:transparent; @@ -274,12 +244,13 @@ background:transparent url(../images/icons/twotone/green/news.gif) no-repeat 0 4 .pagination .nav_prev a, .pagination .nav_next a { background-repeat:no-repeat; +border-color:#D1D9E4; } .pagination .nav_prev a { background-image:url(../images/icons/twotone/green/arrow-left.gif); -background-position:0 45%; +background-position:10% 45%; } .pagination .nav_next a { background-image:url(../images/icons/twotone/green/arrow-right.gif); -background-position:100% 45%; +background-position:90% 45%; } diff --git a/theme/default/css/ie.css b/theme/default/css/ie.css new file mode 100644 index 0000000000..2b06768ea4 --- /dev/null +++ b/theme/default/css/ie.css @@ -0,0 +1,9 @@ +/* IE specific styles */ + +.notice-options input.submit { +color:#fff; +} + +#site_nav_local_views a { +background-color:#ACCCDA; +} diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css index beb5a2c13d..39b839d262 100644 --- a/theme/identica/css/display.css +++ b/theme/identica/css/display.css @@ -92,12 +92,6 @@ color:#333; color:#000; } -#form_notice #notice_data-attach_view { -background-image:url(../images/icons/twotone/green/paper-clip.gif); -background-repeat:no-repeat; -background-position:0 45%; -background-color:transparent; -} #nav_register a { text-decoration:none; @@ -123,8 +117,6 @@ background-color:rgba(255, 255, 255, 0.7); } - - #page_notice .error { background-color:#F7E8E8; } @@ -144,8 +136,6 @@ background-color:#9BB43E; } - - #export_data li a { background-repeat:no-repeat; background-position:0 45%; @@ -164,6 +154,7 @@ background-image:url(../../base/images/icons/icon_vcard.gif); } +.entity_edit a, .entity_send-a-message a, .form_user_nudge input.submit, .form_user_block input.submit, @@ -185,6 +176,9 @@ color:#fff; background-color:#87B4C8; } +.entity_edit a { +background-image:url(../images/icons/twotone/green/edit.gif); +} .entity_send-a-message a { background-image:url(../images/icons/twotone/green/quote.gif); } @@ -204,30 +198,6 @@ background-image:url(../images/icons/twotone/green/shield.gif); background-color:#fcfcfc; } -.notice-data a span { -background-color:transparent; -background-repeat:no-repeat; -background-position:0 45%; -} -.notice_video .notice-data a span { -background-image:url(../images/icons/twotone/green/camera.gif); -} -.notice_audio .notice-data a span { -background-image:url(../images/icons/twotone/green/music.gif); -} -.notice_image .notice-data a span { -background-image:url(../images/icons/twotone/green/search.gif); -} -.notice_event .notice-data a span { -background-image:url(../images/icons/twotone/green/calendar.gif); -} -.notice_location .notice-data a span { -background-image:url(../images/icons/twotone/green/flag.gif); -} -.notice_document .notice-data a span { -background-image:url(../images/icons/twotone/green/document.gif); -} - .notice-options .notice_reply a, .notice-options form input.submit { background-color:transparent; From 99fba4932d774e9891d29f18f2d8417a323bce1d Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Mon, 2 Feb 2009 17:02:58 +0000 Subject: [PATCH 07/48] 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(-) diff --git a/lib/popularnoticesection.php b/lib/popularnoticesection.php index 89daaa563c..5734d80018 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 207be17f3e..242818c9a0 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 faff64967d..6c6b514a66 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 39b839d262..40eeab2a6e 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; } From 9abfe1848a32b8ff465b969d1b89f5d5383605ec Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Mon, 2 Feb 2009 17:21:33 +0000 Subject: [PATCH 08/48] Ticket 1029 -- Atom feed icon. Also updated the RSS icon to PNG version. --- theme/base/images/icons/icon_atom.jpg | Bin 1117 -> 0 bytes theme/base/images/icons/icon_atom.png | Bin 0 -> 820 bytes theme/base/images/icons/icon_rss.jpg | Bin 1166 -> 0 bytes theme/base/images/icons/icon_rss.png | Bin 0 -> 777 bytes theme/default/css/display.css | 8 ++------ theme/identica/css/display.css | 8 ++------ 6 files changed, 4 insertions(+), 12 deletions(-) delete mode 100644 theme/base/images/icons/icon_atom.jpg create mode 100644 theme/base/images/icons/icon_atom.png delete mode 100644 theme/base/images/icons/icon_rss.jpg create mode 100644 theme/base/images/icons/icon_rss.png diff --git a/theme/base/images/icons/icon_atom.jpg b/theme/base/images/icons/icon_atom.jpg deleted file mode 100644 index 22853edc43ff04778001d28e5e14e64b32693f05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1117 zcmex=xE0R}-11_1^EW=25anV3L`8Hkvf zSy(w(Sy@>Qk2+yV?tKuefdm_beh zs;mXdF|Y`-3Mm>ovIz$!vMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_ zCZ=ZQ7M51dF0O9w9-dyoA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3< zZTgIvvlcC0vUJ(<6)RV5+Pr1!w(UE1?mBe%$kAiRPnGGAU*RJ2VdF$b$$4{O< zd;a3(tB;>PfBE|D`;VW$7#Wx$-T{&r{s9I*BNGb?GYdP&Ka5P}K+G)2!m4P(ZXWYowZ;xuvL#)F*7#z7xMlZq~KiK&=8RQ(9@64*z?d8mmjAHh8Y_s{=Z3_Q$? zz+}TL$Y9U#^*!s4{C`4kQ@{F)F8#NE<^7nNX{$BEX7;OWE|d3v8oxYgwT`W+-_*q- z+uzjLw=VzM)weYJobTH^U)E+Hs>*NOQoXkN(6;Tf#Fj2Ov+-`EuiCfmW$ej|9|&k>x-`dJy*iwaIS@snEOaP0Pi8o%z1YZ)MKM zRh|Np+Y=60roJjLZm^p5YSuI*^Cmyt+P{5LF*_nZUCA@@&Al93&$PVvpTfaM*5M!4 zAAY>*^{;80%VnnTYCTgO_i(zRpnz~I%X9Ugp$`rGx_=#0x)>OxdU^ku>!Q7(i@)aR QKG!^Hc0cZ<-tqr80k4%pzW@LL diff --git a/theme/base/images/icons/icon_atom.png b/theme/base/images/icons/icon_atom.png new file mode 100644 index 0000000000000000000000000000000000000000..6a001f11aa7d0ea8d7bccdd97c85adaa42457f8b GIT binary patch literal 820 zcmV-41Izr0P)Px%?ny*JR5;5$kv(r5RTzbz``(Y)*jC; z;iadSFk12Z(G07Fj?*|RI4w{35I)rULNrBT-}6Z@8k`oa6|51S8I-)fIiR#c01jpz zXEcQoj8+t`gAeg-V~q@wQdliqJ>SO~;b`XB9QHVx2aG5#t&~I{wop1DwUBa)vwCQZ zC<=Af`p%2%ESHA;X~VEj?2z0dARO`Bm@T71Za*kX(poY5GqSnXP#S}3?To^yX%vooow z;u&k3;nj=hD2?Watr1Pg)Zy{JyC*eQ20g66?VSnpCh~9=@G%qqmz8{Ms>*+TS~WMy z!aWZAkojj;aZ8QqJIx;tW;7uaQYM5JpE6cjf^TkWuDtQ%La(zCVmj|b?9b~!RR?Mx y**mG&Iyxo9M9!IQa5@J#!Vq&6< zKy9o*9jvTeqI^7je4?a+|3?@XF)%Q)GJ*jxbisg;3FsI$b`DN1ZUF`+pe0N!%pj)$ zRn`LK7+3^Zg%k}P*@OcV*_8@Kj2b5{ECr+Nabot8FYu9hwy!G(W<0ns_ zJ%91?)yGetzkL1n{m0K=j10^W?*K^*{{VxZk%@(cnS~wXA4aBfAZ8Y1VO2C_6LJh> zPb?HxGHT=yahkYr<3Ubk6e=l{~ZV&R(P($<#Tc_eT}|Zsr;?yuxz;gdKo>o08iH_ez(7J*Xx$0_w2DP{4nd=rPuyD z`a)(@-l|)kedxsE9m)%3QmU^v_nh7s>82){>G!efn0MO#wHIGL{c+0jtmNgD(xyum zefR%$bCwl<_gg!Wm##8d)9z_*-yNvB?~T)ip1kmw&vVT4op{R=4C8OwoLuR)CoA_` zOx3bo_v7ZyN>|fo)OqB&T-^0={g$N{mw&I*Tx@-;&iYcF!b_?4mOt{Tt77hWuXV3n z?EbBWV{xfmmW=#VXK{s+mvPsWMca>EoX5{A_C9zP*X`J>JyYMgG3%|L9@=ItsPx%!%0LzR5;6Rl1*q_RTRg6=YG7-OhcR0yaBbHq>YL~HBhUSRMCZ^P~EsNU9^n| zg$BAP+9E=6p)ULYw-Q$oR8S%msiI34f{@14el1$Dme4j#lNr%;CU4%m_qdoe7~4!#4zcGjyL5v^*Vu01Rps04*#X{po{lv~s{`^cXj1P`g z@2yQ{i%qN(j5k;>7`Oh46^!i`?}RefX0MLP+{xW_T3NcGI>5#!N71D^Vg4d<{yfI& z|H5J*bd*M2>&_*Qt2ak;xOfdQ@Cx9u7is#q5+Zl_eRv_?KNKQ#!dL0`|yvwhLn0C7KEQaAisEe z6%JV>HzkZ1FiuEnkFe>;DJn02jKBYB!liG>zur&0`70QQ-TNj~cdf!j7D2&?tTf3x zOz&3Qj;BbTeVfwgmq<@a`0*I=`WY~e4KKV)q)d@TVy?uf7*-U}xI%X7D8!%3-DtktW(GoflqW;H%75wlk_-9TcNtw>~Z=kIvX7g6ugD=vW{ua$Mq|}2O+)d0C zRk{|$3N{_Wjl7O|U>~w;oZ_zr+00h}_=lb&wAy69PXmzDhKYruT?MGI0?SS4ECCP~ zuTf-?&Xr#PaMd9~uH?7o0I-{@#6m$u<@!61*Zc3bsThd zkN})Ly!~LcmVV@%trC$Kx}P+z&8T*d*ZSWJi^m_Hxcd3O7Vc(}fM=Q^00000NkvXX Hu0mjfyta1= literal 0 HcmV?d00001 diff --git a/theme/default/css/display.css b/theme/default/css/display.css index 6c6b514a66..da1ba67173 100644 --- a/theme/default/css/display.css +++ b/theme/default/css/display.css @@ -140,18 +140,14 @@ background-repeat:no-repeat; background-position:0 45%; } #export_data li a.rss { -background-image:url(../../base/images/icons/icon_rss.jpg); +background-image:url(../../base/images/icons/icon_rss.png); } #export_data li a.atom { -background-image:url(../../base/images/icons/icon_atom.jpg); +background-image:url(../../base/images/icons/icon_atom.png); } #export_data li a.foaf { background-image:url(../../base/images/icons/icon_foaf.gif); } -#export_data li a.export_vcard { -background-image:url(../../base/images/icons/icon_vcard.gif); -} - .entity_edit a, .entity_send-a-message a, diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css index 40eeab2a6e..6fcd730a90 100644 --- a/theme/identica/css/display.css +++ b/theme/identica/css/display.css @@ -140,18 +140,14 @@ background-repeat:no-repeat; background-position:0 45%; } #export_data li a.rss { -background-image:url(../../base/images/icons/icon_rss.jpg); +background-image:url(../../base/images/icons/icon_rss.png); } #export_data li a.atom { -background-image:url(../../base/images/icons/icon_atom.jpg); +background-image:url(../../base/images/icons/icon_atom.png); } #export_data li a.foaf { background-image:url(../../base/images/icons/icon_foaf.gif); } -#export_data li a.export_vcard { -background-image:url(../../base/images/icons/icon_vcard.gif); -} - .entity_edit a, .entity_send-a-message a, From 0f2c43bd040437b3e40c706d7c3f4ba163e94a71 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Mon, 2 Feb 2009 18:53:15 +0000 Subject: [PATCH 09/48] Fixed direct messaging: AjaxWebChannel is now using Action's methods. --- classes/Channel.php | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/classes/Channel.php b/classes/Channel.php index 2e3e4e8d4a..c03efef481 100644 --- a/classes/Channel.php +++ b/classes/Channel.php @@ -19,7 +19,7 @@ if (!defined('LACONICA')) { exit(1); } -class Channel +class Channel extends Action { function on($user) @@ -129,6 +129,7 @@ class WebChannel extends Channel # XXX: buffer all output and send it at the end # XXX: even better, redirect to appropriate page # depending on what command was run + common_show_header(_('Command results')); common_element('p', null, $text); common_show_footer(); @@ -146,26 +147,26 @@ class AjaxWebChannel extends WebChannel function output($user, $text) { - common_start_html('text/xml;charset=utf-8', true); - common_element_start('head'); - common_element('title', null, _('Command results')); - common_element_end('head'); - common_element_start('body'); - common_element('p', array('id' => 'command_result'), $text); - common_element_end('body'); - common_element_end('html'); + $this->startHTML('text/xml;charset=utf-8', true); + $this->elementStart('head'); + $this->element('title', null, _('Command results')); + $this->elementEnd('head'); + $this->elementStart('body'); + $this->element('p', array('id' => 'command_result'), $text); + $this->elementEnd('body'); + $this->elementEnd('html'); } function error($user, $text) { - common_start_html('text/xml;charset=utf-8', true); - common_element_start('head'); - common_element('title', null, _('Ajax Error')); - common_element_end('head'); - common_element_start('body'); - common_element('p', array('id' => 'error'), $text); - common_element_end('body'); - common_element_end('html'); + $this->startHTML('text/xml;charset=utf-8', true); + $this->elementStart('head'); + $this->element('title', null, _('Ajax error')); + $this->elementEnd('head'); + $this->elementStart('body'); + $this->element('p', array('id' => 'error'), $text); + $this->elementEnd('body'); + $this->elementEnd('html'); } } From 01b6aca078f9665eb01c1b1fbbbe2f4c6340cf9b Mon Sep 17 00:00:00 2001 From: Meitar Moscovitz Date: Wed, 4 Feb 2009 03:34:17 +1100 Subject: [PATCH 10/48] Fix PHP warnings when user avatar crop controls aren'tn touched. --- actions/avatarsettings.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/actions/avatarsettings.php b/actions/avatarsettings.php index 19f53b8828..3029b06211 100644 --- a/actions/avatarsettings.php +++ b/actions/avatarsettings.php @@ -316,11 +316,6 @@ class AvatarsettingsAction extends AccountSettingsAction $profile = $user->getProfile(); - $x = $this->arg('avatar_crop_x'); - $y = $this->arg('avatar_crop_y'); - $w = $this->arg('avatar_crop_w'); - $h = $this->arg('avatar_crop_h'); - $filedata = $_SESSION['FILEDATA']; if (!$filedata) { @@ -328,6 +323,11 @@ class AvatarsettingsAction extends AccountSettingsAction return; } + $x = $this->arg('avatar_crop_x'); + $y = $this->arg('avatar_crop_y'); + $w = ($this->arg('avatar_crop_w')) ? $this->arg('avatar_crop_w') : $filedata['width']; + $h = ($this->arg('avatar_crop_h')) ? $this->arg('avatar_crop_h') : $filedata['height']; + $filepath = common_avatar_path($filedata['filename']); if (!file_exists($filepath)) { From 3b6d2653fb82271771d5889e63275666409b0eb1 Mon Sep 17 00:00:00 2001 From: Meitar Moscovitz Date: Wed, 4 Feb 2009 04:02:30 +1100 Subject: [PATCH 11/48] Fixes ticket:1087; correctly paginate group members list in fancy URLs. --- lib/util.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util.php b/lib/util.php index 07e124811e..8f93a83191 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': From dcf18e96949483631319f23de51f71340c1f276e Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 3 Feb 2009 11:23:30 -0800 Subject: [PATCH 12/48] trac1104 Destroy method was dying because it was still calling deprecated common_dequeue_notice() func --- actions/twitapistatuses.php | 1 - 1 file changed, 1 deletion(-) diff --git a/actions/twitapistatuses.php b/actions/twitapistatuses.php index a35f4b12ea..18e24c0f58 100644 --- a/actions/twitapistatuses.php +++ b/actions/twitapistatuses.php @@ -450,7 +450,6 @@ class TwitapistatusesAction extends TwitterapiAction if ($user->id == $notice->profile_id) { $replies = new Reply; $replies->get('notice_id', $notice_id); - common_dequeue_notice($notice); $replies->delete(); $notice->delete(); From 06cfae3b911811d768f6eedcb1e395a28acd8fa1 Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Tue, 3 Feb 2009 19:25:46 +0000 Subject: [PATCH 13/48] Wrapped some URLs in the README with <> --- README | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README b/README index a600170634..f3aa0d9de1 100644 --- a/README +++ b/README @@ -26,14 +26,14 @@ instant messenger programs (GTalk/Jabber), and specially-designed desktop clients that support the Twitter API. Laconica supports an open standard called OpenMicroBlogging -(http://openmicroblogging.org/) that lets users on different Web sites + that lets users on different Web sites or in different companies subscribe to each others' notices. It enables a distributed social network spread all across the Web. Laconica was originally developed for the Open Software Service, -Identi.ca (http://identi.ca/). It is shared with you in hope that you +Identi.ca . It is shared with you in hope that you too make an Open Software Service available to your users. To learn -more, please see the Open Software Service Definition 1.0: +more, please see the Open Software Service Definition 1.1: http://www.opendefinition.org/ossd @@ -404,7 +404,7 @@ config.php, and access to the Laconica database from the mail server. XMPP ---- -XMPP (eXtended Message and Presence Protocol, http://xmpp.org/) is the +XMPP (eXtended Message and Presence Protocol, ) is the instant-messenger protocol that drives Jabber and GTalk IM. You can distribute messages via XMPP using the system below; however, you need to run the XMPP incoming daemon to allow incoming messages as @@ -537,7 +537,7 @@ Sample cron job: Sitemaps -------- -Sitemap files (http://sitemaps.org/) are a very nice way of telling +Sitemap files are a very nice way of telling search engines and other interested bots what's available on your site and what's changed recently. You can generate sitemap files for your Laconica instance. @@ -558,7 +558,7 @@ Laconica instance. like './sitemapindex.xml'. sitemap-directory is the directory where you want the sitemaps stored, like './sitemaps/' (make sure the dir exists). URL-prefix-for-sitemaps is the full URL for the sitemap dir, - typically something like 'http://example.net/mublog/sitemaps/'. + typically something like . You can use several methods for submitting your sitemap index to search engines to get your site indexed. One is to add a line like the @@ -612,7 +612,7 @@ modification to use the new output format. Translation ----------- -Translations in Laconica use the gettext system (http://www.gnu.org/software/gettext/). +Translations in Laconica use the gettext system . Theoretically, you can add your own sub-directory to the locale/ subdirectory to add a new language to your system. You'll need to compile the ".po" files into ".mo" files, however. @@ -627,7 +627,7 @@ Backups There is no built-in system for doing backups in Laconica. You can make backups of a working Laconica system by backing up the database and -the Web directory. To backup the database use mysqldump (http://ur1.ca/7xo) +the Web directory. To backup the database use mysqldump and to backup the Web directory, try tar. Private @@ -819,7 +819,7 @@ db -- This section is a reference to the configuration options for -DB_DataObject (see http://ur1.ca/7xp). The ones that you may want to +DB_DataObject (see ). The ones that you may want to set are listed below for clarity. database: a DSN (Data Source Name) for your Laconica database. This is @@ -919,7 +919,7 @@ server: If set, defines another server where avatars are stored in the the client to speed up page loading, either with another virtual server or with an NFS or SAMBA share. Clients typically only make 2 connections to a single server at a - time (http://ur1.ca/6ih), so this can parallelize the job. + time , so this can parallelize the job. Defaults to null. public @@ -1000,7 +1000,7 @@ memcached --------- You can get a significant boost in performance by caching some -database data in memcached (http://www.danga.com/memcached/). +database data in memcached . enabled: Set to true to enable. Default false. server: a string with the hostname of the memcached server. Can also @@ -1011,7 +1011,7 @@ sphinx You can get a significant boost in performance using Sphinx Search instead of your database server to search for users and notices. -(http://sphinxsearch.com/). +. enabled: Set to true to enable. Default false. server: a string with the hostname of the sphinx server. @@ -1024,7 +1024,7 @@ A catch-all for integration with other systems. source: The name to use for the source of posts to Twitter. Defaults to 'laconica', but if you request your own source name from - Twitter (http://twitter.com/help/request_source), you can use + Twitter , you can use that here instead. Status updates on Twitter will then have links to your site. @@ -1101,7 +1101,7 @@ Unstable version If you're adventurous or impatient, you may want to install the development version of Laconica. To get it, use the git version -control tool (http://git-scm.com/) like so: +control tool like so: git clone http://laconi.ca/software/laconica.git @@ -1114,7 +1114,7 @@ There are several ways to get more information about Laconica. * There is a mailing list for Laconica developers and admins at http://mail.laconi.ca/mailman/listinfo/laconica-dev -* The #laconica IRC channel on freenode.net (http://www.freenode.net/). +* The #laconica IRC channel on freenode.net . * The Laconica wiki, http://laconi.ca/trac/ Feedback From 32b1bb381acd14ec6a0d98afc5c39247b1d5a027 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Tue, 3 Feb 2009 21:46:09 +0000 Subject: [PATCH 14/48] Fixed ajaxErrorMsg(). Using startHTML() instead of common_start_html() --- actions/newnotice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/newnotice.php b/actions/newnotice.php index 5142cb5ff2..e3974cd07d 100644 --- a/actions/newnotice.php +++ b/actions/newnotice.php @@ -195,7 +195,7 @@ class NewnoticeAction extends Action function ajaxErrorMsg($msg) { - common_start_html('text/xml;charset=utf-8', true); + $this->startHTML('text/xml;charset=utf-8', true); $this->elementStart('head'); $this->element('title', null, _('Ajax Error')); $this->elementEnd('head'); From bcc8348615e0dbc4c82089b69f7d92f070d6ec6e Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Tue, 3 Feb 2009 22:09:25 +0000 Subject: [PATCH 15/48] Removed deprecated files from the default theme. --- theme/default/bg-body.gif | Bin 154 -> 0 bytes theme/default/bg-header.gif | Bin 2463 -> 0 bytes theme/default/display.css | 1107 ------------------------------- theme/default/icon_feed.jpg | Bin 521 -> 0 bytes theme/default/icon_foaf.gif | Bin 1144 -> 0 bytes theme/default/icon_heart-01.gif | Bin 67 -> 0 bytes theme/default/icon_heart-02.gif | Bin 74 -> 0 bytes theme/default/icon_tag-01.gif | Bin 586 -> 0 bytes theme/default/ie6.css | 73 -- theme/default/ie7.css | 39 -- theme/default/login-bg.gif | Bin 328 -> 0 bytes 11 files changed, 1219 deletions(-) delete mode 100644 theme/default/bg-body.gif delete mode 100644 theme/default/bg-header.gif delete mode 100644 theme/default/display.css delete mode 100644 theme/default/icon_feed.jpg delete mode 100644 theme/default/icon_foaf.gif delete mode 100644 theme/default/icon_heart-01.gif delete mode 100644 theme/default/icon_heart-02.gif delete mode 100644 theme/default/icon_tag-01.gif delete mode 100644 theme/default/ie6.css delete mode 100644 theme/default/ie7.css delete mode 100644 theme/default/login-bg.gif diff --git a/theme/default/bg-body.gif b/theme/default/bg-body.gif deleted file mode 100644 index 5e1afa048fc1bd0c203e6be880cbf09550f03688..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmZ?wbhEHbJiyGzu$h73&;PGC9$o+c|Nr%e*Dl??eDw0ktM{*7e{_A{*&_$eA3cBT z!l`R#7?6PCPZlsw2SkF*U|?}KIN`Z^uf=QMqCl1XYAR`V~cDDhewwf@E$v56WwA}r162Q+7&f5E|E4FIzEM_2#= diff --git a/theme/default/bg-header.gif b/theme/default/bg-header.gif deleted file mode 100644 index a34b9b34fa0198fc090f1b9c664f9fbafcf686a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2463 zcmV;Q31Id|Nk%w1VGID+0QUd@;EFK3S|HwnF2Q{))KVVfm^Ig6BfWhr(MB5Jj4{(r z9ke(V+Hfe^pE%>3Hos*f(n=iQpf}iLB-m;u;h#99F(KlVG~}E%w?G)gdMezWINW+G z)>z;7ns zh%n-iGP_kCyH+37SRmq)GsAW%!+a~hY9+vKCe~OW(nuS+P8_^kA#M^k+;%F}Rv)-Z z8{m#H-F__AT_W0UC*FQ6w?P@}uZXe78s8Q_R8 zxqU3xojBTTC(=e6YY{eR5jECaA!QIVyHXuv5HjSNHsqQ$*k~reY$mlf6x(zu!g46r zVI$$7H`Q7p!+9#hek-*(6<-f9;h#6&f-SvXA<{}4v^y5PVItgmEVe!u(@-7KNF2m` zE73?B*J32zpg7!gDdU4dn>g(7T07Xw?`V|nl`&wAXW}6z-lF96e@5MIBya-Y!NnX5;tlQHC+!c(@Y#@ z5j0>BG1OEa zGu?nK*={G(O&#BeFSR=s--IsXmNe2#9Nc*-*Ipvqaw*$$D7Qu#*k&ZyWhKLSDbh?G z)?XsxpEuokE8m|u+;uA0VBOBiCLd;EgfZXC&2B zAG=o{--j>MQy#-V9Mex7!gDCOP#k|CCc0D|z-%Sto;TcgD$-3Hz-=beOdYT{AL5oZ zwm=u-mNngZDtaC#)?Oo95G>krDdL_tzF#5YpEllvF5ZMM-i0pTgfG-o9=~fPsWKSV zR37AXoZlvufRnHH+7;V8e?2YN@Q*vt`eyUCXwu+qIM8 z%AFh6h~2w*?f%=#x9{FefHO6!P@z%a!2iSvg62h#iFkk)z2i3pffoeO7I+i4NZkSi zQ$AZpVA(V11#=LHMvY)jXaqPu&p|!Ac5EEAYn#DMdv|W!yKw~fz1z$j;lObq-yO#c z1mVw}LwLSw4g@whAgqcG!OWU9Y^HDj*S==_sx{=xLqJbyd;9h0wZGR6p*mYHQYXJWu+H{B4?4FPh-Y3C(% z5^;&0aN?;=oR{FKPd|DtaY-n8;&}-uON7!Wqo6?QXeglc;Ajs$EP?3~m1?>K3Yl)& z0}7vhN-7GcriwxgOT>_A45W_#+UhJZuo}Y+OWc5K46}^E>kS;xdV>=&a4-f3#NIFq z2R9(X0kRw*GR7FrMr*9JDok6gv(!F&tP0O&%Yh13jB5qC=US0&x+(+_gb(hL8$`QS zxC`&QL6Fk!yQKI43oJg60xu`(Sq*GzLSy?B6g4m;zFa|yjjP{JX-@GNvK z;Yc7s(o5HZ^dTiU9d#{Jmq1G`$xuxTEml*V4AQPtf-`e)mlc;neg!0X2s+PIw=PztD%|llM`1zB0?~r$ngvqGraP|D`E@-#26ERG1g;$g!aW85eqR#R3AVwu^drM0I|e^zWTAq z5`Zl73^PmsU&x}v7hk+T{}(#g!T%R_xL*MIrwm@`pnwN7ATN}`15O;!ft)ZPCmhHF zHE@ClI%uF8%wY~4m}7&Q0HGQ*@j(v0LKC0R1PV1VjZaKt6rXs-Cv-6idb|RL?vSA_ z_OO8s>_HbB_(Tu?KQW3?tY8CeIN~1MfW#H7Ac<|*z#o$ML?odfFQ;ph;ao&7~=<0kb*I$k&F*W!71bz$5X^{2oE@g9hZ^E6g*%Veq>`F|H#K> z6q1i=ScU)upoBCq(veD7WF#BONLEy`l96Pj09erkNwVUT`Dnr?MQM*F+yfa+I7SVa z!HgOp0~s|q20mh0144wL1|hg*E^(PlZq$Gqz69nkgSn3usDcryP(?AhQOtb+;0gP9 zLJPW}3TPU$1pw#*HoE`-0Fa}b+(bt=#R&j%ic_2ku)#PJ004CYAOY!wrw!x@PZlJA z1=zS}0V2u0|pKmq!LfEJVm07Ym(i=YP*kU$RrZRkTMI#Cx$RH7rW=mgKKm-=RX-+M$)1B({r##hZ zD}phDV6>vBM{UJX*D-@mbYcdrXa`h@delw`V+PWAYA2*I17UQc00poGSj8IF0tmwv zz#s!K!U_yvpf#;&y#rkDpjNnU;jS6D!xqSp2)b%P3uL%J2DTtryxu{u4k*M0E}+=N zE>^MrccMbN_&CQo)!}{zyu}+ zFptuFV#2m%z=Shmi;3LAR<^l7Lm8Y=k1_;zxVbPcASjSrG@xO*&!qq$#2|+0R#yzt zMFVvs0Eh@wHv-%RFCca?fI5&j5WDCucLQ;NK(N=n?R{?`H1J*x#P_}pI6wpPyI=kC d7Ye_K0)T%3g(wI(z$Z8X6cW5(1v5Ax06Tp6EQA06 diff --git a/theme/default/display.css b/theme/default/display.css deleted file mode 100644 index f22f9aa69b..0000000000 --- a/theme/default/display.css +++ /dev/null @@ -1,1107 +0,0 @@ -/* CSS Document */ -/* Design & CSS by Marie-Claude Doyon http://www.marieclaudedoyon.com */ - -html { - background-color: #f6e5b0; - } -body { - position: absolute; - width: 100%; - margin: 0; - padding: 0; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; - line-height: 12px; - min-height: 100%; - height: 100%; - color: #701238; - } -a { - color: #d1451a; - text-decoration: none; - } -a:hover { - text-decoration: underline; - } -img, img a { - border: 0; - } -h1 { - font-size: 14px; - } - -#wrap { - margin: 0 auto; - padding: 0 20px; - width: 760px; - background: url(bg-header.gif) repeat-x #fbf2d7; - } -#header { - position: relative; - margin: 0 auto; - width: 600px; - height: 216px; - } -#logo { - margin-top: 9px; - } -p#branding { - margin: 0; - padding: 6px 0 3px 0; - color: #fbf2d7; - font-size: 21px; - font-weight: bold; - line-height: 27px; - } -p#branding a { - color: #dab134; - } - -#header h1.pagetitle { - margin: 0; - padding: 0; - font-size: 15px; - line-height: 24px; - color: #fff6d5; -} - -#header h2.sitename { - display: none; - margin: 0; - padding: 0; - color: #fff6d5; -} - -abbr.published { border-bottom:0; } - -/* ===== Begin Navigation Styling ===== */ - -/* ----- Navigation ------ */ -#nav { - float: right; - margin: 0; - padding: 0; - list-style-type: none; - font-size: 12px; - } -#nav li { - display: block; - float: left; - } -#nav li a { - display: block; - padding: 9px 9px 12px 9px; - color: #F60; - } -#nav li a:hover { - text-decoration: underline; - } - -/* ----- Tabs ----- */ -#nav_views { - margin: 0 auto; - padding: 0; - position: absolute; - bottom: 0; - list-style-type: none; - font-size: 14px; - font-weight: bold; - width: 600px; - /*height: 30px;*/ - } -#nav_views li { - display: block; - float: left; - line-height: 21px; - } -#nav_views li a { - display: block; - margin: 0; - padding: 4px 12px 3px 12px; - color: #fff6d5; - background-color: #d1451a; - border-right: 1px solid #dcaa3f; - } -#nav_views li a:hover { - text-decoration: none; - } -#nav_views li.current a, #nav_views li.current a:hover { - color: #701238; - background-color: #fff6d5; - border-right: 1px solid #dcaa3f; - } -#nav_views li.current a:hover { - color: #d1451a; - } -#nav_views li a:hover { - color: #fff6d5; - background-color: #701238; - border-right: 1px solid #dcaa3f; - } - -.feeds { -clear:both; -float:right; -margin-top:1.25em; -position:absolute; -right:0; -bottom:-30px; -} -.feeds * { -line-height:1.4; -padding:0; -margin:0; -font-size:12px; -} - -.feeds p { -font-weight:bold; -display:inline; -display:none; -} -.feeds ul { -display:inline; -} -.feeds li { -list-style-type:none; -display:inline; -margin-left:0.5em; -} -.feeds li a.rss, -.feeds li a.atom { -background:url(icon_feed.jpg) no-repeat; -padding-top:2px; -padding-left:20px; -} -.feeds li a.foaf { -background:url(icon_foaf.gif) no-repeat; -padding-top:2px; -padding-left:30px; -} - -form#disfavor, form.disfavor, -form#favor, form.favor { - float: right; -} - -/*favorites*/ -input#favor, input.favor, -input#disfavor, input.disfavor { - background-color:#fcfff5; - background-color:transparent; - background-image:url(icon_heart-02.gif); - background-repeat:no-repeat; - cursor: pointer; - border: 0; - width: 16px; - height:16px; - text-indent:-9999px; -} - -input#disfavor, input.disfavor { - background-image:url(icon_heart-01.gif); -} - -.notice_single:hover input.favor, -.notice_single:hover input.disfavor { - background-color:#f3f8ea; -} - -/*profile_actions*/ -#profile_actions { -padding-left:0; -list-style-type:none; -margin:0; -} -#profile_actions li { -margin-bottom:0.5em; -clear:both; -} - -#profile_actions #profile_nudge input.submit, -#profile_actions #profile_block input.submit, -.profile_single form.block input.submit { -margin:0 0 0 -3px; -padding:0; -background-color:transparent; -color:#C15D42; -font-family:Georgia,"Times New Roman",Times,serif; -font-weight:normal; -font-size:14px; -text-align:left; -float:left; -line-height:18px; -} -#profile_actions #profile_nudge input.submit:hover, -#profile_actions #profile_block input.submit:hover { -background-color:transparent; -color:#C15D42; -} - -#wrap p#nudge_response { -background-color:transparent; -line-height:18px; -font-size:14px; -} -#wrap #profile_nudge input.disabled { -color:#999; -cursor:default; -} - - -#wrap form input.disabled, -#wrap form input.disabled:hover { -background-color:#999; -cursor:default; -} - -/* ----- Nav Footer ----- */ -#nav_sub { - clear: both; - margin: 18px auto 0 auto; - padding: 0; - list-style-type: none; - font-size: 11px; - font-weight: bold; - line-height: 21px; - border-top: 1px solid #dec5b5; - width: 600px; - } -#nav_sub li { - display: block; - float: left; - } -#nav_sub li a { - padding: 6px 24px 6px 0; - } -#nav_sub li a:hover { - text-decoration: underline; - } -/* ===== End Navigation Styling ===== */ - -#content { - clear: left; - margin: 40px 0 45px 0; - padding: 0 80px; - font-family: Georgia, "Times New Roman", Times, serif; - font-size: 14px; - line-height: 18px; - } -#content h2 { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 15px; - } -#content label { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 12px; - } -.instructions p, .success, .error { - font-weight: normal; - margin: 36px 0 0 0; - padding: 10px; - font-family: Georgia, "Times New Roman", Times, serif; - font-size: 13px; - line-height: 15px; - border: 1px solid #dec5b5; - color: #fff6d5; - } -.instructions a, .success a, .error a { - color: #d8e2d7; - text-decoration: underline; - } -.instructions a:hover, .success a:hover, .error a:hover { - color: #fff6d5; - } -.success { - background-color: #48705b; - } -.error { - background-color: #ce3728; - } - -/* ----- Stream -----*/ - -#notices { - clear: both; - margin: 0 auto; - padding: 0; - list-style-type: none; - width: 600px; - border-top: 1px solid #dec5b5; - } -#notices a:hover { - text-decoration: underline; - } -.notice_single { - clear: both; - display: block; - margin: 0; - padding: 5px 5px 5px 0; - min-height: 48px; - font-family: Georgia, "Times New Roman", Times, serif; - font-size: 13px; - line-height: 16px; - border-bottom: 1px solid #dec5b5; - background-color:#FCFFF5; - opacity:1; - } -.notice_single:hover { - background-color: #f7ebcc; - } -.notice_single p { - display: inline; - margin: 0; - padding: 0; - } -#notice_delete_form #confirmation_text { - display: block; - font-size: 14px; - font-weight: bold; - } - -input#submit_yes, input#submit_no { - margin: 18px 10px 0px 0px; - padding: 4px; - font-weight: bold; - color: #fff6d5; - background-color: #F60; - cursor: pointer; - border: 0; - width: 40px; - } -input#submit_yes:hover, input#submit_no:hover { - background-color: #701238; - } -.avatar.stream { - float: left; - margin: 0 10px 0.5em 0; - } -p.time { - display: block; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; - line-height: 15px; - } -p.time a { - color: #dab134; - } - -/* ----- Profile -----*/ -#profile { - clear: left; - margin: 0 -80px; - padding: 10px 0 0 0; - min-height: 170px; - border-top: 1px solid #dec5b5; - font-family: Georgia, "Times New Roman", Times, serif; - margin-bottom:1em; - float:left; - width:750px; - } -#profile h1 { - margin: 0; - padding: 0; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 14px; - } -#profile h2 { - margin: 0; - padding: 0; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 11px; - text-transform: uppercase; - color: #dab134; - } -#profile p { - margin: 0 10px 0 0; - font-size: 12px; - line-height: 14px; - } -#profile p.location { - margin: 0 10px 12px 0; - font-style: italic; - } -#profile p.notice_current { - font-size: 18px; - line-height: 21px; - } -#profile_avatar { - float: left; - margin-right: 4px; - } -#profile_avatar img { - margin-bottom: 5px; - } -.avatar.profile { - clear: left; - margin: 0 10px 5px 0; - } -.avatar.original { - float: left; - margin: 0 10px 18px 0; - } - -#profilesettings { - margin-bottom:2em; -} - - -.avatar_view { - float:left; - margin-bottom:1em; - margin-right:1em; -} - -#avatar_preview_view { - overflow:hidden; - width:96px; - height:96px; -} -#avatar_crop { - margin-bottom:2em; -} - -#avatar_crop, -#avatarfile { - clear:both; -} - -a.nickname { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-weight: bold; - font-size: 12px; - padding-right: 3px; - } -.hentry a.nickname { - font-weight:normal; -} -#profile_information { - float: left; - position: relative; - width: 270px; - } -.statistics { - margin-top: 18px; - } -.statistics h2 { - margin: 12px 0 3px 0; - } -dl.statistics { - margin: 0; - font-size: 12px; - line-height: 14px; - } -.statistics dt { - float: left; - width: 96px; -} -.statistics dd { - margin-left: 100px; -} -.statistics dt:after { - content: ":"; - } -#subscriptions { - float: left; - margin: 18px 0 30px 0; - } -#subscriptions_avatars { - float: left; - margin: 6px 0 0 0; - padding: 0; - list-style-type: none; - width: 270px; - } -#subscriptions_avatars li .avatar.mini { - float: left; - margin: 0 3px 3px 0; - padding: 0; - line-height: 0; - /* border: 1px solid #f00; */ - } -#subscriptions_viewall { - clear: left; - } -/* ----- End Profile -----*/ - -/* ----- Begin Subscriptions & Subscribers -----*/ - -ul.subscriptions, ul.subscribers { - float: none; - margin: 0; - padding: 0; - list-style-type: none; - overflow: auto; - clear:both; - } -ul.subscriptions li, ul.subscribers li { - display: block; - float: left; - padding: 0; - } -/* ----- End Subscriptions & Subscribers -----*/ - -#pagination { - margin: 18px auto; - width: 600px; - } -#nav_pagination { - margin: 0 0 36px 0; - padding: 0; - float: right; - list-style-type: none; - font-size: 12px; - font-weight: bold; - } -#nav_pagination li { - display: block; - float: left; - background-color: #701238; - } -#nav_pagination li.before { - margin-right: 1px; - } -#nav_pagination li a { - padding: 6px 15px; - line-height: 21px; - background-color: #701238; - color: #fff6d5; - } -#nav_pagination li a:hover { - background-color: #3F606F; - color: #fff6d5; - text-decoration: none; - } - -#footer { - clear: both; - margin: 0 auto; - padding: 0 0 36px 0; - width: 600px; - border-top: 1px solid #dec5b5; - } -#footer p { - margin-top: 9px; - line-height: 12px; - } -#cc { - float: left; - margin: 3px 10px 0 0; - } - -/* ===== Begin Forms Styling ===== */ - -/* ----- Forms General Style ----- */ -form { - margin: 0 auto; - padding: 0; - } -form { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 12px; - } -form label { - display: block; - font-size: 12px; - font-weight: bold; - line-height: 18px; - } -form input { - border: 1px solid #dec5b5; - width: 264px; - } -input#submit, input.submit { - display: block; - margin: 18px 0; - padding: 4px; - font-weight: bold; - color: #fff6d5; - background-color: #F60; - cursor: pointer; - border: 0; - width: auto; - } -input#submit:hover, input.submit:hover { - background-color: #701238; - } -input.checkbox { - /*width: 14px; - height: 14px;*/ - width: auto; - border: 0; - } - -label.checkbox_label { - display: inline; - font-weight: normal; -} - -textarea, input { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 12px; - color: #701238; - padding: 3px; - } -textarea:focus, input:focus { - background-color: #f8ebc0; - } -textarea { - width: 270px; - border: 1px solid #D8E2D7; - } -.input_instructions { - margin-top: 3px; - display: block; - font-size: 11px; - line-height: 15px; - color: #924959; - font-family: Verdana, Arial, Helvetica, sans-serif; - } - -/* ----- Status Form ----- */ -#status_form { - height: 96px; - /*background-color: #F00;*/ - } -#status_form p { - margin: 36px 0 0 0; - padding: 0; - } -#status_label { - display: block; - clear: both; - margin: 0; - padding: 0 0 3px 0; - font-size: 18px; - font-weight: bold; - line-height: 24px; - color: #dab134; - } -#status_textarea { - display: block; - float: left; - width: 463px; - height: 35px; - padding: 5px; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 12px; - color: #701238; - border: 0; - } -#status_submit { - display: block; - float: left; - margin: 1px 0 0 4px; - width: 63px; - height: 45px; - background-color: #F60; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-weight: bold; - font-size: 14px; - color: #fff6d5; - cursor: pointer; - border: 0; - } -#status_submit:hover { - background-color: #d1451a; - } -#counter { - position: absolute; - top: 140px; - left: -64px; - width: 50px; - font-weight: bold; - text-align: right; -} -.response_error textarea, -.response_error .on_max { -background-color:#fee; -} - -/* ----- Subscribe Form ----- */ -#content .subscribe .submit, #content .unsubscribe .submit, #remotesubscribe .button, #remotesubscribe { - clear: left; - margin: 0; - width: 96px; - height: 27px; - font-family: verdana, arial, helvetica, sans-serif; - font-weight: bold; - font-size: 10px; - text-transform: uppercase; - background-color: #F60; - color: #fff6d5; - border: 0; - } -#remotesubscribe { - width: 96px; - height: 22px; - padding: 5px 0 0 0; - text-align: center; - } -#content .subscribe .button:hover, #content .unsubscribe .button:hover { - background-color: #904632; - cursor: pointer; - } - -a#remotesubscribe { - display: block; -} - -/* ----- Login Form -----*/ -input#license { - width: auto; - border: 0; - } -/* ----- Avatar Form -----*/ -form { - clear: left; -} - -/* ----- OpenID Form -----*/ - -input#openid_url { - background: url(login-bg.gif) no-repeat; - background-color: #fff; - background-position: 4px 50%; - color: #000; - padding-left: 24px; -} - -/* People lists (search results, maybe subscribers) */ - -#profiles { - clear: both; - margin: 0 auto; - padding: 0; - list-style-type: none; - width: 600px; - border-top: 1px solid #dec5b5; - /*border: 1px solid #F00;*/ - } -#profiles a:hover { - text-decoration: underline; - } - -.profile_single { - clear: both; - display: block; - margin: 0; - padding: 5px 5px 5px 0; - min-height: 48px; - font-family: Georgia, "Times New Roman", Times, serif; - font-size: 13px; - line-height: 16px; - border-bottom: 1px solid #dec5b5; - width:100%; - float:left; - } -.profile_single:hover { - background-color: #f7ebcc; - } - -.profile_single form.block, -.profile_single form.subscribe, -.profile_single form.unsubscribe { - float: right; -} - -form.subedit { - margin-left:4.5em; -} -form.subedit p { - display:inline; - -} -form.subedit input.submit { - margin:0 0 0 0.5em; - display:inline; - background-color:transparent; - padding:0; - color:#C15D42; - border:1px solid #C15D42; -} - - - -/* ----- IM Settings Form -----*/ - -#imsettings p { - margin: 0; - padding: 0; - line-height: 15px; -} - -/* ----- direct message ----- */ - -#message_form { - height: 96px; - /*background-color: #F00;*/ - } - -#message_form p { - margin: 21px 0 0 0; - padding: 0; - } -#message_form label { - display: inline; - } - -#message_content { - display: block; - float: left; - width: 463px; - height: 35px; - padding: 5px; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 12px; - color: #193441; - border: 0; - } - -#message_send { - display: block; - float: left; - margin: 1px 0 0 4px; - width: 63px; - height: 45px; - background-color: #C15D42; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-weight: bold; - font-size: 14px; - color: #FCFFF5; - cursor: pointer; - border: 0; - } - -#message_send:hover { - background-color: #904632; - } - -/* ===== End Forms Styling ===== */ - -/* ===== Tag Cloud Styling ===== */ - -p.tagcloud { -text-align: center; -} - -p.tagcloud a { -line-height:100%; -vertical-align:middle; -} - -p.tagcloud a.largest { -font-size: 400%; -} -p.tagcloud a.verylarge { -font-size: 300%; -} - -p.tagcloud a.large { -font-size: 200%; -} - -p.tagcloud a.medium { -font-size: 150%; -} - -p.tagcloud a.small { -font-size: 100%; -} - -p.tagcloud a.verysmall { -font-size: 80%; -} - -p.tagcloud a.smallest { -font-size: 60%; -} - -#subscriptions_nav, -#filter_tags { -margin:0 0 2em 0; -} - -#subscriptions_nav { -padding-bottom:0.5em; -/*border-bottom:1px solid #D8E2D7;*/ -float:right; -} -#filter_tags { -float:left; -} - -#subscriptions_nav dt, -#filter_tags dt { -display:none; -} -#subscriptions_nav dd, -#filter_tags dd { -margin-left:0; -} -#subscriptions_nav ul, -#filter_tags ul { -padding-left:0; -list-style-type:none; -margin-left:0; -} -#subscriptions_nav ul li { -display:inline; -padding-left:0.5em; -margin-left:0.5em; -border-left:1px solid #D8E2D7;; -} -#subscriptions_nav ul li.child_1 { -border-left:0; -padding-left:0; -margin-left:0; -} - -#filter_tags ul li { -float:left; -margin-left:0.5em; -padding-left:0.5em; -border-left:1px solid #D8E2D7;; -} -#filter_tags ul li.child_1 { -margin-left:0; -border-left:0; -padding-left:0; -} -#filter_tags ul li li { -margin-left:0; -} -#filter_tags ul li#filter_tags_item { -width:30em; -} -#filter_tags ul li#filter_tags_item form { -clear:none; -} -#filter_tags ul li#filter_tags_item label { -margin-right:0.5em; -font-size:14px; -font-weight:normal; -font-family:Georgia,"Times New Roman",Times,serif; -} -#filter_tags ul li#filter_tags_item label, -#filter_tags ul li#filter_tags_item select { -margin-top:-1px; -margin-bottom:0.5em; -display:inline; -} -#filter_tags ul li#filter_tags_item p { -margin:0 1em 0 0; -padding:0; -float:left; -} -#filter_tags ul li .input_instructions { -display:inline; -display:block; -margin:0; -} -#filter_tags ul li#filter_tags_item .submit { -margin:0; -} - -.tags_self, -.tags_user { -margin-left:4.5em; -} -.tags_self dl, -.tags_user dl { -margin-left:0; -} - -.tags_self dt, -.tags_user dt { -display:inline; -margin-right:0.5em; -} - -.tags_self dd, -.tags_user dd { -margin-left:0; -display:inline; -} - -ul.tags { -padding-left:0; -margin-left:0; -list-style-type:none; -display:inline; -} -ul.tags li { -display:inline; -margin-right:0.75em; -} -ul.tags li a { -padding-left:17px; -background:url(icon_tag-01.gif) no-repeat; -line-height:1.5; -} - -.tags_user { -margin-bottom:0.5em; -} - -form#tag_user { -margin-left:8.75em; -clear:both; -} -form#tag_user p { -margin:0; -} - -form#tag_user label { -display:inline; -margin-right:1em; -} -form#tag_user .submit { -margin-left:4em; -} - -form#tag_user .input_instructions { -margin-left:4.5em; -} - -.profile_list p { -margin:0 0 0.5em 0; -} - -.profile_list .bio { -margin-left:4.5em; -} - -/* ----- Mailbox ----- */ -#messages { - clear: both; - margin: 0 auto; - padding: 0; - list-style-type: none; - width: 600px; - border-top: 1px solid #dec5b5; - } - -#messages a:hover { - text-decoration: underline; - } - -.message_single { - clear: both; - display: block; - margin: 0; - padding: 5px 5px 5px 0; - min-height: 48px; - font-family: Georgia, "Times New Roman", Times, serif; - font-size: 13px; - line-height: 16px; - border-bottom: 1px solid #dec5b5; - } -.message_single:hover { - background-color: #f7ebcc; - } -.message_single p { - display: inline; - margin: 0; - padding: 0; - } diff --git a/theme/default/icon_feed.jpg b/theme/default/icon_feed.jpg deleted file mode 100644 index 53c4d49597aecf93ff3acfee8bdfd7cf0e7a1010..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmex=iF;o{=v;^GnD0RsUZK7IjyJ|1CV5fNcw z8EI*08F@HhWM^mR<>8eO5Ri}(6%>_%OAyQWe}F-dgF%2nfSFN{fk}{&S&;Gn5r#|# zMn<3;kpK%jBLg$47&8kSqW}XF6C*PVLWYr6= z?t_KG9of+Kw{o1*N)@^V7i%uLe&=C8;)JB9cQr3Q=l#~cCij$Z-+u=8ZM`gu7)lZ~ za@T%pHQ}{9HKXf&{TA)}7ZPF;_s!bMmmE1?{OaKbnS>Mn8A89T3&i*JrF8R7w1whHElM8C<3ml?j+W9-3dwyO`2L|HqDkn z5%F#4%5=zqhahRU8WmVVw{A%ro6Wr`PE6ceVj2??L*}%}w$5a?_V3v9;raf2cvR|! zleHa30UP`^2O^P(TCHAKSg=~He14Hqsif%uZ8F&hVl+)kq!MMLzPTBX#bWfui_Upx zD&?A({APN6nl_tVpScF^4um#Ch!`OgWH@Z1X>XUc>*oB;p^^I*kHugxqzIz#MkuV+ z27e0fbavY2Z0Yob-EJpWNrkE-kx0z`GV7<3B)Q`M(a*|fwO?ze5|oczl~rJTgzvcP zz!1czQbk)^OUg=ic0LdYc>Kb`Zg=9odT3ob5qn5U- zZT@vXO;3k^3m?hNp^{WgtIf?~Vi*>WTf)DFYicA*OYfDHpIEwZfu=*Xwa2whum5W{ zlO!obgc%u(w8@kv2n>cj-+78r7)Id$weIzL7Z!R>!0^-*v5e!F&8~w3Z(YM%0)Y@I zE{Nm!F$q#$j-}IMH89-M7w}AdKk~&$^8EQ0k%;<%3Q);-{B4CovDekr^qO&h-@R)# zADB!U?U`h6#s5A^?%aeE|u=?euQDt>S{El*K_kZ{mxHA zKZiIhc5pN3^BG3p|I*eU;lW3AS9DcXD27Q~_gwCYuVpe!2=hknj|h-5S$U0@T;=iD z)k0w^HAb$Gi#YE0tpNaNntta0C!(hi1AsYD`8@ym6W|aH&PB`*h_CXP`B1cFukIl$ zs|1(%WPd!$fVg5p|HQsAS^bi1b0#pP6%J=GW{H{G^{kf%TYUG<8ipXeV7Bse-~cv| zbFQln4K0m}iaXIuv5tC2w(J<*7GbcULq^Pkw5D#|;fUDp4ksPTyrZ@I+X3#gFQA-x zk0&Fbfm(V`Kb^8?Lhb_Ijq8^l&o~_g;dlNH1SJ|q-7P$;xu;vu8g;$-KF`Z%EK&)8HeT>g)Y#vUAp}MLgmL1PV~(!a7HD+ zI?Nr*lXC$Eu30nL$d)62zg!{*uVkS>^T@WwmwfEeqXVc$01lsS6Nu{>3~=f{5zlh9 diff --git a/theme/default/icon_heart-01.gif b/theme/default/icon_heart-01.gif deleted file mode 100644 index bdfd7483f08bb995cde9e6f5c1eb196b58c9dd52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67 zcmZ?wbhEHb6krfwXkcVGF2Vl)|9{1wEQ|~cj0`#qKmd|qV3O+TUwQg1zbHfcrcA@B UQTO-NN|?AMwk&%U%)np`099@irT_o{ diff --git a/theme/default/icon_heart-02.gif b/theme/default/icon_heart-02.gif deleted file mode 100644 index cbb35e0dc2f436b6411538f011b96ba55242f3a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmZ?wbhEHb6krfwn8?I%T!Q^S7%(s}DE?$&WME)o&;hc6vI0Q1^pyUUr{D66Go+ab Y96A&7Y<+BkdfNoirLRueu`*Z#05=sEc>n+a diff --git a/theme/default/icon_tag-01.gif b/theme/default/icon_tag-01.gif deleted file mode 100644 index 92e5742ceebfbc8bd4f1e0b3a9dabfc583dd1a7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmZ?wbhEHb6krfwc;?P<_UzeTzkYrB^5y2uo5ek|j6%|lL(;cz-+u1gxd#s(JbLtK z+qP{#fBsBwpZ)gj+jsBYnS`c4dGf>{IQ{F_ufKo){`Be7>C>mbfB$~v%9RTjE?l~F z>A-;l=^e9o@7}$4@7@&A^6C$Ha6YoC4i@Zo*?_DPyJ{{8#+|Ns9CLj)-P zWMO1raA(i~xfc{C4D8Dr>?EX&BsmyF+`GEF^xgXV1sNE7x~1H>I5_*c#HLJ@bYpOr zFc5L$w4UG1u|kYP+)>6&+j+G+L%)rMHm7#XYqAFbX^ diff --git a/theme/default/ie6.css b/theme/default/ie6.css deleted file mode 100644 index f9fc8150e7..0000000000 --- a/theme/default/ie6.css +++ /dev/null @@ -1,73 +0,0 @@ -@charset "UTF-8"; -/* CSS Document */ -body { - text-align: center; -} -input { - height: 24px; -} -#wrap { - margin: 0 auto; - padding: 0 20px; - width: 800px; - text-align: left; - background: url(bg-header.gif) repeat-x #fbf2d7; - } -#header { - position: relative; - margin-left: 108px; - } -#nav_views { - margin: 0; - } -#nav_views li { - line-height: 19px; - } -.statistics dd { - margin-top: -15px; - clear: both; - } -#notices { - margin: 0; - } -.notice_single { - height: 48px; - } -#profile { - margin-left:0px; -} -#profile p.notice_current { - height: 96px; - } -#filter_tags { - margin-left:20px; -} -#content .subscriptions { - margin-left:30px; - width:100%; -} - -#subscriptions_avatars li { - float: left; - margin: 0; - padding: 0; - } -img.avatar.original, img.avatar.profile { - clear: none; - float: left; -} -#status_textarea { - height: 46px; - } - -#nav_pagination li a { - padding: 6px 15px; - line-height: 27px; - } -#nav_sub { - position: relative; - margin-left: 108px; - } -#footer { - margin-left: 108px; -} diff --git a/theme/default/ie7.css b/theme/default/ie7.css deleted file mode 100644 index 23a3241b76..0000000000 --- a/theme/default/ie7.css +++ /dev/null @@ -1,39 +0,0 @@ -@charset "UTF-8"; -/* CSS Document */ -input.disfavor, -input.favor { - text-indent:0; - text-align:right; - padding-left:25px; -} - -#profile_actions li { -float:left; -clear:both; -} -#profile_actions #profile_nudge input.submit { -margin-left:0; -width:100px; -} - -#statistics dd { - clear: both; - } - -#subscriptions_avatars li { - float: left; - } -img.avatar.original, img.avatar.profile { - clear: none; - float: left; -} - -#nav_pagination li a { - padding: 6px 15px; - line-height: 27px; - } - -#filter_tags ul li#filter_tags_item label { -position:relative; -top:-8px; -} \ No newline at end of file diff --git a/theme/default/login-bg.gif b/theme/default/login-bg.gif deleted file mode 100644 index e2d8377db023a3915cc9e8c2f1f5c7462622f0a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328 zcmZ?wbhEHb6krfwxXQrr>({UQ_wR4qxN*;(J#*&FS-N!TvSrKGuV4S?%F;i7{_Nbj z^V6qK`}XadJ9qBs)2Dx~3p;V*#MZ4_j~qF&aN)v#|Nb2~aNyvg9 ztXT2$=g%EGcI@80`{m1*Z{NOs{rdIFl`EeF4W-ruOthu2f ztl_Mdp@*QzZPDcui{^-N`o3xq@(UMrZh5FF-w`Y#$*8QNq^Zf+5a!Y$(d{Fk$;RMZ d?jf!z+?DC8mZr!$-G@O{mX$wbm9ry*H2@d`j5z=R From 05e11ea0210fbad502d5fcd5c75ff379fd7824a4 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Tue, 3 Feb 2009 22:12:04 +0000 Subject: [PATCH 16/48] Removed deprecated files from the identica theme. --- theme/identica/bg-body.gif | Bin 136 -> 0 bytes theme/identica/bg-header.gif | Bin 2469 -> 0 bytes theme/identica/display.css | 187 ----------------------------------- theme/identica/ie6.css | 14 --- theme/identica/ie7.css | 3 - theme/identica/login-bg.gif | Bin 328 -> 0 bytes 6 files changed, 204 deletions(-) delete mode 100644 theme/identica/bg-body.gif delete mode 100644 theme/identica/bg-header.gif delete mode 100644 theme/identica/display.css delete mode 100644 theme/identica/ie6.css delete mode 100644 theme/identica/ie7.css delete mode 100644 theme/identica/login-bg.gif diff --git a/theme/identica/bg-body.gif b/theme/identica/bg-body.gif deleted file mode 100644 index d87e2e8d76f7ff81d3ab327b7e3a06c8a8d6bb1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmZ?wbhEHbJiyGzu$h73&;PGC9$o+c|Nr%e*Dl??eDw0ktM{*7e{_A{*&_$eA3cBT z!l`R#7?6Mthz-)qz+!7~!gKXri`Tx#CD|70xHd6ltXh}zdS8Lg`I6lG73<#Dy#Ie- hL4k*kRR4)3MJID!33MKEax|!5o3p0ubT0#gH2{s0LAn3{ diff --git a/theme/identica/bg-header.gif b/theme/identica/bg-header.gif deleted file mode 100644 index 5154b2e5e9fec15cf8b1e8592670d4a9fd9d4bb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2469 zcmV;W30n3?Nk%w1VGID+0QUd@Pi}Z@iHK=}eqe5GVt|7fGCp8_f;UW9RC0SzZ+TpL zfL&~BOI~6~T46zAaB+);N?c-AW@uz`Z#+<1c9M=(b$nQMeOhX2U~OtjZg_N$ifoFAL|0!wR9qD-I8R_?a*m5!dVg+)f<8m{L}YPQbbMH7X?T&2R%T~ZW@mMf zj&qQWMrCtzkBMe~_ub9Rx9bdZfrZFg~vi*t{RWrBoul8tMKh&oSNLSk@cgN1dGjZAEIOl)^w zeSuDGcS~z_cae@-cz#)Ues__LM`v^sDKv79jAVj@L}YSFX>@OlifV_4c94vAkd1SV zh;@*SO>B2_j*LcUb7g~tMP+hZd4F_`h)8L4UVMOBd46Ppgi~W@U3`E>W^!abtmlaEyy~l8i-Ua$0$RTX}wW zk&I=7gjsieOKf&ya%^3DfM9)ragB^gXmoUujdhTWbB~Q)eSu$mfnR-qa*vF0j*D=N zigApKc8`l?f`w#qY+`R~O>THvczr@uUSo1^YK4YVWM+4ej6YOcUwwjKet}=icTH?|O>K5;h=(*%U|xNIL1S=bgoJR7igApJFiKW3 zPhD$+e|M6MA^8LV00000EC2ui01N=w000R80P_eONU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGiuz(v7^V2AVWUXL$ajFlPF7~Sjn=b%a<@?%4Aufrp=o;bL!m5vnNgvK!XY$ zO0=laK1h=)UCK1+h^J7aN}USzkJYPKvueGnq^sAjT>*(5OIECmvuM+*UCR~^zkYbq zcIqU?AAF7gKg?@S8P`k~4?hOEO$kA?ub#4UP{KkYy(W^# zvCAs^1vo5N0uBv}kW0Z6dl9i059gBc!x}W; zMaLhLfN=wNkcC9V(xUfXgnIymHJ9yj*hwJ;01J%supgv(G*6jB^7Ow1IOQ z5cFVl4-m9bLDElGz;p#vM;$fNR6}3^1X<_swAWlSV1Wf>p4q~%Swgt;D zutVHyGZ6POcWWYd-kRwDy^P+Pgu_7J48%f4ESZpzN#ctuPR22YBV+h6$dG}|F|D*h zMk`V*A%zs1gWkjvtu#T#=SwuvdFKj@u7CndIMW0WufI;aGe9_lyY09;Lrd3oWp~f=e~kpb?BU$_InSHMjs{O$xzOlEOW};Brk0m7qg@C9_oGy*iZ` z@XRb-7?8pbyAFhKtRsD)V=Knn!WLOHacKn5;Qfdp6}0cb#g z2{ModTA<(r2`~%|#-W14m|zIuz(F_+ql3eUz!}biJ1U?}PFnr<@V2}k4 zb;t-t*wBYP1Va%2eW;98fMFFz?1nPH&Q7L#;@B}d_idIZ4{ngr!1F&Tg$)T5LED5WC; zuz-3jAeFCVB`i}J01k+tmLlK)2VQxET;|f2y8NXtH^6}b1e2J#+<-C%kcKoca{~j| zfHOtG%rxwxnFA1oGp$JsVq8-cyU^x0wXu&~Y{M42AO;$0xdx*u)&2?q(Y$&^#m8Nu?Q|KqM{eI=pv{g zhH=b63|tTcH6*ZzIdCB!5sK*>*A>|Hta~7KN*oknR@ zFb&g!Hp2)}FhdlK;0@e1BMQ5%!w{lS2Q%Q-xJEF8DTd&RxticIeZ~}hyy9FWm jKnOzUZ-4>ZUnuy)9|lJ7ffFnM0YIU_4|Xtw0|Ed${i-RK diff --git a/theme/identica/display.css b/theme/identica/display.css deleted file mode 100644 index 62d34f00e8..0000000000 --- a/theme/identica/display.css +++ /dev/null @@ -1,187 +0,0 @@ -/* CSS Document */ -/* Design & CSS by Marie-Claude Doyon http://www.marieclaudedoyon.com */ - -@import url(../default/display.css); - -html { - background: url(bg-body.gif) repeat-y top center #d8e2d7; -} - -body { - color: #193441; -} - -a { - color: #C15D42; -} - -#wrap { - background: url(bg-header.gif) repeat-x #FCFFF5; -} - -#header h1.pagetitle { - color: #d8e2d7; -} - -#header h2.sitename { - color: #FCFFF5; -} - -#nav li a { - color: #91AA9D; -} - -#nav_views li a { - color: #FCFFF5; - background-color: #91AA9D; - border-right: 1px solid #6A8787; -} - -#nav_views li.current a, #nav_views li.current a:hover { - color: #3F606F; - background-color: #FCFFF5; - border-right: 1px solid #6A8787; -} - -#nav_views li.current a:hover { - color: #193441; -} - -#nav_views li a:hover { - color: #FCFFF5; - background-color: #3F606F; - border-right: 1px solid #6A8787; - } - -#nav_sub { - border-top: 1px solid #D8E2D7; - } - -.instructions p, .success, .error { - border: 1px solid #91AA9D; - color: #FCFFF5; - } -.instructions a:hover, .success a:hover, .error a:hover { - color: #FCFFF5; - } - -#notices { - border-top: 1px solid #D8E2D7; - } - -.notice_single { - border-bottom: 1px solid #D8E2D7; -} - -.notice_single:hover { - background-color: #F3F8EA; - } - -input#submit_yes, input#submit_no { - color: #FCFFF5; - background-color: #C15D42; - } - -input#submit_yes:hover, input#submit_no:hover { - background-color: #904632; - } - -p.time a { - color: #91AA9D; - } - -#profile { - border-top: 1px solid #D8E2D7; - } - -#profile h2 { - color: #91AA9D; - } - -#nav_pagination li { - background-color: #91AA9D; - } - -#nav_pagination li a { - background-color: #91AA9D; - color: #FCFFF5; - } - -#nav_pagination li a:hover { - color: #FCFFF5; - } - -#footer { - border-top: 1px solid #D8E2D7; - } - -form input { - border: 1px solid #D8E2D7; - } - -input#submit, input.submit { - color: #FCFFF5; - background-color: #C15D42; - } - -input#submit:hover, input.submit:hover { - background-color: #904632; - } - -textarea, input { - color: #193441; - } - -textarea:focus, input:focus { - background-color: #f0f6eb; - } - -.input_instructions { - color: #91aa9d; - } - -#status_label { - color: #91AA9D; - } - -#status_textarea { - color: #193441; -} - -#status_submit { - background-color: #C15D42; - color: #FCFFF5; - } - -#status_submit:hover { - background-color: #904632; - } - -#content .subscribe .submit, #content .unsubscribe .submit, #remotesubscribe .button, #remotesubscribe { - background-color: #c15d42; - color: #fcfff5; - } - -#profiles { - border-top: 1px solid #D8E2D7; - } - -.profile_single { - border-bottom: 1px solid #D8E2D7; - } - -.profile_single:hover { - background-color: #F3F8EA; - } - -#messages { - border-top: 1px solid #D8E2D7; - } - -.message_single { - border-bottom: 1px solid #D8E2D7; - } - -.message_single:hover { - background-color: #F3F8EA; - } diff --git a/theme/identica/ie6.css b/theme/identica/ie6.css deleted file mode 100644 index a301f1dc5f..0000000000 --- a/theme/identica/ie6.css +++ /dev/null @@ -1,14 +0,0 @@ -@charset "UTF-8"; -/* CSS Document */ -@import url(../default/ie6.css); -#wrap { - background: url(bg-header.gif) repeat-x #FCFFF5; - } - - -input.disfavor, -input.favor { - text-indent:0px; - text-align:right; - padding-left:25px; -} \ No newline at end of file diff --git a/theme/identica/ie7.css b/theme/identica/ie7.css deleted file mode 100644 index cab6f4059c..0000000000 --- a/theme/identica/ie7.css +++ /dev/null @@ -1,3 +0,0 @@ -@charset "UTF-8"; -/* CSS Document */ -@import url(../default/ie7.css); diff --git a/theme/identica/login-bg.gif b/theme/identica/login-bg.gif deleted file mode 100644 index e2d8377db023a3915cc9e8c2f1f5c7462622f0a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328 zcmZ?wbhEHb6krfwxXQrr>({UQ_wR4qxN*;(J#*&FS-N!TvSrKGuV4S?%F;i7{_Nbj z^V6qK`}XadJ9qBs)2Dx~3p;V*#MZ4_j~qF&aN)v#|Nb2~aNyvg9 ztXT2$=g%EGcI@80`{m1*Z{NOs{rdIFl`EeF4W-ruOthu2f ztl_Mdp@*QzZPDcui{^-N`o3xq@(UMrZh5FF-w`Y#$*8QNq^Zf+5a!Y$(d{Fk$;RMZ d?jf!z+?DC8mZr!$-G@O{mX$wbm9ry*H2@d`j5z=R From c16ddd677588424f51d63d37ea9b3eb34c73c233 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 3 Feb 2009 16:31:41 -0800 Subject: [PATCH 17/48] trac1095 Profile page had bad alternate links for RSS and Atom feeds --- actions/showstream.php | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/actions/showstream.php b/actions/showstream.php index ecd9526353..90ffcacf9a 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -170,26 +170,22 @@ class ShowstreamAction extends Action function showFeeds() { - // Feeds $this->element('link', array('rel' => 'alternate', - 'href' => common_local_url('api', - array('apiaction' => 'statuses', - 'method' => 'entity_timeline.rss', - 'argument' => $this->user->nickname)), - 'type' => 'application/rss+xml', - 'title' => sprintf(_('Notice feed for %s'), $this->user->nickname))); - $this->element('link', array('rel' => 'alternate feed', - 'href' => common_local_url('api', - array('apiaction' => 'statuses', - 'method' => 'entity_timeline.atom', - 'argument' => $this->user->nickname)), - 'type' => 'application/atom+xml', - 'title' => sprintf(_('Notice feed for %s'), $this->user->nickname))); - $this->element('link', array('rel' => 'alternate', - 'href' => common_local_url('userrss', array('nickname' => - $this->user->nickname)), - 'type' => 'application/rdf+xml', - 'title' => sprintf(_('Notice feed for %s'), $this->user->nickname))); + 'type' => 'application/rss+xml', + 'href' => common_local_url('userrss', + array('nickname' => $this->user->nickname)), + 'title' => sprintf(_('Notice feed for %s (RSS)'), + $this->user->nickname))); + + $this->element('link', + array('rel' => 'alternate', + 'href' => common_local_url('api', + array('apiaction' => 'statuses', + 'method' => 'user_timeline.atom', + 'argument' => $this->user->nickname)), + 'type' => 'application/atom+xml', + 'title' => sprintf(_('Notice feed for %s (Atom)'), + $this->user->nickname))); } function extraHead() From 19724a51b3da1fb076ca47ce1ea7a4f229fa3b5d Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 3 Feb 2009 21:22:41 -0800 Subject: [PATCH 18/48] 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(-) diff --git a/lib/htmloutputter.php b/lib/htmloutputter.php index f9245414f2..7780b1c19d 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'; From 15b96f78ab9c294e6e20ff2411662793dae1e2d9 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 4 Feb 2009 07:33:10 -0500 Subject: [PATCH 19/48] Revert "Fixed direct messaging: AjaxWebChannel is now using Action's methods." This reverts commit 0f2c43bd040437b3e40c706d7c3f4ba163e94a71. Making Channel a subclass of Action for no other reason than to let the AjaxWebChannel do some output is the really, really wrong way to do this. A Channel is not an Action. I'll change AjaxWebChannel so it takes an Action as a constructor paramater and uses that Action for its output. We do this for most Widget subclasses and it makes sense here, too. --- classes/Channel.php | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/classes/Channel.php b/classes/Channel.php index c03efef481..2e3e4e8d4a 100644 --- a/classes/Channel.php +++ b/classes/Channel.php @@ -19,7 +19,7 @@ if (!defined('LACONICA')) { exit(1); } -class Channel extends Action +class Channel { function on($user) @@ -129,7 +129,6 @@ class WebChannel extends Channel # XXX: buffer all output and send it at the end # XXX: even better, redirect to appropriate page # depending on what command was run - common_show_header(_('Command results')); common_element('p', null, $text); common_show_footer(); @@ -147,26 +146,26 @@ class AjaxWebChannel extends WebChannel function output($user, $text) { - $this->startHTML('text/xml;charset=utf-8', true); - $this->elementStart('head'); - $this->element('title', null, _('Command results')); - $this->elementEnd('head'); - $this->elementStart('body'); - $this->element('p', array('id' => 'command_result'), $text); - $this->elementEnd('body'); - $this->elementEnd('html'); + common_start_html('text/xml;charset=utf-8', true); + common_element_start('head'); + common_element('title', null, _('Command results')); + common_element_end('head'); + common_element_start('body'); + common_element('p', array('id' => 'command_result'), $text); + common_element_end('body'); + common_element_end('html'); } function error($user, $text) { - $this->startHTML('text/xml;charset=utf-8', true); - $this->elementStart('head'); - $this->element('title', null, _('Ajax error')); - $this->elementEnd('head'); - $this->elementStart('body'); - $this->element('p', array('id' => 'error'), $text); - $this->elementEnd('body'); - $this->elementEnd('html'); + common_start_html('text/xml;charset=utf-8', true); + common_element_start('head'); + common_element('title', null, _('Ajax Error')); + common_element_end('head'); + common_element_start('body'); + common_element('p', array('id' => 'error'), $text); + common_element_end('body'); + common_element_end('html'); } } From 2d063650effb22c90936a4588f44946c69e1d9a1 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 4 Feb 2009 07:59:30 -0500 Subject: [PATCH 20/48] Make WebChannel and AjaxWebChannel work These command-output channels were using the old common_element_* functions. They now take an $out constructor parameter, and use that for output. The WebChannel has pretty remedial output; it would be nice if it output a real formatted page. --- actions/newnotice.php | 4 +- classes/Channel.php | 93 +++++++++++++++++++++++-------------------- 2 files changed, 52 insertions(+), 45 deletions(-) diff --git a/actions/newnotice.php b/actions/newnotice.php index e3974cd07d..61f0f83650 100644 --- a/actions/newnotice.php +++ b/actions/newnotice.php @@ -141,9 +141,9 @@ class NewnoticeAction extends Action if ($cmd) { if ($this->boolean('ajax')) { - $cmd->execute(new AjaxWebChannel()); + $cmd->execute(new AjaxWebChannel($this)); } else { - $cmd->execute(new WebChannel()); + $cmd->execute(new WebChannel($this)); } return; } diff --git a/classes/Channel.php b/classes/Channel.php index 2e3e4e8d4a..fdeff21fc6 100644 --- a/classes/Channel.php +++ b/classes/Channel.php @@ -21,7 +21,7 @@ if (!defined('LACONICA')) { exit(1); } class Channel { - + function on($user) { return false; @@ -36,12 +36,12 @@ class Channel { return false; } - + function error($user, $text) { return false; } - + function source() { return null; @@ -52,22 +52,22 @@ class XMPPChannel extends Channel { var $conn = null; - + function source() { return 'xmpp'; } - + function __construct($conn) { $this->conn = $conn; } - + function on($user) { return $this->set_notify($user, 1); } - + function off($user) { return $this->set_notify($user, 0); @@ -78,13 +78,13 @@ class XMPPChannel extends Channel $text = '['.common_config('site', 'name') . '] ' . $text; jabber_send_message($user->jabber, $text); } - + function error($user, $text) { $text = '['.common_config('site', 'name') . '] ' . $text; jabber_send_message($user->jabber, $text); } - + function set_notify(&$user, $notify) { $orig = clone($user); @@ -105,20 +105,25 @@ class XMPPChannel extends Channel } } - class WebChannel extends Channel { + var $out = null; + + function __construct($out=null) + { + $this->out = $out; + } function source() { return 'web'; } - + function on($user) { return false; } - + function off($user) { return false; @@ -129,47 +134,49 @@ class WebChannel extends Channel # XXX: buffer all output and send it at the end # XXX: even better, redirect to appropriate page # depending on what command was run - common_show_header(_('Command results')); - common_element('p', null, $text); - common_show_footer(); + $this->out->startHTML(); + $this->out->elementStart('head'); + $this->out->element('title', null, _('Command results')); + $this->out->elementEnd('head'); + $this->out->elementStart('body'); + $this->out->element('p', array('id' => 'command_result'), $text); + $this->out->elementEnd('body'); + $this->out->endHTML(); } - + function error($user, $text) { common_user_error($text); } } - class AjaxWebChannel extends WebChannel { - function output($user, $text) { - common_start_html('text/xml;charset=utf-8', true); - common_element_start('head'); - common_element('title', null, _('Command results')); - common_element_end('head'); - common_element_start('body'); - common_element('p', array('id' => 'command_result'), $text); - common_element_end('body'); - common_element_end('html'); + $this->out->startHTML('text/xml;charset=utf-8'); + $this->out->elementStart('head'); + $this->out->element('title', null, _('Command results')); + $this->out->elementEnd('head'); + $this->out->elementStart('body'); + $this->out->element('p', array('id' => 'command_result'), $text); + $this->out->elementEnd('body'); + $this->out->endHTML(); } function error($user, $text) { - common_start_html('text/xml;charset=utf-8', true); - common_element_start('head'); - common_element('title', null, _('Ajax Error')); - common_element_end('head'); - common_element_start('body'); - common_element('p', array('id' => 'error'), $text); - common_element_end('body'); - common_element_end('html'); + $this->out->startHTML('text/xml;charset=utf-8'); + $this->out->elementStart('head'); + $this->out->element('title', null, _('Ajax Error')); + $this->out->elementEnd('head'); + $this->out->elementStart('body'); + $this->out->element('p', array('id' => 'error'), $text); + $this->out->elementEnd('body'); + $this->out->endHTML(); } } - class MailChannel extends Channel { @@ -179,17 +186,17 @@ class MailChannel extends Channel { return 'mail'; } - + function __construct($addr=null) { $this->addr = $addr; } - + function on($user) { return $this->set_notify($user, 1); } - + function off($user) { return $this->set_notify($user, 0); @@ -200,23 +207,23 @@ class MailChannel extends Channel $headers['From'] = $user->incomingemail; $headers['To'] = $this->addr; - + $headers['Subject'] = _('Command complete'); return mail_send(array($this->addr), $headers, $text); } - + function error($user, $text) { - + $headers['From'] = $user->incomingemail; $headers['To'] = $this->addr; - + $headers['Subject'] = _('Command failed'); return mail_send(array($this->addr), $headers, $text); } - + function set_notify($user, $value) { $orig = clone($user); From e8d3615b3f59355f1360af4a027a2b4725c81291 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 4 Feb 2009 08:49:42 -0500 Subject: [PATCH 21/48] Allow HTML in site notice (Bug#1002) --- lib/action.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/action.php b/lib/action.php index f9b0688786..c4172ada11 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 From 8463d233976ecf06df60494ec061bcaf36819408 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Wed, 4 Feb 2009 14:35:34 +0000 Subject: [PATCH 22/48] http://laconi.ca/trac/ticket/1112 -- Removed only the author fn from display. --- theme/base/css/display.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 242818c9a0..e2a2a965c8 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -1072,7 +1072,7 @@ border-top:0; .section .notice:first-child { padding-top:0; } -.section .notice .fn { +.section .notice .author .fn { display:none; } From 593d41f78b8caa94208abdd5787ef26280460b61 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Wed, 4 Feb 2009 16:45:46 +0000 Subject: [PATCH 23/48] Using overflow:hidden for long strings that don't contain any whitespace. This is both a preventive measure for user content that is abused (i.e., leaking text into other page components) and for aesthetics (requested by @evan) --- theme/base/css/display.css | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/theme/base/css/display.css b/theme/base/css/display.css index e2a2a965c8..638b095207 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -24,6 +24,7 @@ position:relative; h1,h2,h3,h4,h5,h6 { text-transform:uppercase; margin-bottom:7px; +overflow:hidden; } h1 { font-size:1.4em; @@ -508,6 +509,7 @@ min-height:123px; float:left; margin-bottom:18px; margin-left:0; +overflow:hidden; } .entity_profile dt, #entity_statistics dt { @@ -767,6 +769,10 @@ padding-left:28px; margin-right:11px; } +.fn { +overflow:hidden; +} + .notice .author .fn { font-weight:bold; } @@ -791,7 +797,7 @@ text-decoration:underline; .notice .entry-title { float:left; width:100%; -overflow:auto; +overflow:hidden; } #shownotice .notice .entry-title { font-size:2.2em; From b8e10428d3f5e86cab97e226947f077ba98f907e Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Wed, 4 Feb 2009 17:03:59 +0000 Subject: [PATCH 24/48] 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(-) diff --git a/lib/error.php b/lib/error.php index 03065bc709..526d9f81be 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 bfba702e6a..f42427540a 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(); From b43bdda312fb10501597251f406e58b5b907d480 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Wed, 4 Feb 2009 18:18:25 +0000 Subject: [PATCH 25/48] Removing extra margin after .section .notice .author. --- theme/base/css/display.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 638b095207..60eaa8f22f 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -1078,6 +1078,10 @@ border-top:0; .section .notice:first-child { padding-top:0; } + +.section .notice .author { +margin-right:0; +} .section .notice .author .fn { display:none; } From df41b1307f9a2690115e246e584d6a398d4f9730 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 4 Feb 2009 11:55:22 -0800 Subject: [PATCH 26/48] Removed erroneous comments referring to old common_notice_form() func --- actions/login.php | 1 - actions/newnotice.php | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/actions/login.php b/actions/login.php index 11cf1f02a6..6c6567b7ba 100644 --- a/actions/login.php +++ b/actions/login.php @@ -96,7 +96,6 @@ class LoginAction extends Action { // XXX: login throttle - // CSRF protection - token set in common_notice_form() $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { $this->clientError(_('There was a problem with your session token. '. diff --git a/actions/newnotice.php b/actions/newnotice.php index 61f0f83650..5e7691f33d 100644 --- a/actions/newnotice.php +++ b/actions/newnotice.php @@ -90,7 +90,7 @@ class NewnoticeAction extends Action $this->clientError(_('Not logged in.')); } else if ($_SERVER['REQUEST_METHOD'] == 'POST') { - // CSRF protection - token set in common_notice_form() + // CSRF protection $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { $this->clientError(_('There was a problem with your session token. '. From 2bd52059dbcc2ece561daba73963c66d410ad89e Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 4 Feb 2009 15:38:26 -0500 Subject: [PATCH 27/48] take out redundant code from login --- actions/login.php | 34 +++++++--------------------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/actions/login.php b/actions/login.php index 11cf1f02a6..98cc8a855f 100644 --- a/actions/login.php +++ b/actions/login.php @@ -96,7 +96,7 @@ class LoginAction extends Action { // XXX: login throttle - // CSRF protection - token set in common_notice_form() + // CSRF protection - token set in NoticeForm $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { $this->clientError(_('There was a problem with your session token. '. @@ -106,35 +106,14 @@ class LoginAction extends Action $nickname = common_canonical_nickname($this->trimmed('nickname')); $password = $this->arg('password'); - if (common_check_user($nickname, $password)) { - // success! - if (!common_set_user($nickname)) { - $this->serverError(_('Error setting user.')); - return; - } - common_real_login(true); - if ($this->boolean('rememberme')) { - common_debug('Adding rememberme cookie for ' . $nickname); - common_rememberme(); - } - // success! - $url = common_get_returnto(); - if ($url) { - // We don't have to return to it again - common_set_returnto(null); - } else { - $url = common_local_url('all', - array('nickname' => - $nickname)); - } - common_redirect($url); - } else { + + if (!common_check_user($nickname, $password)) { $this->showForm(_('Incorrect username or password.')); return; } // success! - if (!common_set_user($user)) { + if (!common_set_user($nickname)) { $this->serverError(_('Error setting user.')); return; } @@ -142,11 +121,11 @@ class LoginAction extends Action common_real_login(true); if ($this->boolean('rememberme')) { - common_debug('Adding rememberme cookie for ' . $nickname); common_rememberme($user); } - // success! + $url = common_get_returnto(); + if ($url) { // We don't have to return to it again common_set_returnto(null); @@ -155,6 +134,7 @@ class LoginAction extends Action array('nickname' => $nickname)); } + common_redirect($url); } From 68152dcf3acca51b85fc80e5549718c8123f943c Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 4 Feb 2009 22:33:50 +0000 Subject: [PATCH 28/48] Facebook app - reorganized some stuff; better HTML output --- actions/facebookhome.php | 5 ----- lib/facebookaction.php | 20 ++++---------------- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/actions/facebookhome.php b/actions/facebookhome.php index d943104c2b..5946e6c984 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 f42427540a..b6481011f9 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'); } From e5b075b912e1fb416e73988547e2ece8f89e6453 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Thu, 5 Feb 2009 04:54:42 +0000 Subject: [PATCH 29/48] 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(-) diff --git a/actions/facebookinvite.php b/actions/facebookinvite.php index b7224783a7..3c872f94bf 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 b6481011f9..d369cc3859 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 af188ad7a1..163b41fb4c 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; } From 7bc764fdc0b2bfc2f74df1174f9369c98bc9605b Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Thu, 5 Feb 2009 07:07:36 +0000 Subject: [PATCH 30/48] Facebook profile box CSS and a link back to the app page. --- lib/facebookaction.php | 140 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 127 insertions(+), 13 deletions(-) diff --git a/lib/facebookaction.php b/lib/facebookaction.php index d369cc3859..043a078cd5 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'); + } + +} From 61b17b4c023776386e077f0abac6a7dfb4f0b353 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 5 Feb 2009 07:10:11 +0000 Subject: [PATCH 31/48] Facebook app: don't add FBJS event listeners to notice input box if it's not on the page --- js/facebookapp.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/js/facebookapp.js b/js/facebookapp.js index 8ef9aa532b..f0696c19e9 100644 --- a/js/facebookapp.js +++ b/js/facebookapp.js @@ -19,10 +19,12 @@ var max = 140; var noticeBox = document.getElementById('notice_data-text'); -noticeBox.addEventListener('keyup', keypress); -noticeBox.addEventListener('keydown', keypress); -noticeBox.addEventListener('keypress', keypress); -noticeBox.addEventListener('change', keypress); +if (noticeBox) { + noticeBox.addEventListener('keyup', keypress); + noticeBox.addEventListener('keydown', keypress); + noticeBox.addEventListener('keypress', keypress); + noticeBox.addEventListener('change', keypress); +} // Do our the countdown function keypress(evt) { From 7ad3ff4a2cd494ef8c1cc293e15c0a70b8786fee Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 5 Feb 2009 11:46:17 -0500 Subject: [PATCH 32/48] 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(-) diff --git a/actions/finishopenidlogin.php b/actions/finishopenidlogin.php index 880a9505b4..bc91511207 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 7a267a2bdc..1a4372d73e 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 b1c061c18f..a6a1b11b9f 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 dfe1f114b2..53c807c6f9 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 { From 68a3139d0b86a2a716b24a481e677aa5d4699396 Mon Sep 17 00:00:00 2001 From: Adrian Lang Date: Mon, 2 Feb 2009 01:43:41 +0100 Subject: [PATCH 33/48] =?UTF-8?q?Fix=20#81:=20Profile=20and=20personal=20s?= =?UTF-8?q?hows=20=E2=80=9Eyou=E2=80=9C=20instead=20of=20username=20when?= =?UTF-8?q?=20looking=20at=20own=20profile=20/=20personal.=20While=20doing?= =?UTF-8?q?=20so=20I=20fixed=20a=20wrong=20gettext=20usage=20were=20the=20?= =?UTF-8?q?result=20was=20not=20sprintf'd,=20but=20concat'd.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- actions/all.php | 11 +++++++++++ actions/showstream.php | 7 ++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/actions/all.php b/actions/all.php index 428466f243..b03ad7ec36 100644 --- a/actions/all.php +++ b/actions/all.php @@ -101,4 +101,15 @@ class AllAction extends Action $this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE, $this->page, 'all', array('nickname' => $this->user->nickname)); } + + function showPageTitle() + { + $user =& common_current_user(); + if ($user && ($user->id == $this->user->id)) { + $this->element('h1', NULL, _("You and friends")); + } else { + $this->element('h1', NULL, sprintf(_('%s and friends'), $this->user->nickname)); + } + } + } diff --git a/actions/showstream.php b/actions/showstream.php index 90ffcacf9a..4b16799697 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -140,7 +140,12 @@ class ShowstreamAction extends Action function showPageTitle() { - $this->element('h1', NULL, $this->profile->nickname._("'s profile")); + $user =& common_current_user(); + if ($user && ($user->id == $this->profile->id)) { + $this->element('h1', NULL, _("Your profile")); + } else { + $this->element('h1', NULL, sprintf(_('%s\'s profile'), $this->profile->nickname)); + } } function showPageNoticeBlock() From 9febe8ce394d8428355ac73f1c0f6a9555252bd2 Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Thu, 5 Feb 2009 18:10:47 +0000 Subject: [PATCH 34/48] trac #1142 fix tag rss --- actions/tagrss.php | 16 +++++++--------- lib/util.php | 2 ++ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/actions/tagrss.php b/actions/tagrss.php index b4c2dcdff7..a77fa12c98 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 579f964aca..cbff35a9d6 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': From 02eecb4f07fd4bede01bf81b441e04e68b6091ec Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Thu, 5 Feb 2009 21:26:06 +0000 Subject: [PATCH 35/48] Minor markup consistency --- actions/noticesearch.php | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/actions/noticesearch.php b/actions/noticesearch.php index a0d723b123..630fb88574 100644 --- a/actions/noticesearch.php +++ b/actions/noticesearch.php @@ -154,7 +154,8 @@ class NoticesearchAction extends SearchAction $this->elementStart('div', 'entry-title'); $this->elementStart('span', 'vcard author'); $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); - $this->elementStart('a', array('href' => $profile->profileurl)); + $this->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), 'class' => 'avatar photo', 'width' => AVATAR_STREAM_SIZE, @@ -223,15 +224,6 @@ class NoticesearchAction extends SearchAction $this->elementEnd('a'); $this->elementEnd('dd'); $this->elementEnd('dl'); - - $this->elementStart('a', - array('href' => common_local_url('newnotice', - array('replyto' => $profile->nickname)), - 'onclick' => 'doreply("'.$profile->nickname.'"); return false', - 'title' => _('reply'), - 'class' => 'replybutton')); - $this->hidden('posttoken', common_session_token()); - $this->elementEnd('a'); $this->elementEnd('div'); $this->elementEnd('li'); } From 99d520b351cdcfd93901732228d3be3d9e0a442b Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 5 Feb 2009 16:32:58 -0500 Subject: [PATCH 36/48] 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(-) diff --git a/actions/avatarsettings.php b/actions/avatarsettings.php index 0f8122c075..5c702ecc0a 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 473303373f..7cf198dc73 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 74c3d14f03..fa0581dd05 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 From 444c7944809544928e05bd71479f6551acc98fc4 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 5 Feb 2009 16:34:38 -0500 Subject: [PATCH 37/48] Don't show stretchy-box on avatar if not cropping --- actions/avatarsettings.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/actions/avatarsettings.php b/actions/avatarsettings.php index 5c702ecc0a..3f50ca24cd 100644 --- a/actions/avatarsettings.php +++ b/actions/avatarsettings.php @@ -373,12 +373,14 @@ class AvatarsettingsAction extends AccountSettingsAction { parent::showScripts(); - $jcropPack = common_path('js/jcrop/jquery.Jcrop.pack.js'); - $jcropGo = common_path('js/jcrop/jquery.Jcrop.go.js'); + if ($this->mode == 'crop') { + $jcropPack = common_path('js/jcrop/jquery.Jcrop.pack.js'); + $jcropGo = common_path('js/jcrop/jquery.Jcrop.go.js'); - $this->element('script', array('type' => 'text/javascript', - 'src' => $jcropPack)); - $this->element('script', array('type' => 'text/javascript', - 'src' => $jcropGo)); + $this->element('script', array('type' => 'text/javascript', + 'src' => $jcropPack)); + $this->element('script', array('type' => 'text/javascript', + 'src' => $jcropGo)); + } } } From 8c8feb59b57ccf78589b9ab8a64f6195d226a568 Mon Sep 17 00:00:00 2001 From: CiaranG Date: Thu, 5 Feb 2009 22:15:45 +0000 Subject: [PATCH 38/48] PostgreSQL - database creation script updated to cover 0.7.x features --- db/laconica_pg.sql | 57 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/db/laconica_pg.sql b/db/laconica_pg.sql index c3efd9daa7..9882d091a5 100644 --- a/db/laconica_pg.sql +++ b/db/laconica_pg.sql @@ -50,7 +50,7 @@ create table "user" ( emailnotifyfav integer default 1 /* comment 'Notify by email of favorites' */, emailnotifynudge integer default 1 /* comment 'Notify by email of nudges' */, emailnotifymsg integer default 1 /* comment 'Notify by email of direct messages' */, -emailmicroid integer default 1 /* comment 'whether to publish email microid' */, + emailmicroid integer default 1 /* comment 'whether to publish email microid' */, language varchar(50) /* comment 'preferred language' */, timezone varchar(50) /* comment 'timezone' */, emailpost integer default 1 /* comment 'Post by email' */, @@ -146,7 +146,6 @@ create table fave ( notice_id integer not null /* comment 'notice that is the favorite' */ references notice (id), user_id integer not null /* comment 'user who likes this notice' */ references "user" (id) , modified timestamp not null /* comment 'date this record was modified' */, - primary key (notice_id, user_id) ); @@ -288,6 +287,7 @@ create table foreign_link ( credentials varchar(255) /* comment 'authc credentials, typically a password' */, noticesync int not null default 1 /* comment 'notice synchronisation, bit 1 = sync outgoing, bit 2 = sync incoming, bit 3 = filter local replies' */, friendsync int not null default 2 /* comment 'friend synchronisation, bit 1 = sync outgoing, bit 2 = sync incoming */, + profilesync int not null default 1 /* comment 'profile synchronization, bit 1 = sync outgoing, bit 2 = sync incoming' */, created timestamp not null /* comment 'date this record was created' */, modified timestamp not null /* comment 'date this record was modified' */, @@ -367,6 +367,59 @@ create table profile_block ( ); +create table user_group ( + + id serial primary key /* comment 'unique identifier' */, + + nickname varchar(64) unique /* comment 'nickname for addressing' */, + fullname varchar(255) /* comment 'display name' */, + homepage varchar(255) /* comment 'URL, cached so we dont regenerate' */, + description varchar(140) /* comment 'descriptive biography' */, + location varchar(255) /* comment 'related physical location, if any' */, + + original_logo varchar(255) /* comment 'original size logo' */, + homepage_logo varchar(255) /* comment 'homepage (profile) size logo' */, + stream_logo varchar(255) /* comment 'stream-sized logo' */, + mini_logo varchar(255) /* comment 'mini logo' */, + + created timestamp not null /* comment 'date this record was created' */, + modified timestamp /* comment 'date this record was modified' */ + +); +create index user_group_nickname_idx on user_group using btree(nickname); + +create table group_member ( + + group_id integer not null /* comment 'foreign key to user_group' */ references user_group (id), + profile_id integer not null /* comment 'foreign key to profile table' */ references profile (id), + is_admin integer default 0 /* comment 'is this user an admin?' */, + + created timestamp not null /* comment 'date this record was created' */, + modified timestamp /* comment 'date this record was modified' */, + + primary key (group_id, profile_id) +); + +create table related_group ( + + group_id integer not null /* comment 'foreign key to user_group' */ references user_group (id) , + related_group_id integer not null /* comment 'foreign key to user_group' */ references user_group (id), + + created timestamp not null /* comment 'date this record was created' */, + + primary key (group_id, related_group_id) + +); + +create table group_inbox ( + group_id integer not null /* comment 'group receiving the message' references user_group (id) */, + notice_id integer not null /* comment 'notice received' references notice (id) */, + created timestamp not null /* comment 'date the notice was created' */, + + primary key (group_id, notice_id) +); +create index group_inbox_created_idx on group_inbox using btree(created); + /* Textsearch stuff */ create index textsearch_idx on profile using gist(textsearch); From ab82978b2d67545a9cd7bfc80837798212cff31b Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 5 Feb 2009 16:16:10 -0800 Subject: [PATCH 39/48] 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(-) diff --git a/actions/all.php b/actions/all.php index b03ad7ec36..d75d1b9461 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 d4b8e50e5e..fc4a74eac9 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 4155b3a234..fd5ff413cb 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 630fb88574..c0c2381209 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 cfdc99bb37..cc6537f74f 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 9ec373a96b..7eff74a669 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 bb68f8d94f..31479e1a78 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 468990e7ba..7bc68fbc64 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 4b16799697..224bbce9fb 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 803026e624..4401f892a9 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 8d5d44e49d..e8323dc289 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 900df0257f..e46350c630 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()); } } From d51be320caf9371d3b45b231e7c6de61c67d9068 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 5 Feb 2009 16:21:23 -0800 Subject: [PATCH 40/48] Removed debugging statements I accidentally left in deletenotice.php --- actions/deletenotice.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/actions/deletenotice.php b/actions/deletenotice.php index fc4a74eac9..d4b8e50e5e 100644 --- a/actions/deletenotice.php +++ b/actions/deletenotice.php @@ -134,10 +134,6 @@ 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 { From ac23321a4039eeffe2d7fedf2a45504b97b49b70 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Fri, 6 Feb 2009 06:27:04 +0000 Subject: [PATCH 41/48] Added primary and secondary form actions. Fixed markup for form_notice_delete --- actions/deletenotice.php | 15 ++++++++------- theme/base/css/display.css | 13 ++++++++++--- theme/default/css/display.css | 6 +++++- theme/identica/css/display.css | 6 +++++- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/actions/deletenotice.php b/actions/deletenotice.php index d4b8e50e5e..16e2df8899 100644 --- a/actions/deletenotice.php +++ b/actions/deletenotice.php @@ -103,17 +103,18 @@ class DeletenoticeAction extends DeleteAction function showContent() { - $this->elementStart('form', array('id' => 'notice_delete_form', + $this->elementStart('form', array('id' => 'form_notice_delete', + 'class' => 'form_settings', 'method' => 'post', 'action' => common_local_url('deletenotice'))); + $this->elementStart('fieldset'); + $this->element('legend', null, _('Delete notice')); $this->hidden('token', common_session_token()); $this->hidden('notice', $this->trimmed('notice')); - $this->elementStart('p'); - $this->element('span', array('id' => 'confirmation_text'), - _('Are you sure you want to delete this notice?')); - $this->submit('yes', _('Yes')); - $this->submit('no', _('No')); - $this->elementEnd('p'); + $this->element('p', null, _('Are you sure you want to delete this notice?')); + $this->submit('form_action-yes', _('Yes'), 'submit form_action-primary', 'yes'); + $this->submit('form_action-no', _('No'), 'submit form_action-secondary', 'no'); + $this->elementEnd('fieldset'); $this->elementEnd('form'); } diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 60eaa8f22f..f6e3c0fc77 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -152,7 +152,8 @@ font-weight:bold; #form_remote_subscribe legend, #form_openid_login legend, #form_search legend, -#form_invite legend { +#form_invite legend, +#form_notice_delete legend { display:none; } @@ -179,6 +180,7 @@ float:left; width:90%; } + #form_login p.form_guide, #form_register #settings_rememberme p.form_guide, #form_openid_login #settings_rememberme p.form_guide, @@ -194,12 +196,16 @@ border-radius:4px; padding:0 7px; } + +.form_settings input.form_action-secondary { +margin-left:29px; +padding:0; +} + #form_search .submit { margin-left:11px; } - - address { float:left; margin-bottom:18px; @@ -1169,3 +1175,4 @@ clear:both; margin-bottom:0; } + diff --git a/theme/default/css/display.css b/theme/default/css/display.css index da1ba67173..854202956a 100644 --- a/theme/default/css/display.css +++ b/theme/default/css/display.css @@ -34,6 +34,9 @@ border-color:#aaa; border-color:#97BFD1; } +.form_settings input.form_action-secondary { +background:none; +} input.submit, #form_notice.warning #notice_text-count, @@ -59,7 +62,8 @@ div.notice-options input, .form_user_unblock input.submit, .entity_send-a-message a, .form_user_nudge input.submit, -.entity_nudge p { +.entity_nudge p, +.form_settings input.form_action-secondary { color:#002E6E; } diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css index 6fcd730a90..9f64990138 100644 --- a/theme/identica/css/display.css +++ b/theme/identica/css/display.css @@ -34,6 +34,9 @@ border-color:#aaa; border-color:#ddd; } +.form_settings input.form_action-secondary { +background:none; +} input.submit, #form_notice.warning #notice_text-count, @@ -59,7 +62,8 @@ div.notice-options input, .form_user_unblock input.submit, .entity_send-a-message a, .form_user_nudge input.submit, -.entity_nudge p { +.entity_nudge p, +.form_settings input.form_action-secondary { color:#002E6E; } From 343cd6f20577c44487eae4e90ec10bfd954980e3 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 6 Feb 2009 03:13:08 -0500 Subject: [PATCH 42/48] 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(-) diff --git a/actions/avatarbynickname.php b/actions/avatarbynickname.php index 9bbdecefac..ca58c96537 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 3f50ca24cd..a0be5d8f88 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 7cf198dc73..650c952556 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 c0c2381209..a5f01350c4 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 224bbce9fb..28bb8453f8 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 cbace5b6b5..3e8a12fd69 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 b3bf67dc3f..2d41469bba 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 6a9ea76865..6248a84d3b 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 5be632f87c..f3bfe299cf 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 340d7f67a7..d152f9d567 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 fa0581dd05..db344db8f8 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 f1be577681..f41d984d62 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 e8323dc289..d77234549a 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 3ef6691afa..9fc0126b3e 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 aa8e032298..97b5175296 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 6e14c0b692..4d924b039e 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 81cd7aed55..0d466bba81 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 3642ae164a..8ed290e03a 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 2bd7f1f19d..131e8ac65a 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 da8b8b1e5b..a4d183fcd0 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 5275ad6b6e..0655ebf276 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 3a4f8315d3..40f60da5d8 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"; From fc094e0cf432c223676755f14f54d3a2f559c25e Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 6 Feb 2009 03:54:51 -0500 Subject: [PATCH 43/48] fix formatting of new Avatar:: calls --- actions/avatarsettings.php | 6 +++--- actions/grouplogo.php | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/actions/avatarsettings.php b/actions/avatarsettings.php index a0be5d8f88..7dd53f6eb5 100644 --- a/actions/avatarsettings.php +++ b/actions/avatarsettings.php @@ -282,9 +282,9 @@ class AvatarsettingsAction extends AccountSettingsAction $cur = common_current_user(); $filename = Avatar::filename($cur->id, - image_type_to_extension($imagefile->type), - null, - 'tmp'.common_timestamp()); + image_type_to_extension($imagefile->type), + null, + 'tmp'.common_timestamp()); $filepath = Avatar::path($filename); diff --git a/actions/grouplogo.php b/actions/grouplogo.php index 650c952556..499db4ae8d 100644 --- a/actions/grouplogo.php +++ b/actions/grouplogo.php @@ -344,9 +344,9 @@ class GrouplogoAction extends Action } $filename = Avatar::filename($this->group->id, - image_type_to_extension($imagefile->type), - null, - 'group-temp-'.common_timestamp()); + image_type_to_extension($imagefile->type), + null, + 'group-temp-'.common_timestamp()); $filepath = Avatar::path($filename); From 5cdead72cdee1261e506cdc89dd81242bfb9ba84 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 6 Feb 2009 04:03:03 -0500 Subject: [PATCH 44/48] Fix name of default avatar --- classes/Avatar.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/Avatar.php b/classes/Avatar.php index 6248a84d3b..db9d78e47f 100644 --- a/classes/Avatar.php +++ b/classes/Avatar.php @@ -73,7 +73,7 @@ class Avatar extends Memcached_DataObject } } - static function defaultAvatar($size) + static function defaultImage($size) { static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile', AVATAR_STREAM_SIZE => 'stream', From 8ec312043f8f4026d560e2cd0805200cb6c0f31a Mon Sep 17 00:00:00 2001 From: Meitar Moscovitz Date: Sat, 7 Feb 2009 04:03:25 +1100 Subject: [PATCH 45/48] Add a link to the group search page from a user's own group list. I've seen a request or two pop up for this on the Laconica group on Identica, and I'd personally like there to be a link to the search page from my own groups listing, as I often find myself looking for one and end up at my browser's address bar. --- actions/usergroups.php | 6 ++++++ theme/base/css/display.css | 2 +- theme/default/css/display.css | 5 ++++- theme/identica/css/display.css | 5 ++++- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/actions/usergroups.php b/actions/usergroups.php index 58cf7eeb60..ded4ba76b1 100644 --- a/actions/usergroups.php +++ b/actions/usergroups.php @@ -125,6 +125,12 @@ class UsergroupsAction extends Action _('Create a new group')); $this->elementEnd('p'); + $this->elementStart('p', array('id' => 'group_search')); + $this->element('a', array('href' => common_local_url('groupsearch'), + 'class' => 'more'), + _('Search for more groups')); + $this->elementEnd('p'); + $offset = ($this->page-1) * GROUPS_PER_PAGE; $limit = GROUPS_PER_PAGE + 1; diff --git a/theme/base/css/display.css b/theme/base/css/display.css index f6e3c0fc77..3b72d00cee 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -947,7 +947,7 @@ padding:0; -#new_group { +#new_group, #group_search { margin-bottom:18px; } #new_group a { diff --git a/theme/default/css/display.css b/theme/default/css/display.css index 854202956a..85b5aa13e5 100644 --- a/theme/default/css/display.css +++ b/theme/default/css/display.css @@ -238,7 +238,10 @@ background-color:#fcfcfc; #new_group a { background:transparent url(../images/icons/twotone/green/news.gif) no-repeat 0 45%; } - +#usergroups #new_group { +float: left; +margin-right: 2em; +} .pagination .nav_prev a, .pagination .nav_next a { diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css index 9f64990138..576a2e14be 100644 --- a/theme/identica/css/display.css +++ b/theme/identica/css/display.css @@ -238,7 +238,10 @@ background-color:#fcfcfc; #new_group a { background:transparent url(../images/icons/twotone/green/news.gif) no-repeat 0 45%; } - +#usergroups #new_group { +float: left; +margin-right: 2em; +} .pagination .nav_prev a, .pagination .nav_next a { From 26053c186850a202d560c241ddc4e84106c46874 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 6 Feb 2009 15:22:48 -0500 Subject: [PATCH 46/48] Make adding and removing an incoming email in SMS settings Fixes Bug#1036. --- actions/smssettings.php | 51 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/actions/smssettings.php b/actions/smssettings.php index f89cbe1ab9..a5f75d266c 100644 --- a/actions/smssettings.php +++ b/actions/smssettings.php @@ -490,4 +490,55 @@ class SmssettingsAction extends ConnectSettingsAction common_redirect(common_local_url('confirmaddress', array('code' => $code))); } + + /** + * Handle a request to remove an incoming email address + * + * @return void + */ + + function removeIncoming() + { + $user = common_current_user(); + + if (!$user->incomingemail) { + $this->showForm(_('No incoming email address.')); + return; + } + + $orig = clone($user); + + $user->incomingemail = null; + + if (!$user->updateKeys($orig)) { + common_log_db_error($user, 'UPDATE', __FILE__); + $this->serverError(_("Couldn't update user record.")); + } + + $this->showForm(_('Incoming email address removed.'), true); + } + + /** + * Generate a new incoming email address + * + * @return void + * + * @see Emailsettings::newIncoming + */ + + function newIncoming() + { + $user = common_current_user(); + + $orig = clone($user); + + $user->incomingemail = mail_new_incoming_address(); + + if (!$user->updateKeys($orig)) { + common_log_db_error($user, 'UPDATE', __FILE__); + $this->serverError(_("Couldn't update user record.")); + } + + $this->showForm(_('New incoming email address added.'), true); + } } From 60f737dc1eb2f126bae28ce095bc2d17a22bd7d9 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 6 Feb 2009 15:35:29 -0500 Subject: [PATCH 47/48] Update README and version number README and version number. --- README | 38 +++++++++++++++++++++++++++++--------- lib/common.php | 2 +- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/README b/README index f3aa0d9de1..989fcb7f0a 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 482800876d..5b4e3c40c8 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); From 08db50b24eaf9e6e5f651448c394f1f50dd2409b Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Fri, 6 Feb 2009 21:17:45 -0800 Subject: [PATCH 48/48] "Change your email address..." msg was printing out \n instead of a newline --- lib/mail.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mail.php b/lib/mail.php index b424d579fe..a1faefc806 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,