From 4d0f0f9a9413ae7826c8eb1573eb4e5873c0ed3a Mon Sep 17 00:00:00 2001 From: Friendika Date: Wed, 8 Dec 2010 15:30:26 -0800 Subject: [PATCH 1/3] more instrumentation on dfrn_confirm to help track down why it quietly gives up on occasion with no helpful log messages. --- mod/dfrn_confirm.php | 178 ++++++++++++++++++++++++++++--------------- 1 file changed, 116 insertions(+), 62 deletions(-) diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php index 950d589f3..7018bf52b 100644 --- a/mod/dfrn_confirm.php +++ b/mod/dfrn_confirm.php @@ -1,14 +1,28 @@ interactive = false; // notice() becomes a no-op since nobody is there to see it @@ -19,10 +33,17 @@ function dfrn_confirm_post(&$a,$handsfree = null) { $node = $a->argv[1]; } - // Main entry point. Our user received a friend request notification (perhaps - // from another site) and clicked 'Approve'. $POST['source_url'] is not set. - // OR we have been called directly from dfrn_request ($handsfree != null) due to - // this being a page type which supports automatic friend acceptance. + /** + * + * Main entry point. Scenario 1. Our user received a friend request notification (perhaps + * from another site) and clicked 'Approve'. + * $POST['source_url'] is not set. If it is, it indicates Scenario 2. + * + * We may also have been called directly from dfrn_request ($handsfree != null) due to + * this being a page type which supports automatic friend acceptance. That is also Scenario 1 + * since we are operating on behalf of our registered user to approve a friendship. + * + */ if(! x($_POST,'source_url')) { @@ -43,35 +64,53 @@ function dfrn_confirm_post(&$a,$handsfree = null) { } - // These come from either the friend request notification form or $handsfree array. + // These data elements may come from either the friend request notification form or $handsfree array. if(is_array($handsfree)) { - $dfrn_id = $handsfree['dfrn_id']; - $intro_id = $handsfree['intro_id']; - $duplex = $handsfree['duplex']; logger('dfrn_confirm: Confirm in handsfree mode'); + $dfrn_id = $handsfree['dfrn_id']; + $intro_id = $handsfree['intro_id']; + $duplex = $handsfree['duplex']; } else { - $dfrn_id = ((x($_POST,'dfrn_id')) ? notags(trim($_POST['dfrn_id'])) : ""); - $intro_id = intval($_POST['intro_id']); - $duplex = intval($_POST['duplex']); - $cid = intval($_POST['contact_id']); + $dfrn_id = ((x($_POST,'dfrn_id')) ? notags(trim($_POST['dfrn_id'])) : ""); + $intro_id = ((x($_POST,'intro_id')) ? intval($_POST['intro_id']) : 0 ); + $duplex = ((x($_POST,'duplex')) ? intval($_POST['duplex']) : 0 ); + $cid = ((x($_POST,'contact_id')) ? intval($_POST['contact_id']) : 0 ); } + /** + * + * Ensure that dfrn_id has precedence when we go to find the contact record. + * We only want to search based on contact id if there is no dfrn_id, + * e.g. for OStatus network followers. + * + */ + + if(strlen($dfrn_id)) + $cid = 0; + logger('dfrn_confirm: Confirming request for dfrn_id (issued) ' . $dfrn_id); + if($cid) + logger('dfrn_confirm: Confirming follower with contact_id: ' . $cid); - // The other person will have been issued an ID when they first requested friendship. - // Locate their record. At this time, their record will have both pending and blocked set to 1. - // There won't be any dfrn_id if this is a network follower, so use the contact_id instead. + /** + * + * The other person will have been issued an ID when they first requested friendship. + * Locate their record. At this time, their record will have both pending and blocked set to 1. + * There won't be any dfrn_id if this is a network follower, so use the contact_id instead. + * + */ $r = q("SELECT * FROM `contact` WHERE ( ( `issued-id` != '' AND `issued-id` = '%s' ) OR ( `id` = %d AND `id` != 0 ) ) AND `uid` = %d LIMIT 1", - dbesc($dfrn_id), - intval($cid), - intval($uid) + dbesc($dfrn_id), + intval($cid), + intval($uid) ); if(! count($r)) { + logger('dfrn_confirm: Contact not found in DB.'); notice( t('Contact not found.') . EOL ); return; } @@ -88,11 +127,15 @@ function dfrn_confirm_post(&$a,$handsfree = null) { if($network === 'dfrn') { - // Generate a key pair for all further communications with this person. - // We have a keypair for every contact, and a site key for unknown people. - // This provides a means to carry on relationships with other people if - // any single key is compromised. It is a robust key. We're much more - // worried about key leakage than anybody cracking it. + /** + * + * Generate a key pair for all further communications with this person. + * We have a keypair for every contact, and a site key for unknown people. + * This provides a means to carry on relationships with other people if + * any single key is compromised. It is a robust key. We're much more + * worried about key leakage than anybody cracking it. + * + */ $res = openssl_pkey_new(array( 'digest_alg' => 'sha1', @@ -100,7 +143,6 @@ function dfrn_confirm_post(&$a,$handsfree = null) { 'encrypt_key' => false ) ); - $private_key = ''; openssl_pkey_export($res, $private_key); @@ -118,16 +160,20 @@ function dfrn_confirm_post(&$a,$handsfree = null) { $params = array(); - // Per the protocol document, we will verify both ends by encrypting the dfrn_id with our - // site private key (person on the other end can decrypt it with our site public key). - // Then encrypt our profile URL with the other person's site public key. They can decrypt - // it with their site private key. If the decryption on the other end fails for either - // item, it indicates tampering or key failure on at least one site and we will not be - // able to provide a secure communication pathway. - - // If other site is willing to accept full encryption, (aes_allow is 1 AND we have php5.3 - // or later) then we encrypt the personal public key we send them using AES-256-CBC and a - // random key which is encrypted with their site public key. + /** + * + * Per the DFRN protocol, we will verify both ends by encrypting the dfrn_id with our + * site private key (person on the other end can decrypt it with our site public key). + * Then encrypt our profile URL with the other person's site public key. They can decrypt + * it with their site private key. If the decryption on the other end fails for either + * item, it indicates tampering or key failure on at least one site and we will not be + * able to provide a secure communication pathway. + * + * If other site is willing to accept full encryption, (aes_allow is 1 AND we have php5.3 + * or later) then we encrypt the personal public key we send them using AES-256-CBC and a + * random key which is encrypted with their site public key. + * + */ $src_aes_key = random_string(); @@ -153,7 +199,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) { if($duplex == 1) $params['duplex'] = 1; - logger('dfrn_confirm: Confirm: posted data: ' . print_r($params,true), LOGGER_DATA); + logger('dfrn_confirm: Confirm: posting data to ' . $dfrn_confirm . ': ' . print_r($params,true), LOGGER_DATA); // POST all this stuff to the other site. @@ -233,9 +279,16 @@ function dfrn_confirm_post(&$a,$handsfree = null) { return; } - // We have now established a relationship with the other site. - // Let's make our own personal copy of their profile photo so we don't have - // to always load it from their site. + + /* + * + * We have now established a relationship with the other site. + * Let's make our own personal copy of their profile photo so we don't have + * to always load it from their site. + * + * We will also update the contact record with the nature and scope of the relationship. + * + */ require_once("Photo.php"); @@ -276,12 +329,11 @@ function dfrn_confirm_post(&$a,$handsfree = null) { ); } else { + // $network !== 'dfrn' $notify = ''; $poll = ''; - // $network !== 'dfrn' - $arr = lrdd($contact['url']); if(count($arr)) { foreach($arr as $link) { @@ -332,31 +384,33 @@ function dfrn_confirm_post(&$a,$handsfree = null) { if($handsfree === null) goaway($a->get_baseurl() . '/contacts/' . intval($contact_id)); - return; //NOTREACHED - + else + return; + //NOTREACHED } - - - // End of first scenario. [Local confirmation of remote friend request]. - - - - // Begin scenario two. This is the remote response to the above scenario. - // This will take place on the site that originally initiated the friend request. - // In the section above where the confirming party makes a POST and - // retrieves xml status information, they are communicating with the following code. + /** + * + * + * End of Scenario 1. [Local confirmation of remote friend request]. + * + * Begin Scenario 2. This is the remote response to the above scenario. + * This will take place on the site that originally initiated the friend request. + * In the section above where the confirming party makes a POST and + * retrieves xml status information, they are communicating with the following code. + * + */ if(x($_POST,'source_url')) { // We are processing an external confirmation to an introduction created by our user. - $public_key = $_POST['public_key']; - $dfrn_id = hex2bin($_POST['dfrn_id']); - $source_url = hex2bin($_POST['source_url']); - $aes_key = $_POST['aes_key']; - $duplex = $_POST['duplex']; - $version_id = (float) $_POST['dfrn_version']; + $public_key = ((x($_POST,'public_key')) ? $_POST['public_key'] : ''); + $dfrn_id = ((x($_POST,'dfrn_id')) ? hex2bin($_POST['dfrn_id']) : ''); + $source_url = ((x($_POST,'source_url')) ? hex2bin($_POST['source_url']) : ''); + $aes_key = ((x($_POST,'aes_key')) ? $_POST['aes_key'] : ''); + $duplex = ((x($_POST,'duplex')) ? intval($_POST['duplex']) : 0 ); + $version_id = ((x($_POST,'dfrn_version')) ? (float) $_POST['dfrn_version'] : 2.0); logger('dfrn_confirm: requestee contacted: ' . $node); From eb13833d2a81dbe3bc11039061f718846e7f5be9 Mon Sep 17 00:00:00 2001 From: Friendika Date: Wed, 8 Dec 2010 17:05:51 -0800 Subject: [PATCH 2/3] smiley filter --- boot.php | 21 +++++++++++++++++++++ images/smiley-cool.gif | Bin 0 -> 354 bytes images/smiley-cry.gif | Bin 0 -> 329 bytes images/smiley-embarassed.gif | Bin 0 -> 331 bytes images/smiley-foot-in-mouth.gif | Bin 0 -> 344 bytes images/smiley-frown.gif | Bin 0 -> 340 bytes images/smiley-innocent.gif | Bin 0 -> 336 bytes images/smiley-kiss.gif | Bin 0 -> 338 bytes images/smiley-laughing.gif | Bin 0 -> 344 bytes images/smiley-money-mouth.gif | Bin 0 -> 321 bytes images/smiley-sealed.gif | Bin 0 -> 325 bytes images/smiley-smile.gif | Bin 0 -> 345 bytes images/smiley-surprised.gif | Bin 0 -> 342 bytes images/smiley-tongue-out.gif | Bin 0 -> 328 bytes images/smiley-undecided.gif | Bin 0 -> 337 bytes images/smiley-wink.gif | Bin 0 -> 351 bytes images/smiley-yell.gif | Bin 0 -> 336 bytes mod/display.php | 2 +- mod/network.php | 2 +- mod/profile.php | 2 +- 20 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 images/smiley-cool.gif create mode 100644 images/smiley-cry.gif create mode 100644 images/smiley-embarassed.gif create mode 100644 images/smiley-foot-in-mouth.gif create mode 100644 images/smiley-frown.gif create mode 100644 images/smiley-innocent.gif create mode 100644 images/smiley-kiss.gif create mode 100644 images/smiley-laughing.gif create mode 100644 images/smiley-money-mouth.gif create mode 100644 images/smiley-sealed.gif create mode 100644 images/smiley-smile.gif create mode 100644 images/smiley-surprised.gif create mode 100644 images/smiley-tongue-out.gif create mode 100644 images/smiley-undecided.gif create mode 100644 images/smiley-wink.gif create mode 100644 images/smiley-yell.gif diff --git a/boot.php b/boot.php index 451a622c0..c4bdb1187 100644 --- a/boot.php +++ b/boot.php @@ -1589,4 +1589,25 @@ if(! function_exists('linkify')) { function linkify($s) { $s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'\%]*)/", ' $1', $s); return($s); +}} + +if(! function_exists('smilies')) { +function smilies($s) { + $a = get_app(); + + return str_replace( + array( ':-)', ';-)', ':-(', ':(', ':-P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O'), + array( + ':-)', + ';-)', + ':-(', + ':(', + ':-P', + ':-\', + ':-x', + ':-X', + ':-D', + '8-|', + '8-O' + ), $s); }} \ No newline at end of file diff --git a/images/smiley-cool.gif b/images/smiley-cool.gif new file mode 100644 index 0000000000000000000000000000000000000000..ba90cc36fb0415d0273d1cd206bff63fd9c91fde GIT binary patch literal 354 zcmV-o0iFIwNk%w1VG;lm0Mr!#3ke00dJfFY%i+lrhK7V(RutUQJhPY;?(XfrsZKgL z7WLQ^zPO&zzav{)SL^9nBOw~z(=orMEH5uC-P_gr`uhCnASMa|$-iRw?m_(dUwU8) zq>Kx}s1_F$4FCWDA^8LW0018VEC2ui01^Na000Hw;3tYzX_jM3Qpv$_M?zI9i5=0S zX-{-uv=l3%&P0s%m9Ox_a(m_c|u z01g3U0`Wll5)poVdma=N8y<3f0Sf~hXmTC}2oxMW4FdxUj+z4<0}lrX2nP=qkDRIt z9Ge*(qzMrj3jrIOjvI{`5eWzt3`G_T8yChG8w(a19SkK12@M(+799Zr9n=~PzBCmA z5)BU-)YKUd4H5!D9|!^o9kWIe9SH(WDHRk92}DZ?3})2$P@$55g90f0N)ZA8JID5J Aw*UYD literal 0 HcmV?d00001 diff --git a/images/smiley-cry.gif b/images/smiley-cry.gif new file mode 100644 index 0000000000000000000000000000000000000000..74d897a4f6d22e814e2b054e98b8a75fb464b4be GIT binary patch literal 329 zcmV-P0k-}}Nk%w1VG;lm0Mr-&E)xPSit@9T3%;vR+|V+?t0A(pllJjXrMl7n=_A_a za^B+Su$LjvyC3@TIQZNZa##w=!k(SO^P#bO*w(eU#;{U83XFCU_V)J5wrb+;g2vkN z#>U24qVoOvY5)KLA^8LW0018VEC2ui01^Na000HX;3tY$X_jM3QUfCh%s^o(nF++< zc?Th6v=oL>*by8K!mhvwelUXuuW&&U9iGO3hM@>Njw{l^#0q9mWpcefdI;O$;efnY zkd~@r-o$*74FCWI1%d((4+jDz0va0>69^fI6%`W{8w!gU1pyL>prH>E0R<%k6Aq%H z4ij+^9TEwM5P}eh2@)L<~6+>@EpxfA0YrcPNsSu literal 0 HcmV?d00001 diff --git a/images/smiley-embarassed.gif b/images/smiley-embarassed.gif new file mode 100644 index 0000000000000000000000000000000000000000..963a96b8a7593b1d8bcbab073abe5ee4e539dbf6 GIT binary patch literal 331 zcmV-R0kr-{Nk%w1VG;lm0MrryDh>j~yq&6%75dW~z^P39(NxsGDE{UkxtkIEq(S-a zRKlwv+S=Lr?>hbYY~sQ?c3T&ZcN_Nh_EU3s(>Io6B&>WW`@bsw**)Ocy1bht z{*G6|uwwqUQ2+n{A^8LW0018VEC2ui01^Na000HZ;3tYwX_jM3YQ!c88=*-m*&&bO zILd=`w3KAC;8hxpif*w9ek6oqV-Z0L77fROK$BSR@5BAv-%C>6y>>#+D4e#&nz^qMDItlpp zTG728+|V&?R13PIEBW(C`uh6d*t-1sZ^XQv;oDD}iYLOV7uVO;{`xl4#4tJ{0;h@! z>)kfFn;iS@Hvj+tA^8LW0018VEC2ui01^Na000Hm;3tYuX_jM3Mo7199TGt*Nf;R= zNmOPKwA8_2Q6MTDP6eT`I1VESVj-zGIG(JdB3U44kcdI@;AAq{Gv^^O%%ltj2GdB) z>vIL;d*~=0a|w1Bf^!cF9R~+vb94;_0}TxWlnMrlj2MuVoSYAreF`3(0|pHS8VLgr zi3bP_qZ;q#>Sw62=mns-On=0wransPVevT^YK{Dy(0YY zH)vE6x0?;Wqb>gZas1^OT0si>`ugD5y87}*#H$s=yq(wA*8cf7{`y+(+9J7|9QfT7 z`ROHiU=Y&6FaQ7mA^8LW0018VEC2ui01^Na000Hi;3tYvX_jM3N`@u~nju9hSuh^r zIEcp-wA7(NL0~2d#RP+(G!CPPA>o*KJjv_CkucCA5=K?AfF#RG2V*8BU@jL304|4P z2;PGRF@bj$et;Jf2pR_mVsIA<85|n}kQ*Bq42Ovqj*yy>6P0=h3X&9Z01yyk~2N4w%7#RW^55W%`0vQ+-6(y_*2pqz~90*;x9}yM}%$UI(7t#$D mK_3Se1{4HKM+6iG7EmeH6$V631{L5n)#CyC0qx-*Apkoyg?w!Q literal 0 HcmV?d00001 diff --git a/images/smiley-innocent.gif b/images/smiley-innocent.gif new file mode 100644 index 0000000000000000000000000000000000000000..334d49e0e60f2997c9ba24071764f95d9e08a5cc GIT binary patch literal 336 zcmV-W0k8f?Nk%w1VG;lm0MrryI4TI-%dP0m5~*+Y`T~ z7Rth){q{I_X%*S48uRZ|(b3V&wIKTX`u+WJzo<^$#wuY;3W|Cf{O29IkTAcaE&lpe z+P*^H)-tknA^-pYA^8LW0018VEC2ui01^Na000He;3tYwX_n)75QgVvNQ`6#5gcMm zEEG~blgXokptKAJgCU?%JT?yos!R6cPtcQWh2siHlNI2L}ifQhgX02^InZ2?-ktkqVRyZJY^Trk|lv zovp437?1~d46O)?2(1i+2NDYk8<+_Kil!K!3njA^!I#dL8x<729}*B65mC=m5gHH@ iDi9P3f*VjB3KS4HDb_qqRul{0DIT=Nk%w1VG;lm0Mrx!QauaC#>Vb6G=_5=^YB^9wrc376Sb5I-qJGf@9vZ# z5WlKU(!eVB+7tfnDXp0zyB`?BZ5IChalob*`uh6d*t+@dKGHcU+L|83yq*5~IoH?L zy`?Gp<{bX|SpWb4A^8LW0018VEC2ui01^Na000Hg;3tYyX_jM3R?Bl7&r(q;SsVx< zNd$5fv{ZsKA$SlL3&KN~a1tZRf*~1Ltkx9~2uL3&z-yb0WJDRY082|tP literal 0 HcmV?d00001 diff --git a/images/smiley-laughing.gif b/images/smiley-laughing.gif new file mode 100644 index 0000000000000000000000000000000000000000..1606c119e75678c4031f384e0d50849906e8f533 GIT binary patch literal 344 zcmV-e0jK^)Nk%w1VG;lm0MruzQauf>s;1-69HWK?p_PpF=Pd8~Ygtcnp*fHAL z**;z>w3iC}`fmL6IkKB1N;3zEa}&zKpsu1;_V)HocR5-{J~BcYvE`YXhBnc@CfU=! za(Ec zG>66zv=rqr;2j)}gKqE$ekcSD?}0=WLB?AWp85)qALd+P=4)6X4oXy{bw2>K^d$ z@6ERvva+(4ib~41YUkTEn1&#?rzrOHT>1I=Y*h`+%*@WtPUPg|!@EEI_d5LgZ>^Og z-qyCjsu$J9F8}}lA^8LW0018VEC2ui01^Na000HT;3tYxX_jM37RWXX8&XUv=@{Oj zX@_Sxw3H&!kzgQ?2LvPOL=>Y5VxieY9+_+eqFEql6OKWXd3Ze8Ggf2Zln@U|mI9d9 zGm^(wVUTA5cYs-V1`2#+a})^z6chrF5`~8k5e6@pmkW`GeGw<069yTQaGnH)s0suV zR|pCd0ZtRCsjM9VB^L+~7X%f*zyuc%2p3=#ycf#L%McYo9|{Z&5D^#_78qL%3{WW( X7Xb)FP6z?UH6ODVz!ev-DIowmgll^P literal 0 HcmV?d00001 diff --git a/images/smiley-smile.gif b/images/smiley-smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..e6a9e60d5ddd1243fbbf2197b4dc6cd9c1b58b93 GIT binary patch literal 345 zcmV-f0jB;(Nk%w1VG;lm0MrlwCJF+^#>SR<4C>Dj%C>6W(lWoQPVevT^YB^Fy&h6M z4YZgH{O~qtR1(Ci8T;lQ`uh6d*t-7xar*K{#Jrulo-Wtd*44u?{`oh#n;gQXGXDEo z_}UVAU=FH^0ssI2A^8LW0018VEC2ui01^Na000Hn;3tYuX_jM3Mn>j&nGr!MNh}v4 zNyxPjwA7*EKx`%q#$Vl9SM>N9ReH-cn1&^4jYXf0KotqjT;UWC94U(4-NtX4#i!%9}pHA2?&dg3>XLr r8Wuqx2Nnhn1xrT-4h9xbDb^GQ8V(K`1{C5o)#U;I0p5-K5CQ-@9%ySnDDC*4*{OcpiwransPVevTQacIr@mkQp zCf(06s)_=>r7UYx48o@u`uh6d*t-7rH~ji<`P&oj;5Wp)o!8ga`SV6TA_BIW5#ZWV z{`*+__>9}pJ}3JDSl85wB_3Jn)Q o9|so(4+|I^92g4^1{Y8%(iR3pP6ig=HPPY$`~mLZA3^{CJDB=?L;wH) literal 0 HcmV?d00001 diff --git a/images/smiley-tongue-out.gif b/images/smiley-tongue-out.gif new file mode 100644 index 0000000000000000000000000000000000000000..2075dc16058f1f17912167675ce5cfb9986fc71d GIT binary patch literal 328 zcmV-O0k{4~Nk%w1VG;lm0Mrx!CJF+^#>SU@3-{U*rx+Q^wrc$ABfqLn@9*x?z8(4X zSW-O=@){bmmI~g|GQXoP);cvj3|f1M8e@{G*!tYaiCEujj1NGxRN#6#tiCETo+{x{Hkzt z5k-kPvcD=V2nbmjCgL6k{uF&2nP-t0s;w<385Nx2oxDb z9T5Pp7qJl?3Kkh9oe2sCr5F$p7zPSlsUH*@54w*83=9Or4;w)r2pcU95(FL|1Th;< aDaRQH4;Tal7#Y$v#?=Au0pHUfApkpvZg^t= literal 0 HcmV?d00001 diff --git a/images/smiley-undecided.gif b/images/smiley-undecided.gif new file mode 100644 index 0000000000000000000000000000000000000000..bef7e257303f8243c89787e7a7f9955dd1f112e2 GIT binary patch literal 337 zcmV-X0j~Z>Nk%w1VG;lm0MroxDi#99#>R?y8~4}{%C>6#>?OadPVevTr-=vi@LATn z4rERY-qJF+n+?CCE&B3D{{3Shh?>WT0o%`b%*Voqm`dL;(4F35y zc485^n;g!+Bme*aA^8LW0018VEC2ui01^Na000Hf;3tYvX_jM3N=AnuogqakNi<9X zK?&0kwA8^tNn{?C$|IAYI1ZzT!2>}iuMddFK#NEkRl!7%6brJAnUs;)XcnA}TNBSP zxQ9;SvEfwYeSaGd2^|LqU~(QF1qBxr3Ii7x84ZVt8wCTKoSYAqc?p`G2onnpk`IOl z1`HLGj}riN2p1K12N4z&8IBDc6tEWs859;JtRB6>lf+xO9}yT19toMv8wnl`7(pKg j7zPv!OGgY81{hE&(iR3pP6ig;HPPS!_yOwPA0Yrc)=Yf3 literal 0 HcmV?d00001 diff --git a/images/smiley-wink.gif b/images/smiley-wink.gif new file mode 100644 index 0000000000000000000000000000000000000000..9faf1aff8f4b28e02f4f414975fe1859c43b6b54 GIT binary patch literal 351 zcmV-l0igazNk%w1VG;lm0MrryC=CL}#>Sn03F^-g-qAA3wransPV?|t@9*x%vmQ`7 z4E*pcw3rOOq%3t@4*K#({N^40{c-yG`rz2Q!KfI-yq*61HrBop*VoqW<}&{JS@_x# zwwfH#!YTdnIsgCwA^8LW0018VEC2ui01^Na000Ht;3tYwX_jM3P6j6koH0o%Sun&A zMF+tYv=pL2IcOdp&qH&dG!P?+ArV0)J)O=Yk}%LD6Go&#@MJn3he8=)%%lWOM*#pN zEDD9iq9J$@90v~;83`GC4i0+{2OJ0pVtacF5E}yn8<`pmkCBv_pqZEtoPY-l0}P>= z3WE6cr`19U7DgF9{F}at6R35*Q5~ x2OgBy9tRx_7(pKh7zPvsOGgA01{hE&-4zBzP6id}HMp@0Krnzkbss_i06S`>cdh^c literal 0 HcmV?d00001 diff --git a/images/smiley-yell.gif b/images/smiley-yell.gif new file mode 100644 index 0000000000000000000000000000000000000000..648e6e879123fe49beebbc1f3635141864a79a9c GIT binary patch literal 336 zcmV-W0k8f?Nk%w1VG;lm0MrryG8O{K#>IbS7WCB_mWF$+hzY-{PWkp(?(Xf;zbH~P z3jOdj?W+^YwrakfE8fyG&5jTBz!3WS`fgM_;MltQ+c}4GO8)(E`S3`@yq&d~5!ct& z)v79NObo)O7XSbNA^8LW0018VEC2ui01^Na000He;3tYwX_jM3QifI(nn6h_*=Wyk zUB{y}v=qYOIUF#R3dZPhAVv~H;(|a2yN_5FH&J0|$eJ3kw4gj1Y?v5d#>LMV12^6BYy$1)ZKA zga!|m2?POz0R)f>4+aPl8KD{gz`+G_9vLMFQU?RU!8uyH9}*i52|cC+7S0YEK_3Vk i1|APfM-Ltb8&4_H83sg61{vHn(cc000qNZzApkp $osparkle, '$thumb' => $profile_avatar, '$title' => $item['title'], - '$body' => bbcode($item['body']), + '$body' => smilies(bbcode($item['body'])), '$ago' => relative_date($item['created']), '$lock' => $lock, '$location' => $location, diff --git a/mod/network.php b/mod/network.php index c52bb74fc..43c55b8e3 100644 --- a/mod/network.php +++ b/mod/network.php @@ -292,7 +292,7 @@ function network_content(&$a, $update = 0) { '$osparkle' => $osparkle, '$sparkle' => $sparkle, '$title' => $item['title'], - '$body' => bbcode($item['body']), + '$body' => smilies(bbcode($item['body'])), '$ago' => relative_date($item['created']), '$lock' => $lock, '$location' => $location, diff --git a/mod/profile.php b/mod/profile.php index d09e0187b..a431f4bdd 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -388,7 +388,7 @@ function profile_content(&$a, $update = 0) { '$thumb' => $profile_avatar, '$sparkle' => $sparkle, '$title' => $item['title'], - '$body' => bbcode($item['body']), + '$body' => smilies(bbcode($item['body'])), '$ago' => relative_date($item['created']), '$lock' => $lock, '$location' => $location, From 03c1e5a5ad764d5cfaa03fffdc9e80222f70088e Mon Sep 17 00:00:00 2001 From: Friendika Date: Wed, 8 Dec 2010 23:08:59 -0800 Subject: [PATCH 3/3] never enough comments --- include/dba.php | 1 - index.php | 115 ++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 101 insertions(+), 15 deletions(-) diff --git a/include/dba.php b/include/dba.php index fd403b560..ae3a4957b 100644 --- a/include/dba.php +++ b/include/dba.php @@ -28,7 +28,6 @@ class dba { } public function q($sql) { - global $debug_text; if(! $this->db ) return false; diff --git a/index.php b/index.php index 4ad5f17e2..f2c43a8b3 100644 --- a/index.php +++ b/index.php @@ -1,28 +1,66 @@ config['system']['language'])) ? $a->config['system']['language'] : 'en'); load_translation_table($lang); +/** + * + * Try to open the database; + * + */ + require_once("dba.php"); $db = new dba($db_host, $db_user, $db_pass, $db_data, $install); unset($db_host, $db_user, $db_pass, $db_data); + +/** + * + * Important stuff we always need to do. + * Initialise authentication and date and time. + * Create the HTML head for the page, even if we may not use it (xml, etc.) + * The order of these may be important so use caution if you think they're all + * intertwingled with no logical order and decide to sort it out. Some of the + * dependencies have changed, but at least at one time in the recent past - the + * order was critical to everything working properly + * + */ + if(! $install) require_once("session.php"); @@ -34,6 +72,17 @@ $a->init_pagehead(); session_start(); +/** + * + * For Mozilla auth manager - still needs sorting, and this might conflict with LRDD header. + * Apache/PHP lumps the Link: headers into one - and other services might not be able to parse it + * this way. There's a PHP flag to link the headers because by default this will over-write any other + * link header. + * + * What we really need to do is output the raw headers ourselves so we can keep them separate. + * + */ + // header('Link: <' . $a->get_baseurl() . '/amcd>; rel="acct-mgmt";'); if((x($_SESSION,'authenticated')) || (x($_POST,'auth-params')) || ($a->module === 'login')) @@ -45,11 +94,34 @@ if(! x($_SESSION,'authenticated')) if(! x($_SESSION,'sysmsg')) $_SESSION['sysmsg'] = ''; +/* + * check_config() is responible for running update scripts. These automatically + * update the DB schema whenever we push a new one out. + */ + + if($install) $a->module = 'install'; else check_config($a); + +/** + * + * We have already parsed the server path into $->argc and $a->argv + * + * $a->argv[0] is our module name. We will load the file mod/{$a->argv[0]}.php + * and use it for handling our URL request. + * The module file contains a few functions that we call in various circumstances + * and in the following order: + * + * "module"_init + * "module"_post (only if there are $_POST variables) + * "module"_afterpost + * "module"_content - the string return of this function contains our page body + * + */ + if(strlen($a->module)) { if(file_exists("mod/{$a->module}.php")) { include("mod/{$a->module}.php"); @@ -66,7 +138,7 @@ if($a->module_loaded) { if(function_exists($a->module . '_init')) { $func = $a->module . '_init'; $func($a); - } + } if(($_SERVER['REQUEST_METHOD'] === 'POST') && (! $a->error) && (function_exists($a->module . '_post')) @@ -93,7 +165,11 @@ if(stristr($_SESSION['sysmsg'], t('Permission denied'))) { header($_SERVER["SERVER_PROTOCOL"] . ' 403 ' . t('Permission denied.')); } -// report anything important happening +/** + * + * Report anything which needs to be communicated in the notification area (before the main body) + * + */ if(x($_SESSION,'sysmsg')) { $a->page['content'] = "
{$_SESSION['sysmsg']}
\r\n" @@ -101,19 +177,30 @@ if(x($_SESSION,'sysmsg')) { unset($_SESSION['sysmsg']); } - -// Feel free to comment out this line on production sites. -$a->page['content'] .= $debug_text; +/** + * + * Add a place for the pause/resume Ajax indicator + * + */ $a->page['content'] .= '
'; -// build page -// Navigation (menu) template +/** + * + * Add the navigation (menu) template + * + */ + if($a->module != 'install') require_once("nav.php"); -// make sure the desired theme exists, though if the default theme doesn't exist we're stuffed. +/** + * + * Build the page - now that we have all the components + * Make sure the desired theme exists, though if the default theme doesn't exist we're stuffed. + * + */ if((x($_SESSION,'theme')) && (! file_exists('view/theme/' . $_SESSION['theme'] . '/style.css'))) unset($_SESSION['theme']);