From c9e8b1e5c380904e479927e2f24754d8709f590e Mon Sep 17 00:00:00 2001 From: Meitar Moscovitz Date: Wed, 11 Feb 2009 03:03:16 +1100 Subject: [PATCH 01/18] Add streamlined mobile device-friendly styles when enabled in config. A new mobile-specific style sheet is added and loaded only if the `$config['site']['mobile']` configuration variable is set to true. --- config.php.sample | 2 ++ lib/action.php | 7 ++++++ theme/base/css/mobile.css | 48 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 theme/base/css/mobile.css diff --git a/config.php.sample b/config.php.sample index a2c5801f45..d1191ea01b 100644 --- a/config.php.sample +++ b/config.php.sample @@ -18,6 +18,8 @@ $config['site']['server'] = 'localhost'; $config['site']['path'] = 'laconica'; #$config['site']['fancy'] = false; #$config['site']['theme'] = 'default'; +#To enable the built-in mobile style sheet, defaults to false. +#$config['site']['mobile'] = true; #For contact email, defaults to $_SERVER["SERVER_ADMIN"] #$config['site']['email'] = 'admin@example.net'; #Brought by... diff --git a/lib/action.php b/lib/action.php index ce92addf5c..ce37f4760a 100644 --- a/lib/action.php +++ b/lib/action.php @@ -170,6 +170,13 @@ class Action extends HTMLOutputter // lawsuit } $this->comment('[if IE]>element('link', array('rel' => 'stylesheet', + 'type' => 'text/css', + 'href' => theme_path('css/mobile.css', 'base') . '?version=' . LACONICA_VERSION, + // TODO: "handheld" CSS for other mobile devices + 'media' => 'screen and (max-device-width: 480px)')); // Mobile WebKit + } } /** diff --git a/theme/base/css/mobile.css b/theme/base/css/mobile.css new file mode 100644 index 0000000000..6cd717a4df --- /dev/null +++ b/theme/base/css/mobile.css @@ -0,0 +1,48 @@ +/** theme: base + * + * @package Laconica + * @author Meitar Moscovitz + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +/* Go linear. */ +#header, +#header address, +#site_nav_global_primary, +#anon_notice, +#site_nav_local_views .nav, +#core, +#content_inner, +#notices_primary, +.notice, +.notice .entry-title, +.notice div.entry-content, +.pagination, +.pagination .nav, +.aside .section { float: none; } + +/* And liquid. */ +#wrap { width: 95%; } + +body { font-size: 2em; } /* Make things bigger on smaller screens. */ + +#site_nav_global_primary, #site_nav_global_secondary { text-align: center; } + +.notice div.entry-content { margin-left: 0; } +address { margin: 0; } + +#anon_notice, #footer { clear: left; width: auto; font-size: .5em; } + +#content { padding: 18px 0; width: 100%; } +#content h1, #page_notice, #content_inner { padding: 0 18px; } +#content_inner { width: auto; } +.pagination .nav { overflow: auto; } + +#aside_primary { margin: 10px 0 0 0; border: none; padding: 0; width: 100%; } +#popular_notices { float: none; width: auto; } +/* Columns for supplemental info. */ +.aside .section { clear: none; padding: 9px; width: 45%; } +#top_groups_by_post { float: left; } +#featured_users { float: right; } +#export_data { display: none; } From beddf906634054b115d41046ac112cd0264dbfe1 Mon Sep 17 00:00:00 2001 From: Meitar Moscovitz Date: Wed, 11 Feb 2009 03:12:14 +1100 Subject: [PATCH 02/18] Trigger only on handheld device screens, not on browser screens, d'oh! --- lib/action.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/action.php b/lib/action.php index ce37f4760a..3e236d7146 100644 --- a/lib/action.php +++ b/lib/action.php @@ -175,7 +175,7 @@ class Action extends HTMLOutputter // lawsuit 'type' => 'text/css', 'href' => theme_path('css/mobile.css', 'base') . '?version=' . LACONICA_VERSION, // TODO: "handheld" CSS for other mobile devices - 'media' => 'screen and (max-device-width: 480px)')); // Mobile WebKit + 'media' => 'only screen and (max-device-width: 480px)')); // Mobile WebKit } } From 07c6537898a7c839469b50121b6c6d63be07613c Mon Sep 17 00:00:00 2001 From: Meitar Moscovitz Date: Wed, 11 Feb 2009 23:35:58 +1100 Subject: [PATCH 03/18] Style the notice form and notices to better avoid need to scroll around. --- theme/base/css/mobile.css | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/theme/base/css/mobile.css b/theme/base/css/mobile.css index 6cd717a4df..3d0455a673 100644 --- a/theme/base/css/mobile.css +++ b/theme/base/css/mobile.css @@ -12,31 +12,55 @@ #site_nav_global_primary, #anon_notice, #site_nav_local_views .nav, +#form_notice, +#form_notice .form_data li, #core, #content_inner, #notices_primary, .notice, .notice .entry-title, .notice div.entry-content, +.notice-options, +.notice .notice-options a, .pagination, .pagination .nav, .aside .section { float: none; } +.notice-options .notice_reply, +.notice-options .notice_delete, +.notice-options .form_favor, +.notice-options .form_disfavor { position: static; } + +#form_notice, +#anon_notice, +#content_inner, +#footer { width: auto; } + /* And liquid. */ #wrap { width: 95%; } -body { font-size: 2em; } /* Make things bigger on smaller screens. */ +/* Make things bigger on smaller screens. */ +body { font-size: 2em; } +.notices { font-size: 1.5em; } #site_nav_global_primary, #site_nav_global_secondary { text-align: center; } .notice div.entry-content { margin-left: 0; } address { margin: 0; } -#anon_notice, #footer { clear: left; width: auto; font-size: .5em; } +#anon_notice, #footer { clear: left; font-size: .5em; } + +#form_notice textarea { width: 80%; height: 5em; } +#form_notice .form_note { right: 20%; top: 6em; } +#form_notice .form_actions input.submit { width: auto; } #content { padding: 18px 0; width: 100%; } #content h1, #page_notice, #content_inner { padding: 0 18px; } -#content_inner { width: auto; } +.notices .entry-title, .notices div.entry-content { width: 90%; } +.notice .author .photo { height: 4.5em; width: 4.5em; } /* about double physical size; TODO: do this scaling better */ +.notice-options { position: absolute; top: 0; right: 0; padding-left: 7%; width: 3%; } +.notice-options .notice_delete a { float: left; } /* Works, but feels like it shouldn't. */ +/* TODO: Make the icons of the notice options bigger. Probably with mobile-specific images. */ .pagination .nav { overflow: auto; } #aside_primary { margin: 10px 0 0 0; border: none; padding: 0; width: 100%; } From da2348fbbe27facf4cfbf3fad800b3ccf98b4136 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sat, 14 Feb 2009 21:55:25 -0500 Subject: [PATCH 04/18] Optionally ignore some notice sources for public page We optionally ignore some notice sources from the public page. Typically these are automatic notice sources like twitterfeed that don't usually represent the community on the site very well. --- classes/Notice.php | 4 +++- config.php.sample | 8 ++++++++ lib/common.php | 3 ++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index 6db59c96ef..b8cd2bd7f2 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -136,10 +136,12 @@ class Notice extends Memcached_DataObject $notice->profile_id = $profile_id; $blacklist = common_config('public', 'blacklist'); + $autosource = common_config('public', 'autosource'); # Blacklisted are non-false, but not 1, either - if ($blacklist && in_array($profile_id, $blacklist)) { + if (($blacklist && in_array($profile_id, $blacklist)) || + ($source && $autosource && in_array($source, $autosource))) { $notice->is_local = -1; } else { $notice->is_local = $is_local; diff --git a/config.php.sample b/config.php.sample index a2c5801f45..3fa898e1be 100644 --- a/config.php.sample +++ b/config.php.sample @@ -107,6 +107,14 @@ $config['sphinx']['port'] = 3312; #$config['public']['blacklist'][] = 123; #$config['public']['blacklist'][] = 2307; +#Mark certain notice sources as automatic and thus not +#appropriate for public feed +#$config['public]['autosource'][] = 'twitterfeed'; +#$config['public]['autosource'][] = 'rssdent'; +#$config['public]['autosource'][] = 'Ping.Fm'; +#$config['public]['autosource'][] = 'HelloTxt'; +#$config['public]['autosource'][] = 'Updating.Me'; + #Do notice broadcasts offline #If you use this, you must run the six offline daemons in the #background. See the README for details. diff --git a/lib/common.php b/lib/common.php index 7bfd14c429..4fc749ca06 100644 --- a/lib/common.php +++ b/lib/common.php @@ -106,7 +106,8 @@ $config = array('server' => null), 'public' => array('localonly' => true, - 'blacklist' => array()), + 'blacklist' => array(), + 'autosource' => array()), 'theme' => array('server' => null), 'throttle' => From ed964ea980be63999860aaa5f39274768eca5d59 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Sat, 14 Feb 2009 21:55:25 -0500 Subject: [PATCH 05/18] Optionally ignore some notice sources for public page We optionally ignore some notice sources from the public page. Typically these are automatic notice sources like twitterfeed that don't usually represent the community on the site very well. --- classes/Notice.php | 4 +++- config.php.sample | 8 ++++++++ lib/common.php | 3 ++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index 3299883686..cc7de63c20 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -136,10 +136,12 @@ class Notice extends Memcached_DataObject $notice->profile_id = $profile_id; $blacklist = common_config('public', 'blacklist'); + $autosource = common_config('public', 'autosource'); # Blacklisted are non-false, but not 1, either - if ($blacklist && in_array($profile_id, $blacklist)) { + if (($blacklist && in_array($profile_id, $blacklist)) || + ($source && $autosource && in_array($source, $autosource))) { $notice->is_local = -1; } else { $notice->is_local = $is_local; diff --git a/config.php.sample b/config.php.sample index db1a216635..efb5aa4432 100644 --- a/config.php.sample +++ b/config.php.sample @@ -107,6 +107,14 @@ $config['sphinx']['port'] = 3312; #$config['public']['blacklist'][] = 123; #$config['public']['blacklist'][] = 2307; +#Mark certain notice sources as automatic and thus not +#appropriate for public feed +#$config['public]['autosource'][] = 'twitterfeed'; +#$config['public]['autosource'][] = 'rssdent'; +#$config['public]['autosource'][] = 'Ping.Fm'; +#$config['public]['autosource'][] = 'HelloTxt'; +#$config['public]['autosource'][] = 'Updating.Me'; + #Do notice broadcasts offline #If you use this, you must run the six offline daemons in the #background. See the README for details. diff --git a/lib/common.php b/lib/common.php index 5b4e3c40c8..bf49fff6b4 100644 --- a/lib/common.php +++ b/lib/common.php @@ -100,7 +100,8 @@ $config = array('server' => null), 'public' => array('localonly' => true, - 'blacklist' => array()), + 'blacklist' => array(), + 'autosource' => array()), 'theme' => array('server' => null), 'throttle' => From 9c9b6790ce78296c0b182f03b5f6f2c035e43a7c Mon Sep 17 00:00:00 2001 From: Robin Millette Date: Mon, 16 Feb 2009 17:46:24 +0000 Subject: [PATCH 06/18] trac #201 Add flowplayer to enable multimedia playback capability. --- bin/flowplayer-3.0.5.swf | Bin 0 -> 92317 bytes bin/flowplayer.audio-3.0.3.swf | Bin 0 -> 2756 bytes bin/flowplayer.controls-3.0.3.swf | Bin 0 -> 15977 bytes js/flowplayer-3.0.5.min.js | 24 ++++++++++++++++++++++++ js/jquery.simplemodal-1.2.2.pack.js | 8 ++++++++ js/video.js | 9 +++++++++ lib/action.php | 26 ++++++++++++++++++++++++++ lib/util.php | 6 ++++++ theme/base/css/modal.css | 22 ++++++++++++++++++++++ theme/base/css/modal_ie.css | 16 ++++++++++++++++ theme/base/images/x.png | Bin 0 -> 1066 bytes 11 files changed, 111 insertions(+) create mode 100644 bin/flowplayer-3.0.5.swf create mode 100644 bin/flowplayer.audio-3.0.3.swf create mode 100644 bin/flowplayer.controls-3.0.3.swf create mode 100644 js/flowplayer-3.0.5.min.js create mode 100644 js/jquery.simplemodal-1.2.2.pack.js create mode 100644 js/video.js create mode 100644 theme/base/css/modal.css create mode 100644 theme/base/css/modal_ie.css create mode 100644 theme/base/images/x.png diff --git a/bin/flowplayer-3.0.5.swf b/bin/flowplayer-3.0.5.swf new file mode 100644 index 0000000000000000000000000000000000000000..05b64a032b96e85ad7fc694495455710e2a1f1b7 GIT binary patch literal 92317 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 Ay8r+H literal 0 HcmV?d00001 diff --git a/bin/flowplayer.audio-3.0.3.swf b/bin/flowplayer.audio-3.0.3.swf new file mode 100644 index 0000000000000000000000000000000000000000..ef85f1bff0d4f179bc47f9a6404dc8ba75716895 GIT binary patch literal 2756 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 X|LvcrW5=aS{Pk7(YlQzFyXx;XOtq1% literal 0 HcmV?d00001 diff --git a/js/flowplayer-3.0.5.min.js b/js/flowplayer-3.0.5.min.js new file mode 100644 index 0000000000..b1c33150ac --- /dev/null +++ b/js/flowplayer-3.0.5.min.js @@ -0,0 +1,24 @@ +/** + * flowplayer.js 3.0.5. The Flowplayer API + * + * Copyright 2009 Flowplayer Oy + * + * This file is part of Flowplayer. + * + * Flowplayer is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Flowplayer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Flowplayer. If not, see . + * + * Version: 3.0.5 - Tue Feb 03 2009 13:14:17 GMT-0000 (GMT+00:00) + */ +(function(){function log(args){console.log("$f.fireEvent",[].slice.call(args));}function clone(obj){if(!obj||typeof obj!='object'){return obj;}var temp=new obj.constructor();for(var key in obj){if(obj.hasOwnProperty(key)){temp[key]=clone(obj[key]);}}return temp;}function each(obj,fn){if(!obj){return;}var name,i=0,length=obj.length;if(length===undefined){for(name in obj){if(fn.call(obj[name],name,obj[name])===false){break;}}}else{for(var value=obj[0];i1){var swf=arguments[1];var conf=(arguments.length==3)?arguments[2]:{};if(typeof arg=='string'){if(arg.indexOf(".")!=-1){var instances=[];each(select(arg),function(){instances.push(new Player(this,clone(swf),clone(conf)));});return new Iterator(instances);}else{var node=el(arg);return new Player(node!==null?node:arg,swf,conf);}}else if(arg){return new Player(arg,swf,conf);}}return null;};extend(window.$f,{fireEvent:function(id,evt,a0,a1,a2){var p=$f(id);return p?p._fireEvent(evt,a0,a1,a2):null;},addPlugin:function(name,fn){Player.prototype[name]=fn;return $f;},each:each,extend:extend});if(document.all){window.onbeforeunload=function(){$f("*").each(function(){if(this.isLoaded()){this.close();}});};}if(typeof jQuery=='function'){jQuery.prototype.flowplayer=function(params,conf){if(!arguments.length||typeof arguments[0]=='number'){var arr=[];this.each(function(){var p=$f(this);if(p){arr.push(p);}});return arguments.length?arr[arguments[0]]:new Iterator(arr);}return this.each(function(){$f(this,clone(params),conf?clone(conf):{});});};}})();(function(){var jQ=typeof jQuery=='function';function isDomReady(){if(domReady.done){return false;}var d=document;if(d&&d.getElementsByTagName&&d.getElementById&&d.body){clearInterval(domReady.timer);domReady.timer=null;for(var i=0;i';}var e=extend({},p);e.width=e.height=e.id=e.w3c=e.src=null;for(var k in e){if(e[k]!==null){html+='';}}var vars="";if(c){for(var key in c){if(c[key]!==null){vars+=key+'='+(typeof c[key]=='object'?asString(c[key]):c[key])+'&';}}vars=vars.substring(0,vars.length-1);html+='';}html+="";return html;}function Flash(root,opts,flashvars){var version=flashembed.getVersion();extend(this,{getContainer:function(){return root;},getConf:function(){return conf;},getVersion:function(){return version;},getFlashvars:function(){return flashvars;},getApi:function(){return root.firstChild;},getHTML:function(){return getHTML(opts,flashvars);}});var required=opts.version;var express=opts.expressInstall;var ok=!required||flashembed.isSupported(required);if(ok){opts.onFail=opts.version=opts.expressInstall=null;root.innerHTML=getHTML(opts,flashvars);}else if(required&&express&&flashembed.isSupported([6,65])){extend(opts,{src:express});flashvars={MMredirectURL:location.href,MMplayerType:'PlugIn',MMdoctitle:document.title};root.innerHTML=getHTML(opts,flashvars);}else{if(root.innerHTML.replace(/\s/g,'')!==''){}else{root.innerHTML="

Flash version "+required+" or greater is required

"+"

"+(version[0]>0?"Your version is "+version:"You have no flash plugin installed")+"

"+"
";}}if(!ok&&opts.onFail){var ret=opts.onFail.call(this);if(typeof ret=='string'){root.innerHTML=ret;}}}window.flashembed=function(root,conf,flashvars){if(typeof root=='string'){var el=document.getElementById(root);if(el){root=el;}else{domReady(function(){flashembed(root,conf,flashvars);});return;}}if(!root){return;}var opts={width:'100%',height:'100%',allowfullscreen:true,allowscriptaccess:'always',quality:'high',version:null,onFail:null,expressInstall:null,w3c:false};if(typeof conf=='string'){conf={src:conf};}extend(opts,conf);return new Flash(root,opts,flashvars);};extend(window.flashembed,{getVersion:function(){var version=[0,0];if(navigator.plugins&&typeof navigator.plugins["Shockwave Flash"]=="object"){var _d=navigator.plugins["Shockwave Flash"].description;if(typeof _d!="undefined"){_d=_d.replace(/^.*\s+(\S+\s+\S+$)/,"$1");var _m=parseInt(_d.replace(/^(.*)\..*$/,"$1"),10);var _r=/r/.test(_d)?parseInt(_d.replace(/^.*r(.*)$/,"$1"),10):0;version=[_m,_r];}}else if(window.ActiveXObject){try{var _a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{_a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");version=[6,0];_a.AllowScriptAccess="always";}catch(ee){if(version[0]==6){return;}}try{_a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(eee){}}if(typeof _a=="object"){_d=_a.GetVariable("$version");if(typeof _d!="undefined"){_d=_d.replace(/^\S+\s+(.*)$/,"$1").split(",");version=[parseInt(_d[0],10),parseInt(_d[2],10)];}}}return version;},isSupported:function(version){var now=flashembed.getVersion();var ret=(now[0]>version[0])||(now[0]==version[0]&&now[1]>=version[1]);return ret;},domReady:domReady,asString:asString,getHTML:getHTML});if(jQ){jQuery.prototype.flashembed=function(conf,flashvars){return this.each(function(){flashembed(this,conf,flashvars);});};}})(); \ No newline at end of file diff --git a/js/jquery.simplemodal-1.2.2.pack.js b/js/jquery.simplemodal-1.2.2.pack.js new file mode 100644 index 0000000000..b5ad5c23a3 --- /dev/null +++ b/js/jquery.simplemodal-1.2.2.pack.js @@ -0,0 +1,8 @@ +/* + * SimpleModal 1.2.2 - jQuery Plugin + * http://www.ericmmartin.com/projects/simplemodal/ + * Copyright (c) 2008 Eric Martin + * Dual licensed under the MIT and GPL licenses + * Revision: $Id: jquery.simplemodal.js 181 2008-12-16 16:51:44Z emartin24 $ + */ +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(g($){m f=$.Q.1Q&&1a($.Q.1D)==6&&!10[\'2g\'],1f=$.Q.1Q&&!$.2a,w=[];$.y=g(a,b){I $.y.12.1n(a,b)};$.y.D=g(){$.y.12.D()};$.1P.y=g(a){I $.y.12.1n(3,a)};$.y.1O={V:29,1J:\'r-H\',1B:{},1z:\'r-n\',20:{},1Z:{},v:2t,D:1o,1T:\'\',X:\'r-D\',l:F,1g:K,1e:F,1d:F,1c:F};$.y.12={7:F,4:{},1n:g(a,b){8(3.4.j){I K}3.7=$.U({},$.y.1O,b);3.v=3.7.v;3.1w=K;8(J a==\'27\'){a=a 25 1A?a:$(a);8(a.1v().1v().23()>0){3.4.T=a.1v();8(!3.7.1g){3.4.21=a.2x(1o)}}}q 8(J a==\'2w\'||J a==\'1r\'){a=$(\'<1q/>\').2s(a)}q{2r(\'2q 2p: 2o j 2l: \'+J a);I K}3.4.j=a.11(\'r-j\').E(3.7.1Z);a=F;3.1S();3.1R();8($.1m(3.7.1d)){3.7.1d.1l(3,[3.4])}I 3},1S:g(){w=3.1k();8(f){3.4.x=$(\'\').E($.U(3.7.2b,{1j:\'1i\',V:0,l:\'1h\',A:w[0],z:w[1],v:3.7.v,L:0,B:0})).O(\'u\')}3.4.H=$(\'<1q/>\').1N(\'1M\',3.7.1J).11(\'r-H\').E($.U(3.7.1B,{1j:\'1i\',V:3.7.V/1b,A:w[0],z:w[1],l:\'1h\',B:0,L:0,v:3.7.v+1})).O(\'u\');3.4.n=$(\'<1q/>\').1N(\'1M\',3.7.1z).11(\'r-n\').E($.U(3.7.20,{1j:\'1i\',l:\'1h\',v:3.7.v+2})).1K(3.7.D?$(3.7.1T).11(3.7.X):\'\').O(\'u\');3.19();8(f||1f){3.18()}3.4.n.1K(3.4.j.1I())},1H:g(){m a=3;$(\'.\'+3.7.X).1G(\'1L.r\',g(e){e.28();a.D()});$(10).1G(\'1F.r\',g(){w=a.1k();a.19();8(f||1f){a.18()}q{a.4.x&&a.4.x.E({A:w[0],z:w[1]});a.4.H.E({A:w[0],z:w[1]})}})},1E:g(){$(\'.\'+3.7.X).1C(\'1L.r\');$(10).1C(\'1F.r\')},18:g(){m p=3.7.l;$.26([3.4.x||F,3.4.H,3.4.n],g(i,e){8(e){m a=\'k.u.17\',N=\'k.u.1W\',16=\'k.u.24\',S=\'k.u.1y\',R=\'k.u.1x\',15=\'k.u.22\',1t=\'k.P.17\',1s=\'k.P.1W\',C=\'k.P.1y\',G=\'k.P.1x\',s=e[0].2v;s.l=\'2u\';8(i<2){s.14(\'A\');s.14(\'z\');s.Z(\'A\',\'\'+16+\' > \'+a+\' ? \'+16+\' : \'+a+\' + "o"\');s.Z(\'z\',\'\'+15+\' > \'+N+\' ? \'+15+\' : \'+N+\' + "o"\')}q{m b,W;8(p&&p.1Y==1X){8(p[0]){m c=J p[0]==\'1r\'?p[0].1V():p[0].13(/o/,\'\');b=c.1U(\'%\')==-1?c+\' + (t = \'+G+\' ? \'+G+\' : \'+R+\') + "o"\':1a(c.13(/%/,\'\'))+\' * ((\'+1t+\' || \'+a+\') / 1b) + (t = \'+G+\' ? \'+G+\' : \'+R+\') + "o"\'}8(p[1]){m d=J p[1]==\'1r\'?p[1].1V():p[1].13(/o/,\'\');W=d.1U(\'%\')==-1?d+\' + (t = \'+C+\' ? \'+C+\' : \'+S+\') + "o"\':1a(d.13(/%/,\'\'))+\' * ((\'+1s+\' || \'+N+\') / 1b) + (t = \'+C+\' ? \'+C+\' : \'+S+\') + "o"\'}}q{b=\'(\'+1t+\' || \'+a+\') / 2 - (3.2n / 2) + (t = \'+G+\' ? \'+G+\' : \'+R+\') + "o"\';W=\'(\'+1s+\' || \'+N+\') / 2 - (3.2m / 2) + (t = \'+C+\' ? \'+C+\' : \'+S+\') + "o"\'}s.14(\'L\');s.14(\'B\');s.Z(\'L\',b);s.Z(\'B\',W)}}})},1k:g(){m a=$(10);m h=$.Q.2k&&$.Q.1D>\'9.5\'&&$.1P.2i<=\'1.2.6\'?k.P[\'17\']:a.A();I[h,a.z()]},19:g(){m a,B,1u=(w[0]/2)-((3.4.n.A()||3.4.j.A())/2),1p=(w[1]/2)-((3.4.n.z()||3.4.j.z())/2);8(3.7.l&&3.7.l.1Y==1X){a=3.7.l[0]||1u;B=3.7.l[1]||1p}q{a=1u;B=1p}3.4.n.E({B:B,L:a})},1R:g(){3.4.x&&3.4.x.Y();8($.1m(3.7.1e)){3.7.1e.1l(3,[3.4])}q{3.4.H.Y();3.4.n.Y();3.4.j.Y()}3.1H()},D:g(){8(!3.4.j){I K}8($.1m(3.7.1c)&&!3.1w){3.1w=1o;3.7.1c.1l(3,[3.4])}q{8(3.4.T){8(3.7.1g){3.4.j.1I().O(3.4.T)}q{3.4.j.M();3.4.21.O(3.4.T)}}q{3.4.j.M()}3.4.n.M();3.4.H.M();3.4.x&&3.4.x.M();3.4={}}3.1E()}}})(1A);',62,158,'|||this|dialog|||opts|if||||||||function|||data|document|position|var|container|px||else|simplemodal|||body|zIndex||iframe|modal|width|height|left|sl|close|css|null|st|overlay|return|typeof|false|top|remove|bcw|appendTo|documentElement|browser|bst|bsl|parentNode|extend|opacity|le|closeClass|show|setExpression|window|addClass|impl|replace|removeExpression|bsw|bsh|clientHeight|fixIE|setPosition|parseInt|100|onClose|onShow|onOpen|ieQuirks|persist|fixed|none|display|getDimensions|apply|isFunction|init|true|vCenter|div|number|cw|ch|hCenter|parent|occb|scrollTop|scrollLeft|containerId|jQuery|overlayCss|unbind|version|unbindEvents|resize|bind|bindEvents|hide|overlayId|append|click|id|attr|defaults|fn|msie|open|create|closeHTML|indexOf|toString|clientWidth|Array|constructor|dataCss|containerCss|orig|scrollWidth|size|scrollHeight|instanceof|each|object|preventDefault|50|boxModel|iframeCss|javascript|src|Close|title|XMLHttpRequest|modalCloseImg|jquery|class|opera|type|offsetWidth|offsetHeight|Unsupported|Error|SimpleModal|alert|html|1000|absolute|style|string|clone'.split('|'),0,{})) \ No newline at end of file diff --git a/js/video.js b/js/video.js new file mode 100644 index 0000000000..936a6312e3 --- /dev/null +++ b/js/video.js @@ -0,0 +1,9 @@ +$('document').ready(function() { + $('a.media, a.mediamp3').append(' [PLAY]'); + $('a.mediamp3').html('').css('display', 'block').css('width', '224px').css('height','24px').flowplayer('../bin/flowplayer-3.0.5.swf'); + $('a.media').click(function() { + $('').attr('href', $(this).attr('href')).flowplayer('../bin/flowplayer-3.0.5.swf').modal({'closeHTML':''}); + return false; + }); +}); + diff --git a/lib/action.php b/lib/action.php index cd0db53999..79e8c95471 100644 --- a/lib/action.php +++ b/lib/action.php @@ -153,10 +153,17 @@ class Action extends HTMLOutputter // lawsuit { if (Event::handle('StartShowStyles', array($this))) { if (Event::handle('StartShowLaconicaStyles', array($this))) { + $this->element('link', array('rel' => 'stylesheet', 'type' => 'text/css', 'href' => theme_path('css/display.css', 'base') . '?version=' . LACONICA_VERSION, 'media' => 'screen, projection, tv')); + + + $this->element('link', array('rel' => 'stylesheet', + 'type' => 'text/css', + 'href' => theme_path('css/modal.css', 'base') . '?version=' . LACONICA_VERSION, + 'media' => 'screen, projection, tv')); $this->element('link', array('rel' => 'stylesheet', 'type' => 'text/css', 'href' => theme_path('css/display.css', null) . '?version=' . LACONICA_VERSION, @@ -196,6 +203,13 @@ class Action extends HTMLOutputter // lawsuit $this->element('script', array('type' => 'text/javascript', 'src' => common_path('js/jquery.form.js')), ' '); + + + $this->element('script', array('type' => 'text/javascript', + 'src' => common_path('js/jquery.simplemodal-1.2.2.pack.js')), + ' '); + + Event::handle('EndShowJQueryScripts', array($this)); } if (Event::handle('StartShowLaconicaScripts', array($this))) { @@ -205,6 +219,18 @@ class Action extends HTMLOutputter // lawsuit $this->element('script', array('type' => 'text/javascript', 'src' => common_path('js/util.js?version='.LACONICA_VERSION)), ' '); + + + $this->element('script', array('type' => 'text/javascript', + 'src' => common_path('js/flowplayer-3.0.5.min.js')), + ' '); + + $this->element('script', array('type' => 'text/javascript', + 'src' => common_path('js/video.js')), + ' '); + + + Event::handle('EndShowLaconicaScripts', array($this)); } Event::handle('EndShowScripts', array($this)); diff --git a/lib/util.php b/lib/util.php index b065c2d748..094b2750ca 100644 --- a/lib/util.php +++ b/lib/util.php @@ -474,11 +474,17 @@ function common_replace_urls_callback($text, $callback) { function common_linkify($url) { // It comes in special'd, so we unspecial it before passing to the stringifying // functions + $ext = pathinfo($url, PATHINFO_EXTENSION); $url = htmlspecialchars_decode($url); + $video_ext = array('mp4', 'flv', 'avi', 'mpg', 'mp3', 'ogg'); $display = $url; $url = (!preg_match('#^([a-z]+://|(mailto|aim|tel):)#i', $url)) ? 'http://'.$url : $url; $attrs = array('href' => $url, 'rel' => 'external'); + + if (in_array($ext, $video_ext)) { + $attrs['class'] = 'media'; + } if ($longurl = common_longurl($url)) { $attrs['title'] = $longurl; diff --git a/theme/base/css/modal.css b/theme/base/css/modal.css new file mode 100644 index 0000000000..985e4adfa5 --- /dev/null +++ b/theme/base/css/modal.css @@ -0,0 +1,22 @@ +/* + * SimpleModal Basic Modal Dialog + * http://www.ericmmartin.com/projects/simplemodal/ + * http://code.google.com/p/simplemodal/ + * + * Copyright (c) 2008 Eric Martin - http://ericmmartin.com + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Revision: $Id: basic.css 162 2008-12-01 23:36:58Z emartin24 $ + * + */ + + +/* Overlay */ +#simplemodal-overlay {background-color:#000; cursor:wait;} + +/* Container */ +#simplemodal-container {height:240px; width:320px; background-color:#fff; border:3px solid #ccc;} +#simplemodal-container a.modalCloseImg {background:url(../images/x.png) no-repeat; width:25px; height:29px; display:inline; z-index:3200; position:absolute; top:-15px; right:-18px; cursor:pointer;} +#simplemodal-container #basicModalContent {padding:8px;} diff --git a/theme/base/css/modal_ie.css b/theme/base/css/modal_ie.css new file mode 100644 index 0000000000..eab4637c0f --- /dev/null +++ b/theme/base/css/modal_ie.css @@ -0,0 +1,16 @@ +/* + * SimpleModal Basic Modal Dialog + * http://www.ericmmartin.com/projects/simplemodal/ + * http://code.google.com/p/simplemodal/ + * + * Copyright (c) 2008 Eric Martin - http://ericmmartin.com + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Revision: $Id: basic_ie.css 162 2008-12-01 23:36:58Z emartin24 $ + * + */ + +/* IE 6 hacks*/ +#simplemodal-container a.modalCloseImg {background:none; right:-14px; width:22px; height:26px; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/x.png',sizingMethod='scale');} diff --git a/theme/base/images/x.png b/theme/base/images/x.png new file mode 100644 index 0000000000000000000000000000000000000000..c11f7af69fad034c3564a4a455be0d9d569e9878 GIT binary patch literal 1066 zcmV+_1l9YAP)P0012b1^@s6UwFrL0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#%t=H+RCwB)mP<%fQ5eVP&iH858mu%+ z@(~);$`IRRsFdWQg)j?25H#9E5+YcjgqtV`TnUOGY74=Yv`}0503pyMZ4rozbYe7z z$w%s><2+9PZ}`sb+&d4g1HZX*&*S@_?|k1m_h>>0%PC7PDB-6UEP>TijU~?!h0g26K6CE8L!teL1 zLtn=e$y0l^wY4QQZl=Dz-t5usSR!v^>*VBQl#$xnTElxmL4jCYTr|`V4-cy%A7hEQ zWNUeOxxwJ->T0CEva(W-#m>%7q;7CW+W51oizD>jY>#XZ^Ja5$m{(#C6SY}DW3nc-b6NO}E# zC=@!P4IkO{$dclCF;Rmo6MzcUQCp&zxZUo1x(G;zH*VRe4xXN#HW+PbY0-_)e^mg- zjUl^AOG_OxB=mFEm0D@BE7x657g{w zXlO8G*GW6Ry1Lrn#rXI*Wro8b0bQaN3ahfBgrlv;h@9*mZTU%RSQD1Bp zNe6l04wlWOdPGMBj`WzuDF(Dess{%L2fOX+0&>Vr&h#0WN~nh<*Mt(z<2vC7~2J!3(F;`5pmu9~~Wq;u)Wsn(|;{en9_rPzUIU zzsgIMq1o}P*}Y6~nLFn5^HNn+RbE+H*@fifWE&2?5WbkdCMG6ah{q<{-QYX3 z0k(k;1nAU~A{qxMg_D4UvRN#L|7Y?f$m=lp4R-l@L_$A+2kd|Ya7-r)C5V2JU?Cd| zrE&UYa;!3WW7)Y64W@HxpN(!ad+Y%T1UU Date: Mon, 16 Feb 2009 18:55:03 +0000 Subject: [PATCH 07/18] Whoops: forgot to include facebookqueuehandler.php with the my original Facebook queue handler patch set! --- scripts/facebookqueuehandler.php | 71 ++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100755 scripts/facebookqueuehandler.php diff --git a/scripts/facebookqueuehandler.php b/scripts/facebookqueuehandler.php new file mode 100755 index 0000000000..c6859cb219 --- /dev/null +++ b/scripts/facebookqueuehandler.php @@ -0,0 +1,71 @@ +#!/usr/bin/env php +. + */ + +# Abort if called from a web server +if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { + print "This script must be run from the command line\n"; + exit(); +} + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); +define('LACONICA', true); + +require_once(INSTALLDIR . '/lib/common.php'); +require_once(INSTALLDIR . '/lib/facebookutil.php'); +require_once(INSTALLDIR . '/lib/queuehandler.php'); + +set_error_handler('common_error_handler'); + +class FacebookQueueHandler extends QueueHandler +{ + + function transport() + { + return 'facebook'; + } + + function start() + { + $this->log(LOG_INFO, "INITIALIZE"); + return true; + } + + function handle_notice($notice) + { + return facebookBroadcastNotice($notice); + } + + function finish() + { + } + +} + +ini_set("max_execution_time", "0"); +ini_set("max_input_time", "0"); +set_time_limit(0); + +mb_internal_encoding('UTF-8'); + +$id = ($argc > 1) ? $argv[1] : null; + +$handler = new FacebookQueueHandler($id); + +$handler->runOnce(); From cc38809764c63dbed24300cdcf68d9f667f0dfad Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 16 Feb 2009 16:34:07 -0500 Subject: [PATCH 08/18] First version of blogspam.net plugin Added a plugin for blogspam.net. The service is kind of aggressive, so by default I turn a lot of the tests off. But worth a look. --- plugins/BlogspamNetPlugin.php | 144 ++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 plugins/BlogspamNetPlugin.php diff --git a/plugins/BlogspamNetPlugin.php b/plugins/BlogspamNetPlugin.php new file mode 100644 index 0000000000..d9372bcd56 --- /dev/null +++ b/plugins/BlogspamNetPlugin.php @@ -0,0 +1,144 @@ +. + * + * @category Plugin + * @package Laconica + * @author Evan Prodromou + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +define('BLOGSPAMNETPLUGIN_VERSION', '0.1'); + +/** + * Plugin to check submitted notices with blogspam.net + * + * When new notices are saved, we check their text with blogspam.net (or + * a compatible service). + * + * Blogspam.net is supposed to catch blog comment spam, and I found that + * some of its tests (min/max size, bayesian match) gave a lot of false positives. + * So, I've turned those tests off by default. This may not get as many + * hits, but it's better than nothing. + * + * @category Plugin + * @package Laconica + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + * + * @see Event + */ + +class BlogspamNetPlugin extends Plugin +{ + var $baseUrl = 'http://test.blogspam.net:8888/'; + + function __construct($url=null) + { + parent::__construct(); + if ($url) { + $this->baseUrl = $url; + } + } + + function onStartNoticeSave($notice) + { + $args = $this->testArgs($notice); + common_debug("Blogspamnet args = " . print_r($args, TRUE)); + $request = xmlrpc_encode_request('testComment', array($args)); + $context = stream_context_create(array('http' => array('method' => "POST", + 'header' => + "Content-Type: text/xml\r\n". + "User-Agent: " . $this->userAgent(), + 'content' => $request))); + $file = file_get_contents($this->baseUrl, false, $context); + $response = xmlrpc_decode($file); + if (xmlrpc_is_fault($response)) { + throw new ServerException("$response[faultString] ($response[faultCode])", 500); + } else { + common_debug("Blogspamnet results = " . $response); + if (preg_match('/^ERROR(:(.*))?$/', $response, $match)) { + throw new ServerException(sprintf(_("Error from %s: %s"), $this->baseUrl, $match[2]), 500); + } else if (preg_match('/^SPAM(:(.*))?$/', $response, $match)) { + throw new ClientException(sprintf(_("Spam checker results: %s"), $match[2]), 400); + } else if (preg_match('/^OK$/', $response)) { + // don't do anything + } else { + throw new ServerException(sprintf(_("Unexpected response from %s: %s"), $this->baseUrl, $response), 500); + } + } + return true; + } + + function testArgs($notice) + { + $args = array(); + $args['comment'] = $notice->content; + $args['ip'] = $this->getClientIP(); + + if (isset($_SERVER) && array_key_exists('HTTP_USER_AGENT', $_SERVER)) { + $args['agent'] = $_SERVER['HTTP_USER_AGENT']; + } + + $profile = $notice->getProfile(); + + if ($profile && $profile->homepage) { + $args['link'] = $profile->homepage; + } + + if ($profile && $profile->fullname) { + $args['name'] = $profile->fullname; + } else { + $args['name'] = $profile->nickname; + } + + $args['site'] = common_root_url(); + $args['version'] = $this->userAgent(); + + $args['options'] = "max-size=140,min-size=0,min-words=0,exclude=bayasian"; + + return $args; + } + + function getClientIP() + { + if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { + // Note: order matters here; use proxy-forwarded stuff first + foreach (array('HTTP_X_FORWARDED_FOR', 'CLIENT-IP', 'REMOTE_ADDR') as $k) { + if (isset($_SERVER[$k])) { + return $_SERVER[$k]; + } + } + } + return '127.0.0.1'; + } + + function userAgent() + { + return 'BlogspamNetPlugin/'.BLOGSPAMNETPLUGIN_VERSION . ' Laconica/' . LACONICA_VERSION; + } +} From 6440f4cecdf507d49db015bbf4303e50eaadbe13 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Mon, 16 Feb 2009 22:39:57 +0000 Subject: [PATCH 09/18] Removed transformation effects from h1-h6 (except in aside) --- theme/base/css/display.css | 1 - 1 file changed, 1 deletion(-) diff --git a/theme/base/css/display.css b/theme/base/css/display.css index 1ac63927d2..5ce5ac884d 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -22,7 +22,6 @@ line-height:1.65; position:relative; } h1,h2,h3,h4,h5,h6 { -text-transform:capitalize; margin-bottom:7px; overflow:hidden; } From c8e71d359cee093dcb15c1d32684d90f81e10204 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 16 Feb 2009 18:02:04 -0500 Subject: [PATCH 10/18] error in hashtag link generation --- lib/util.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/util.php b/lib/util.php index 094b2750ca..46aa7b9df9 100644 --- a/lib/util.php +++ b/lib/util.php @@ -481,7 +481,7 @@ function common_linkify($url) { $url = (!preg_match('#^([a-z]+://|(mailto|aim|tel):)#i', $url)) ? 'http://'.$url : $url; $attrs = array('href' => $url, 'rel' => 'external'); - + if (in_array($ext, $video_ext)) { $attrs['class'] = 'media'; } @@ -596,7 +596,7 @@ function common_tag_link($tag) $xs->element('a', array('href' => $url, 'rel' => 'tag'), $tag); - $xs->elementEnd(); + $xs->elementEnd('span'); return $xs->getString(); } From ca90d790aa9d93a4e88602330f91d4703c29b75d Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 16 Feb 2009 18:02:31 -0500 Subject: [PATCH 11/18] Automatically add a tag for every group messages If you post to a group !foo, it's automatically listed as being tagged "foo". This is to keep users from having to do !foo #foo in all their messages. --- classes/Notice.php | 40 +++++++++++++++++++++++++++------------- classes/Notice_tag.php | 13 +++++++++---- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index b8cd2bd7f2..8e08ad503d 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -94,23 +94,28 @@ class Notice extends Memcached_DataObject /* Add them to the database */ foreach(array_unique($match[1]) as $hashtag) { /* elide characters we don't want in the tag */ - $hashtag = common_canonical_tag($hashtag); - - $tag = DB_DataObject::factory('Notice_tag'); - $tag->notice_id = $this->id; - $tag->tag = $hashtag; - $tag->created = $this->created; - $id = $tag->insert(); - if (!$id) { - $last_error = PEAR::getStaticProperty('DB_DataObject','lastError'); - common_log(LOG_ERR, 'DB error inserting hashtag: ' . $last_error->message); - common_server_error(sprintf(_('DB error inserting hashtag: %s'), $last_error->message)); - return; - } + $this->saveTag($hashtag); } return true; } + function saveTag($hashtag) + { + $hashtag = common_canonical_tag($hashtag); + + $tag = new Notice_tag(); + $tag->notice_id = $this->id; + $tag->tag = $hashtag; + $tag->created = $this->created; + $id = $tag->insert(); + + if (!$id) { + throw new ServerException(sprintf(_('DB error inserting hashtag: %s'), + $last_error->message)); + return; + } + } + static function saveNew($profile_id, $content, $source=null, $is_local=1, $reply_to=null, $uri=null) { $profile = Profile::staticGet($profile_id); @@ -621,6 +626,15 @@ class Notice extends Memcached_DataObject continue; } + // we automatically add a tag for every group name, too + + $tag = Notice_tag::pkeyGet(array('tag' => common_canonical_tag($nickname), + 'notice_id' => $this->id)); + + if (is_null($tag)) { + $this->saveTag($nickname); + } + if ($profile->isMember($group)) { $gi = new Group_inbox(); diff --git a/classes/Notice_tag.php b/classes/Notice_tag.php index 94f9296d60..0365973f56 100644 --- a/classes/Notice_tag.php +++ b/classes/Notice_tag.php @@ -19,7 +19,7 @@ require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; -class Notice_tag extends Memcached_DataObject +class Notice_tag extends Memcached_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -35,9 +35,9 @@ class Notice_tag extends Memcached_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE - + static function getStream($tag, $offset=0, $limit=20) { - $qry = + $qry = 'SELECT notice.* ' . 'FROM notice JOIN notice_tag ON notice.id = notice_tag.notice_id ' . 'WHERE notice_tag.tag = "%s" '; @@ -46,7 +46,7 @@ class Notice_tag extends Memcached_DataObject 'notice_tag:notice_stream:' . common_keyize($tag), $offset, $limit); } - + function blowCache() { $cache = common_memcache(); @@ -54,4 +54,9 @@ class Notice_tag extends Memcached_DataObject $cache->delete(common_cache_key('notice_tag:notice_stream:' . $this->tag)); } } + + function &pkeyGet($kv) + { + return Memcached_DataObject::pkeyGet('Notice_tag', $kv); + } } From affb2f9359ee498c2c20240b592a0f62a770e8c8 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 16 Feb 2009 18:24:43 -0500 Subject: [PATCH 12/18] add email notify flag for @-replies --- classes/User.php | 7 +++++-- classes/laconica.ini | 1 + db/laconica.sql | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/classes/User.php b/classes/User.php index a6a1b11b9f..495a982360 100644 --- a/classes/User.php +++ b/classes/User.php @@ -40,6 +40,7 @@ class User extends Memcached_DataObject public $emailnotifyfav; // tinyint(1) default_1 public $emailnotifynudge; // tinyint(1) default_1 public $emailnotifymsg; // tinyint(1) default_1 + public $emailnotifyattn; // tinyint(1) default_1 public $emailmicroid; // tinyint(1) default_1 public $language; // varchar(50) public $timezone; // varchar(50) @@ -62,8 +63,10 @@ class User extends Memcached_DataObject public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP /* Static get */ - function staticGet($k,$v=null) - { return Memcached_DataObject::staticGet('User',$k,$v); } + function staticGet($k,$v=NULL) + { + return Memcached_DataObject::staticGet('User',$k,$v); + } /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE diff --git a/classes/laconica.ini b/classes/laconica.ini index 19267f2688..5fd2cd1f86 100755 --- a/classes/laconica.ini +++ b/classes/laconica.ini @@ -332,6 +332,7 @@ emailnotifysub = 17 emailnotifyfav = 17 emailnotifynudge = 17 emailnotifymsg = 17 +emailnotifyattn = 17 emailmicroid = 17 language = 2 timezone = 2 diff --git a/db/laconica.sql b/db/laconica.sql index 15f03a978f..dd93a727b7 100644 --- a/db/laconica.sql +++ b/db/laconica.sql @@ -50,6 +50,7 @@ create table user ( emailnotifyfav tinyint default 1 comment 'Notify by email of favorites', emailnotifynudge tinyint default 1 comment 'Notify by email of nudges', emailnotifymsg tinyint default 1 comment 'Notify by email of direct messages', + emailnotifyattn tinyint default 1 comment 'Notify by email of @-replies', emailmicroid tinyint default 1 comment 'whether to publish email microid', language varchar(50) comment 'preferred language', timezone varchar(50) comment 'timezone', From 175c4665cc33c07bbbc42bbf96dd07cf90ba7bbb Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 16 Feb 2009 18:26:15 -0500 Subject: [PATCH 13/18] send mail when @-replies are received --- classes/Notice.php | 32 +++++++++++++++++++---------- lib/mail.php | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 11 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index 8e08ad503d..570d76f618 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -34,22 +34,23 @@ class Notice extends Memcached_DataObject ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ - public $__table = 'notice'; // table name - public $id; // int(4) primary_key not_null - public $profile_id; // int(4) not_null + public $__table = 'notice'; // table name + public $id; // int(4) primary_key not_null + public $profile_id; // int(4) not_null public $uri; // varchar(255) unique_key public $content; // varchar(140) - public $rendered; // text() + public $rendered; // text() public $url; // varchar(255) - public $created; // datetime() not_null - public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP - public $reply_to; // int(4) - public $is_local; // tinyint(1) - public $source; // varchar(32) + public $created; // datetime() not_null + public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP + public $reply_to; // int(4) + public $is_local; // tinyint(1) + public $source; // varchar(32) /* Static get */ - function staticGet($k,$v=null) - { return Memcached_DataObject::staticGet('Notice',$k,$v); } + function staticGet($k,$v=NULL) { + return Memcached_DataObject::staticGet('Notice',$k,$v); + } /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE @@ -746,10 +747,19 @@ class Notice extends Memcached_DataObject if (!$id) { common_log_db_error($reply, 'INSERT', __FILE__); return; + } else { + $replied[$recipient->id] = 1; } } } } } + + foreach (array_keys($replied) as $recipient) { + $user = User::staticGet('id', $recipient); + if ($user) { + mail_attn_notify($user, $notice); + } + } } } diff --git a/lib/mail.php b/lib/mail.php index a1faefc806..9fa86de5cc 100644 --- a/lib/mail.php +++ b/lib/mail.php @@ -573,3 +573,53 @@ function mail_notify_fave($other, $user, $notice) common_init_locale(); mail_to_user($other, $subject, $body); } + +/** + * notify a user that they have received an "attn:" message AKA "@-reply" + * + * @param User $user The user who recevied the notice + * @param Notice $notice The notice that was sent + * + * @return void + */ + +function mail_notify_attn($user, $notice) +{ + if (!$user->email || !$user->emailnotifyattn) { + return; + } + + $sender = $notice->getProfile(); + + $bestname = $sender->getBestName(); + + common_init_locale($user->language); + + $subject = sprintf(_('%s sent a notice to your attention'), $bestname); + + $body = sprintf(_("%1\$s just sent a notice to your attention (an '@-reply') on %2\$s.\n\n". + "The notice is here:\n\n". + "\t%3\$s\n\n" . + "It reads:\n\n". + "\t%4\$s\n\n" . + "You can reply back here:\n\n". + "\t%5\$s\n\n" . + "The list of all @-replies for you here:\n\n" . + "%6\$s\n\n" . + "Faithfully yours,\n" . + "%2\$s\n\n" . + "P.S. You can turn off these email notifications here: %7\$s\n"), + $bestname, + common_config('site', 'name'), + common_local_url('shownotice', + array('notice' => $notice->id)), + $notice->content, + common_local_url('newnotice', + array('replyto' => $sender->nickname)), + common_local_url('replies', + array('nickname' => $user->nickname)), + common_local_url('emailsettings')); + + common_init_locale(); + mail_to_user($user, $subject, $body); +} From b727e8be33f5f5aaf0d319cdd11d422556e6167a Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 16 Feb 2009 18:45:05 -0500 Subject: [PATCH 14/18] Set @-message notification options in email settings Set the @-message notification options in email settings. --- actions/emailsettings.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/actions/emailsettings.php b/actions/emailsettings.php index b84acb2141..634388fddd 100644 --- a/actions/emailsettings.php +++ b/actions/emailsettings.php @@ -164,6 +164,11 @@ class EmailsettingsAction extends AccountSettingsAction $user->emailnotifymsg); $this->elementEnd('li'); $this->elementStart('li'); + $this->checkbox('emailnotifyattn', + _('Send me email when someone sends me an "@-reply".'), + $user->emailnotifyattn); + $this->elementEnd('li'); + $this->elementStart('li'); $this->checkbox('emailnotifynudge', _('Allow friends to nudge me and send me an email.'), $user->emailnotifynudge); @@ -255,6 +260,7 @@ class EmailsettingsAction extends AccountSettingsAction $emailnotifyfav = $this->boolean('emailnotifyfav'); $emailnotifymsg = $this->boolean('emailnotifymsg'); $emailnotifynudge = $this->boolean('emailnotifynudge'); + $emailnotifyattn = $this->boolean('emailnotifyattn'); $emailmicroid = $this->boolean('emailmicroid'); $emailpost = $this->boolean('emailpost'); @@ -270,6 +276,7 @@ class EmailsettingsAction extends AccountSettingsAction $user->emailnotifyfav = $emailnotifyfav; $user->emailnotifymsg = $emailnotifymsg; $user->emailnotifynudge = $emailnotifynudge; + $user->emailnotifyattn = $emailnotifyattn; $user->emailmicroid = $emailmicroid; $user->emailpost = $emailpost; From 419960fd19c21007958973af5151a84e00b164f8 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 16 Feb 2009 18:45:59 -0500 Subject: [PATCH 15/18] wrong name for attn function --- classes/Notice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/Notice.php b/classes/Notice.php index 570d76f618..8300667fa4 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -758,7 +758,7 @@ class Notice extends Memcached_DataObject foreach (array_keys($replied) as $recipient) { $user = User::staticGet('id', $recipient); if ($user) { - mail_attn_notify($user, $notice); + mail_notify_attn($user, $this); } } } From ab3c5d6f2d93843c199ebc4183f9ba307db1377d Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 16 Feb 2009 17:58:24 -0800 Subject: [PATCH 16/18] Updated README with section about installing the Facebook app, and added info about twitterqueuehandler.php and facebookqueuehandler.php. --- README | 53 ++++++++++++++++++++++++++++++++++++++++++++++- config.php.sample | 2 +- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/README b/README index 989fcb7f0a..67dc9a66b3 100644 --- a/README +++ b/README @@ -507,7 +507,7 @@ server is probably a good idea for high-volume sites. needs as a parameter the install path; if you run it from the Laconica dir, "." should suffice. -This will run six (for now) queue handlers: +This will run eight (for now) queue handlers: * xmppdaemon.php - listens for new XMPP messages from users and stores them as notices in the database. @@ -521,6 +521,10 @@ This will run six (for now) queue handlers: of registered users. * xmppconfirmhandler.php - sends confirmation messages to registered users. +* twitterqueuehandler.php - sends queued notices to Twitter for user + who have opted to set up Twitter bridging. +* facebookqueuehandler.php - sends queued notices to Facebook for users + of the built-in Facebook application. Note that these queue daemons are pretty raw, and need your care. In particular, they leak memory, and you may want to restart them on a @@ -553,6 +557,53 @@ Sample cron job: # Update Twitter friends subscriptions every half hour 0,30 * * * * /path/to/php /path/to/laconica/scripts/synctwitterfriends.php>&/dev/null +Built-in Facebook Application +----------------------------- + +Laconica's Facebook application allows your users to automatically +update their Facebook statuses with their latest notices, invite +their friends to use the app (and thus your site), view their notice +timelines, and post notices -- all from within Facebook. The application +is built into Laconica and runs on your host. For automatic Facebook +status updating to work you will need to enable queuing and run the +facebookqueuehandler.php daemon (see the "Queues and daemons" section +above). + +Quick setup instructions*: + +Install the Facebook Developer application on Facebook: + + http://www.facebook.com/developers/ + +Use it to create a new application and generate an API key and secret. +Uncomment the Facebook app section of your config.php and copy in the +key and secret, e.g.: + + # Config section for the built-in Facebook application + $config['facebook']['apikey'] = 'APIKEY'; + $config['facebook']['secret'] = 'SECRET'; + +In Facebook's application editor, specify the following URLs for your app: + +- Callback URL: http://example.net/mublog/facebook/ +- Post-Remove URL: http://example.net/mublog/facebook/remove +- Post-Add Redirect URL: http://apps.facebook.com/yourapp/ +- Canvas URL: http://apps.facebook.com/yourapp/ + +(Replace 'example.net' with your host's URL, 'mublog' with the path +to your Laconica installation, and 'yourapp' with the name of the +Facebook application you created.) + +Additionally, Choose "Web" for Application type in the Advanced tab. +In the "Canvas setting" section, choose the "FBML" for Render Method, +"Smart Size" for IFrame size, and "Full width (760px)" for Canvas Width. +Everything else can be left with default values. + +*For more detailed instructions please see the installation guide on the +Laconica wiki: + + http://laconi.ca/trac/wiki/FacebookApplication + Sitemaps -------- diff --git a/config.php.sample b/config.php.sample index 3fa898e1be..da31545074 100644 --- a/config.php.sample +++ b/config.php.sample @@ -147,7 +147,7 @@ $config['sphinx']['port'] = 3312; #$config['profile']['banned'][] = 'hacker'; #$config['profile']['banned'][] = 12345; -# config section for the built-in Facebook application +# Config section for the built-in Facebook application #$config['facebook']['apikey'] = 'APIKEY'; #$config['facebook']['secret'] = 'SECRET'; From 4327ae19d49384ca2f4b65b04926fb2fbea7d28d Mon Sep 17 00:00:00 2001 From: Meitar Moscovitz Date: Tue, 17 Feb 2009 18:37:02 +1100 Subject: [PATCH 17/18] Fixes ticket:1053; removes spacing between hash and tag on profile page. --- actions/showstream.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/actions/showstream.php b/actions/showstream.php index c736c99b5d..65482167e1 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -292,11 +292,11 @@ class ShowstreamAction extends Action $this->elementStart('ul', 'tags xoxo'); foreach ($tags as $tag) { $this->elementStart('li'); - $this->element('span', 'mark_hash', '#'); - $this->element('a', array('rel' => 'tag', - 'href' => common_local_url('peopletag', - array('tag' => $tag))), - $tag); + // Avoid space by using raw output. + $pt = '#'; + $this->raw($pt); $this->elementEnd('li'); } $this->elementEnd('ul'); From 75ebd45ebdcf26849e47d3c11a2cc2aa6e946c01 Mon Sep 17 00:00:00 2001 From: Sean Murphy Date: Mon, 9 Feb 2009 17:29:27 -0500 Subject: [PATCH 18/18] Fixed #1170: Auto-linking bug when URL cotains special chars. --- lib/util.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/util.php b/lib/util.php index 7ce4e229eb..5204693bc5 100644 --- a/lib/util.php +++ b/lib/util.php @@ -412,8 +412,8 @@ function common_replace_urls_callback($text, $callback) { // Then clean up what the regex left behind $offset = 0; - foreach($matches[0] as $url) { - $url = htmlspecialchars_decode($url); + foreach($matches[0] as $orig_url) { + $url = htmlspecialchars_decode($orig_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; @@ -456,6 +456,9 @@ function common_replace_urls_callback($text, $callback) { if (!in_array($url_parts[2], $tlds)) continue; + // Put the url back the way we found it. + $url = (mb_strpos($orig_url, htmlspecialchars($url)) === FALSE) ? $url:htmlspecialchars($url); + // Call user specified func $modified_url = $callback($url);

Download latest version from here