From 591fa095aa86f15fd43a3969f63ea85a0bb0889c Mon Sep 17 00:00:00 2001 From: friendica Date: Sun, 13 Nov 2011 15:45:08 -0800 Subject: [PATCH 1/4] tumblr post addon --- tumblr.tgz | Bin 0 -> 2023 bytes tumblr/tumblr.css | 16 +++++ tumblr/tumblr.php | 179 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 195 insertions(+) create mode 100644 tumblr.tgz create mode 100644 tumblr/tumblr.css create mode 100644 tumblr/tumblr.php diff --git a/tumblr.tgz b/tumblr.tgz new file mode 100644 index 0000000000000000000000000000000000000000..e91e516142b1837da0ccc1f7374380c0350d672c GIT binary patch literal 2023 zcmVrw#v?Va$H8cHb~YSNPM)5g9t=k(`2PSV_o|g1X(9**I9L;J$@mouZ=s8q zle5vYXV1QbPG4|{%>UWH<9HR{gAD25v$OFn{vVBplX1!aC+Pq2>1cca!+X%BG5+WN zKYxKf?{=LhPrC2~ek5x;g?B0#;7ybW_&N$h>WPTU<=-ezSQJiSbUc*LFH^CK_!M5V zOA4=z0pWZlL_Bqz+@!}|w02@1Em%OEH4H-c< zmn;#K&sR}&*|TF*XdXl!3G4wB!zR8Tg-#=qk;vA-CC>iyHs~-CY{Bp`jQG01-vK(I zp??eLACZ`cRBR%CnUpl%0aSA)w*Y&_DJWeC7A}*$6xJ-eVk_%OfZee(78KC^*l=m4-U0pJIQe6@naXB^y~l@S@c7U*zGjQw zBT!D7rwQe~e!pw-f>V+55MxF@914U{5?}^PD&{fjykN^-nRlR7vIn-&May8JxFSKX zKfoC+{9EvxzV)+Ay)C3r5!;-;s(^R z;kcyZG1#bIic}*DoC~mXv2q-P=-I0Ji%1^^c3<+GJE+ZtohkXT)$b-awBHkH@x2`H z;IZQS5TzUvaTCyFMX6FmtSH1}Ng;_~L%|~l7yyQ)-SY))0QyE zC>d-E*3@TYW?{LLhL)4o@BH`BDt7y=+#c@DOF5^Zz+Dr8yIQD?W$_4Cgfr>Jq}W#G zSAW0k$XIpIsYo?AcgAJLim^Q3TXHRB3Z#l6CFr}A>13%T#mQ*jrVHfCsyzUsiUMbQ_ z7x^Ygmn<~ODUiCvtdx}`7WHgfeY2n_WGY8ZOv%)&%TVR3Y-=x|1UH}8wQUwNL9@Hf za*h_OnKi5C%^=#_P&rhobkz=lf<#+OnW~yXs$6|ulbP(;-DEjOi^-f6zAZS9rnY0JHJw}TDVb?TsynH;h*mx1IPh-864kn5 zu)26m-hhjp--?7wjDE~U>=UC6V9%&p1x(5~Let6LauIyCSWwj^zI^jN;I&jOXU;!# z-`kQAb;BL!J+)k_ci!;#-%zmwJeq;zPnp_UonJ1+oLymKip?`Js|g|%sY$C{-2mGu z?fRX&)KYtwH62-dSb#o$3^LGvdG+(JuZmdL#4^@jKpt+I=zWdoLmxZIVc%@8AR{rG zC)jvODxZ;`Zmz@ zvu#aln_b!4s!QlsLRKpwk$k*6;?=R_|8hVm5|2}okvy7Z@g(Ds`elV18+?Qp9*%#t zE#{Wp!di|(6TvEgn;dss81mTPQfThHD{KKNUlTM4cK1sJu=Tsr&1Q3KE|1aL!8mj_ z9F1q27_F+0p;^-ezHmSYX5KqShx4)M~z=g1}5=1cC|7Gr8JRhRL2k$mA?NViuZKWWl2~e8U-r zAoB>iUE|;ZtYB= + */ + +function tumblr_install() { + register_hook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local'); + register_hook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send'); + register_hook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets'); + register_hook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings'); + register_hook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post'); + +} +function tumblr_uninstall() { + unregister_hook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local'); + unregister_hook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send'); + unregister_hook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets'); + unregister_hook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings'); + unregister_hook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post'); +} + + +function tumblr_jot_nets(&$a,&$b) { + if(! local_user()) + return; + + $tmbl_post = get_pconfig(local_user(),'tumblr','post'); + if(intval($tmbl_post) == 1) { + $tmbl_defpost = get_pconfig(local_user(),'tumblr','post_by_default'); + $selected = ((intval($tmbl_defpost) == 1) ? ' checked="checked" ' : ''); + $b .= '
' + . t('Post to Tumblr') . '
'; + } +} + + +function tumblr_settings(&$a,&$s) { + + if(! local_user()) + return; + + /* Add our stylesheet to the page so we can make our settings look nice */ + + $a->page['htmlhead'] .= '' . "\r\n"; + + /* Get the current state of our config variables */ + + $enabled = get_pconfig(local_user(),'tumblr','post'); + + $checked = (($enabled) ? ' checked="checked" ' : ''); + + $def_enabled = get_pconfig(local_user(),'tumblr','post_by_default'); + + $def_checked = (($def_enabled) ? ' checked="checked" ' : ''); + + $tmbl_username = get_pconfig(local_user(), 'tumblr', 'tumblr_username'); + $tmbl_password = get_pconfig(local_user(), 'tumblr', 'tumblr_password'); + + + /* Add some HTML to the existing form */ + + $s .= '
'; + $s .= '

' . t('Tumblr Post Settings') . '

'; + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + /* provide a submit button */ + + $s .= '
'; + +} + + +function tumblr_settings_post(&$a,&$b) { + + if(x($_POST,'tumblr-submit')) { + + set_pconfig(local_user(),'tumblr','post',intval($_POST['tumblr'])); + set_pconfig(local_user(),'tumblr','post_by_default',intval($_POST['tumblr_bydefault'])); + set_pconfig(local_user(),'tumblr','tumblr_username',trim($_POST['tumblr_username'])); + set_pconfig(local_user(),'tumblr','tumblr_password',trim($_POST['tumblr_password'])); + + } + +} + +function tumblr_post_local(&$a,&$b) { + + // This can probably be changed to allow editing by pointing to a different API endpoint + + if($b['edit']) + return; + + if((! local_user()) || (local_user() != $b['uid'])) + return; + + if($b['private'] || $b['parent']) + return; + + $tmbl_post = intval(get_pconfig(local_user(),'tumblr','post')); + + $tmbl_enable = (($tmbl_post && x($_REQUEST,'tumblr_enable')) ? intval($_REQUEST['tumblr_enable']) : 0); + + if($_REQUEST['api_source'] && intval(get_pconfig(local_user(),'tumblr','post_by_default'))) + $tmbl_enable = 1; + + if(! $tmbl_enable) + return; + + if(strlen($b['postopts'])) + $b['postopts'] .= ','; + $b['postopts'] .= 'tumblr'; +} + + + + +function tumblr_send(&$a,&$b) { + + if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) + return; + + if(! strstr($b['postopts'],'tumblr')) + return; + + if($b['parent'] != $b['id']) + return; + + + $tmbl_username = get_pconfig($b['uid'],'tumblr','tumblr_username'); + $tmbl_password = get_pconfig($b['uid'],'tumblr','tumblr_password'); + $tmbl_blog = 'http://www.tumblr.com/api/write'; + + if($tmbl_username && $tmbl_password && $tmbl_blog) { + + require_once('include/bbcode.php'); + + $params = array( + 'email' => $tmbl_username, + 'password' => $tmbl_password, + 'title' => (($b['title']) ? $b['title'] : t('Post from Friendica')), + 'type' => 'regular', + 'format' => 'html', + 'generator' => 'Friendica', + 'body' => bbcode($b['body']) + ); + + $x = post_url($tmbl_blog,$params); + $ret_code = $a->get_curl_code(); + if($ret_code == 201) + logger('tumblr_send: success'); + elseif($ret_code == 403) + logger('tumblr_send: authentication failure'); + else + logger('tumblr_send: general error: ' . print_r($x,true)); + + } +} + From e031a5209cc00c221faabfbcad752e1ed066b793 Mon Sep 17 00:00:00 2001 From: friendica Date: Sun, 13 Nov 2011 15:49:19 -0800 Subject: [PATCH 2/4] default title for wppost --- wppost.tgz | Bin 2147 -> 2173 bytes wppost/wppost.php | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/wppost.tgz b/wppost.tgz index c76b41380f0656ec335c556fcf4863f50001e2fc..43bc6f26e836faad81d71cfb7e28712002a66625 100644 GIT binary patch literal 2173 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 literal 2147 zcmV-p2%PsHiwFR^TDVRC1MOK`Z`;Zd_N(%+t2y}{_@@Z@;N*X6S}9G;9$2BXp85ch|NM@R;vXSGT`SxW5$U~g@^OFy~s!+YrB z<>+L1dV2aJZ2E!EM)+U+*LTzO8FVlQpPU@u>;KX4i247Rhskh&{y#oC8SKH}8EmON z|L6X1{Xw|CM?%{PNH4G*5_CbWW+_QRdtF3qjp8v3`O>$RHq%`Z_u7eW>n7HXE1R{& zpt>m!>P|Cf?Q^CQ*+`Q8uU+}1r=0)sDt-nX59j|7^Qu_?k9hvSKKhyeKjN93q0d__ z>(#3kyn?@C9*yB2m^&88Tb%p^2iL@YR~PRf{l9YZzGXq=q)|X9fgVQGI=Uf`xpvM_ z?KV%cy2v2I`?!SD_rRzkRsr?M|nqN=HIy zmV_vey&P;}t^lU6BpCka)P=un7dgAqBC~5MQ=|qzq&IfZRx&y;ox)IAprm7`)J(zL zxtq)OO6lUVQW9Xe5f3G`i>jpprTq*{;5{DkriT2(z_l@$C2qXDc}oEp*rqU$wG=oc*PgNfEv<4m38eHcAnA$_ZVO!z zi0vhTG=dEQ*A8KAY+uY3T?Z>-d*)XGZs3R4s5_V% zxgrB3pp@KF3+F`xRtZ^51%xPyg^6RQBuiLzM@+13$%2fG!8Bk^Jl~!gco{IP*`jfk zT!lt{+IQ@Dcs4gn5)x88wT(3Pp}HSziw#wHe`? zniAhr#YBzJo5YS|lGGH5>9flAMh`1XN8_%z+;X|P5FAO`wR{kbY22Sl6b)V*u-2^Tzuu%4L zsOI^$#EXMfOg&!YzAt3@%Aya!>Aj=cE31nKJge-s8u;oh?*mSjd2H5zw zshuIqzhsr+V(VL=dVBE~`1RBKW=L^a+XG8%RnXye^f{2xU+8v+r~FZ`f|1(PKo$EX z0hn_K`pRpBnU;NT0hChPpKI*F}MPr;$8ePiyk@P9u4| zQL4$}t6WZN{~Pyg)v@^mUiK=^@Rut;<)Z@zxPv{%9XQx|uk3J%8G{LoeR{M3?Adwi zg-IMo2sitiZGz`77KC@{tRUjZ&bLLt95`Q0#)!7z3H40FwyKj4{Pr7^&J8c7!1yzt zLsaEwTXEvw;9!8m3o`Qsn;BBkR+^dtn^GApJI@HZxfb1K^jTjuj(iw(t3PWhVqesvZ zen^zkBp{){9i>MxO}St6cwSuRm9Q%-?Y2E>DgPB^YaI%`QlLsBm?V#|FHT;;>%}nO zByK`%LGofMqKHKy@rnl54)_Ac%mn{cj;K+6fVCKVDsFk$);S&=({#MwQ|IF>At?~Fm-1_}9B<|kwxg)V8Ee&`07M=Zy2BaiS;XI$?7f&AFi z<~C5Dij2T%cfwzIKT+5corBtv!>VNT@Tp)9to)!eQFe{t95uhIZq!i~vf z0_PtuTdm0%TeuOwdQ7j3VSjLCU|~bCSoCngPov)H>FAHW;gxYVYfaXKt|IRjtdleJ zw|r&4tIQZ0OOo_MvSIDe#47ADQj8gUoz8fah?m)fU*fX~1|n)>x3*lc#Qyi8ofUmK zvE*Vye&zco@y8sG28>wzX2Xfa{@X$>|3oYm$ig2jbSd|;@I+fi_ZU2z+GEinqPx5B z{^PrM=bz?(dVBd+goO-vo-3@1n3S+0z+>qa<3;?ekp!Bm%LMUYQ@R+5xI;JjM?-N( Z|6YGQ{`vfTem=kJ=ReC5&Mp8b006D*K~w+$ diff --git a/wppost/wppost.php b/wppost/wppost.php index 235aa8234..d0e48b73e 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -168,9 +168,9 @@ function wppost_send(&$a,&$b) { require_once('include/bbcode.php'); - $post = (($b['title']) ? '' . $b['title'] . '' : ''); - $post .= bbcode($b['body']); - $post = xmlify($post); + $title = '' . (($b['title']) ? $b['title'] : t('Post from Friendica')) . ''; + $post = $title . bbcode($b['body']); + $post = xmlify($post); $xml = <<< EOT From c7ef806b7210f3c73cf2fcd4c2e1b0a9a0ea322c Mon Sep 17 00:00:00 2001 From: friendica Date: Sun, 13 Nov 2011 16:06:36 -0800 Subject: [PATCH 3/4] tumblr - add tagging --- tumblr/tumblr.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index 25a0287cd..b4de0f3c1 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -155,6 +155,19 @@ function tumblr_send(&$a,&$b) { require_once('include/bbcode.php'); + $tag_arr = array(); + $tags = ''; + $x = preg_match_all('/\#\[(.*?)\](.*?)\[/',$b['tag'],$matches,PREG_SET_ORDER); + + if($x) { + foreach($matches as $mtch) { + $tag_arr[] = $mtch[2]; + } + } + if(count($tag_arr)) + $tags = implode(',',$tag_arr); + + $params = array( 'email' => $tmbl_username, 'password' => $tmbl_password, @@ -162,6 +175,7 @@ function tumblr_send(&$a,&$b) { 'type' => 'regular', 'format' => 'html', 'generator' => 'Friendica', + 'tags' => $tags, 'body' => bbcode($b['body']) ); From 48ca950570cd42e03350a8c1a302ec665f6f3e61 Mon Sep 17 00:00:00 2001 From: friendica Date: Sun, 13 Nov 2011 16:07:13 -0800 Subject: [PATCH 4/4] update tgz --- tumblr.tgz | Bin 2023 -> 2168 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tumblr.tgz b/tumblr.tgz index e91e516142b1837da0ccc1f7374380c0350d672c..9291801e36e506c0728c2cce0eff1412350c1741 100644 GIT binary patch literal 2168 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