From: <lph...@us...> - 2008-09-29 14:53:38
|
Revision: 14895 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=14895&view=rev Author: lphuberdeau Date: 2008-09-29 14:53:29 +0000 (Mon, 29 Sep 2008) Log Message: ----------- [MOD] Remove {draw} from parser Modified Paths: -------------- trunk/lib/tikilib.php Added Paths: ----------- trunk/lib/wiki-plugins/wikiplugin_draw.php Modified: trunk/lib/tikilib.php =================================================================== --- trunk/lib/tikilib.php 2008-09-29 14:43:19 UTC (rev 14894) +++ trunk/lib/tikilib.php 2008-09-29 14:53:29 UTC (rev 14895) @@ -5959,52 +5959,6 @@ // smileys $data = $this->parse_smileys($data); - // Replace links to slideshows - if ($prefs['feature_drawings'] == 'y') { - // Replace drawings - // Replace rss modules - $pars = parse_url($_SERVER["REQUEST_URI"]); - - $pars_parts = split('/', $pars["path"]); - $pars = array(); - - $temp_max = count($pars_parts) - 1; - for ($i = 0; $i < $temp_max; $i++) { - $pars[] = $pars_parts[$i]; - } - - $pars = join('/', $pars); - - if (preg_match_all("/\{draw +name=([A-Za-z_\-0-9]+) *\}/", $data, $draws)) { - //$this->invalidate_cache($page); - $temp_max = count($draws[0]); - for ($i = 0; $i < $temp_max; $i++) { - $id = $draws[1][$i]; - $repl = ''; - if ($tikidomain) { - $name = $tikidomain.'/'.$id . '.gif'; - } else { - $name = $id . '.gif'; - } - if (file_exists("img/wiki/$name")) { - if ($tiki_p_edit_drawings == 'y' || $tiki_p_admin_drawings == 'y') { - $repl = "<a href='#' onclick=\"javascript:window.open('tiki-editdrawing.php?page=" . urlencode($page). "&path=$pars&drawing={$id}','','menubar=no,width=252,height=25');\"><img border='0' src='img/wiki/$name' alt='click to edit' /></a>"; - } else { - $repl = "<img border='0' src='img/wiki/$name' alt='a drawing' />"; - } - } else { - if ($tiki_p_edit_drawings == 'y' || $tiki_p_admin_drawings == 'y') { - $repl = "<a class='wiki' href='#' onclick=\"javascript:window.open('tiki-editdrawing.php?page=" . urlencode($page). "&path=$pars&drawing={$id}','','menubar=no,width=252,height=25');\">click here to create draw $id</a>"; - } else { - $repl = tra('drawing not found'); - } - } - - $data = str_replace($draws[0][$i], $repl, $data); - } - } - } - // linebreaks using %%% $data = str_replace("%%%", "<br />", $data); Added: trunk/lib/wiki-plugins/wikiplugin_draw.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_draw.php (rev 0) +++ trunk/lib/wiki-plugins/wikiplugin_draw.php 2008-09-29 14:53:29 UTC (rev 14895) @@ -0,0 +1,63 @@ +<?php + +function wikiplugin_draw_info() +{ + return array( + 'name' => tra('Draw'), + 'description' => tra('Displays drawings in the wiki page'), + 'prefs' => array( 'feature_drawings' ), + 'params' => array( + 'name' => array( + 'name' => tra('Name'), + 'description' => tra('Name of the drawing to display.'), + 'required' => true, + ), + ), + ); +} + +function wikiplugin_draw( $data, $params ) +{ + global $tiki_p_edit_drawings, $tiki_p_admin_drawings, $page, $tikidomain; + $pars = parse_url($_SERVER["REQUEST_URI"]); + + $pars_parts = split('/', $pars["path"]); + $pars = array(); + + $temp_max = count($pars_parts) - 1; + for ($i = 0; $i < $temp_max; $i++) { + $pars[] = $pars_parts[$i]; + } + + $pars = join('/', $pars); + + if( ! isset($params['name'] ) ) + return '^' . tra("Name parameter missing") . '^'; + + $id = $params['name']; + + $repl = ''; + if ($tikidomain) { + $name = $tikidomain.'/'.$id . '.gif'; + } else { + $name = $id . '.gif'; + } + + if (file_exists("img/wiki/$name")) { + if ($tiki_p_edit_drawings == 'y' || $tiki_p_admin_drawings == 'y') { + $repl = "<a href='#' onclick=\"javascript:window.open('tiki-editdrawing.php?page=" . urlencode($page). "&path=$pars&drawing={$id}','','menubar=no,width=252,height=25');\"><img border='0' src='img/wiki/$name' alt='click to edit' /></a>"; + } else { + $repl = "<img border='0' src='img/wiki/$name' alt='a drawing' />"; + } + } else { + if ($tiki_p_edit_drawings == 'y' || $tiki_p_admin_drawings == 'y') { + $repl = "<a class='wiki' href='#' onclick=\"javascript:window.open('tiki-editdrawing.php?page=" . urlencode($page). "&path=$pars&drawing={$id}','','menubar=no,width=252,height=25');\">click here to create draw $id</a>"; + } else { + $repl = tra('drawing not found'); + } + } + + return $repl; +} + +?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lph...@us...> - 2008-10-02 17:14:05
|
Revision: 14966 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=14966&view=rev Author: lphuberdeau Date: 2008-10-02 17:13:52 +0000 (Thu, 02 Oct 2008) Log Message: ----------- [ENH] Allow generic parameter passing in the flash plugin Modified Paths: -------------- trunk/lib/wiki-plugins/wikiplugin_flash.php Added Paths: ----------- trunk/lib/swfobject.js Added: trunk/lib/swfobject.js =================================================================== --- trunk/lib/swfobject.js (rev 0) +++ trunk/lib/swfobject.js 2008-10-02 17:13:52 UTC (rev 14966) @@ -0,0 +1,5 @@ +/* SWFObject v2.1 <http://code.google.com/p/swfobject/> + Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis + This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> +*/ +var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");J=C("__ie_ondomload");if(J){I(J,"onreadystatechange",S)}}catch(q){}}if(h.webkit&&typeof K.readyState!=b){Z=setInterval(function(){if(/loaded|complete/.test(K.readyState)){E()}},10)}if(typeof K.addEventListener!=b){K.addEventListener("DOMContentLoaded",E,null)}R(E)}();function S(){if(J.readyState=="complete"){J.parentNode.removeChild(J);E()}}function E(){if(e){return }if(h.ie&&h.win){var v=a("span");try{var u=K.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeChild(u)}catch(w){return }}e=true;if(Z){clearInterval(Z);Z=null}var q=o.length;for(var r=0;r<q;r++){o[r]()}}function f(q){if(e){q()}else{o[o.length]=q}}function R(r){if(typeof j.addEventListener!=b){j.addEventListener("load",r,false)}else{if(typeof K.addEventListener!=b){K.addEventListener("load",r,false)}else{if(typeof j.attachEvent!=b){I(j,"onload",r)}else{if(typeof j.onload=="function"){var q=j.onload;j.onload=function(){q();r()}}else{j.onload=r}}}}}function H(){var t=N.length;for(var q=0;q<t;q++){var u=N[q].id;if(h.pv[0]>0){var r=C(u);if(r){N[q].width=r.getAttribute("width")?r.getAttribute("width"):"0";N[q].height=r.getAttribute("height")?r.getAttribute("height"):"0";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{if(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)}}}}else{W(u,true)}}}function Y(t){var q=t.getElementsByTagName(Q)[0];if(q){var w=a("embed"),y=q.attributes;if(y){var v=y.length;for(var u=0;u<v;u++){if(y[u].nodeName=="DATA"){w.setAttribute("src",y[u].nodeValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var x=q.childNodes;if(x){var z=x.length;for(var r=0;r<z;r++){if(x[r].nodeType==1&&x[r].nodeName=="PARAM"){w.setAttribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.parentNode.replaceChild(w,t)}}function k(w){A=true;var u=C(w.id);if(u){if(w.altContentId){var y=C(w.altContentId);if(y){M=y;l=w.altContentId}}else{M=G(u)}if(!(/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width="310"}if(!(/%$/.test(w.height))&&parseInt(w.height,10)<137){w.height="137"}K.title=K.title.slice(0,47)+" - Flash Player Installation";var z=h.ie&&h.win?"ActiveX":"PlugIn",q=K.title,r="MMredirectURL="+j.location+"&MMplayerType="+z+"&MMdoctitle="+q,x=w.id;if(h.ie&&h.win&&u.readyState!=4){var t=a("div");x+="SWFObjectNew";t.setAttribute("id",x);u.parentNode.insertBefore(t,u);u.style.display="none";var v=function(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.expressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}function O(t){if(h.ie&&h.win&&t.readyState!=4){var r=a("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t),r);t.style.display="none";var q=function(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parentNode.replaceChild(G(t),t)}}function G(v){var u=a("div");if(h.win&&h.ie){u.innerHTML=v.innerHTML}else{var r=v.getElementsByTagName(Q)[0];if(r){var w=r.childNodes;if(w){var q=w.length;for(var t=0;t<q;t++){if(!(w[t].nodeType==1&&w[t].nodeName=="PARAM")&&!(w[t].nodeType==8)){u.appendChild(w[t].cloneNode(true))}}}}}return u}function U(AG,AE,t){var q,v=C(t);if(v){if(typeof AG.id==b){AG.id=t}if(h.ie&&h.win){var AF="";for(var AB in AG){if(AG[AB]!=Object.prototype[AB]){if(AB.toLowerCase()=="data"){AE.movie=AG[AB]}else{if(AB.toLowerCase()=="styleclass"){AF+=' class="'+AG[AB]+'"'}else{if(AB.toLowerCase()!="classid"){AF+=" "+AB+'="'+AG[AB]+'"'}}}}}var AD="";for(var AA in AE){if(AE[AA]!=Object.prototype[AA]){AD+='<param name="'+AA+'" value="'+AE[AA]+'" />'}}v.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</object>";i[i.length]=AG.id;q=C(AG.id)}else{if(h.webkit&&h.webkit<312){var AC=a("embed");AC.setAttribute("type",P);for(var z in AG){if(AG[z]!=Object.prototype[z]){if(z.toLowerCase()=="data"){AC.setAttribute("src",AG[z])}else{if(z.toLowerCase()=="styleclass"){AC.setAttribute("class",AG[z])}else{if(z.toLowerCase()!="classid"){AC.setAttribute(z,AG[z])}}}}}for(var y in AE){if(AE[y]!=Object.prototype[y]){if(y.toLowerCase()!="movie"){AC.setAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=AC}else{var u=a(Q);u.setAttribute("type",P);for(var x in AG){if(AG[x]!=Object.prototype[x]){if(x.toLowerCase()=="styleclass"){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!="classid"){u.setAttribute(x,AG[x])}}}}for(var w in AE){if(AE[w]!=Object.prototype[w]&&w.toLowerCase()!="movie"){F(u,w,AE[w])}}v.parentNode.replaceChild(u,v);q=u}}}return q}function F(t,q,r){var u=a("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appendChild(u)}function X(r){var q=C(r);if(q&&(q.nodeName=="OBJECT"||q.nodeName=="EMBED")){if(h.ie&&h.win){if(q.readyState==4){B(r)}else{j.attachEvent("onload",function(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var r=C(t);if(r){for(var q in r){if(typeof r[q]=="function"){r[q]=null}}r.parentNode.removeChild(r)}}function C(t){var q=null;try{q=K.getElementById(t)}catch(r){}return q}function a(q){return K.createElement(q)}function I(t,q,r){t.attachEvent(q,r);d[d.length]=[t,q,r]}function c(t){var r=h.pv,q=t.split(".");q[0]=parseInt(q[0],10);q[1]=parseInt(q[1],10)||0;q[2]=parseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]==q[0]&&r[1]>q[1])||(r[0]==q[0]&&r[1]==q[1]&&r[2]>=q[2]))?true:false}function V(v,r){if(h.ie&&h.mac){return }var u=K.getElementsByTagName("head")[0],t=a("style");t.setAttribute("type","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof K.createTextNode!=b){t.appendChild(K.createTextNode(v+" {"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof K.styleSheets!=b&&K.styleSheets.length>0){var q=K.styleSheets[K.styleSheets.length-1];if(typeof q.addRule==Q){q.addRule(v,r)}}}function W(t,q){var r=q?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=r}else{V("#"+t,"visibility:"+r)}}function g(s){var r=/[\\\"<>\.;]/;var q=r.exec(s)!=null;return q?encodeURIComponent(s):s}var D=function(){if(h.ie&&h.win){window.attachEvent("onunload",function(){var w=d.length;for(var v=0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var t=i.length;for(var u=0;u<t;u++){X(i[u])}for(var r in h){h[r]=null}h=null;for(var q in swfobject){swfobject[q]=null}swfobject=null})}}();return{registerObject:function(u,q,t){if(!h.w3cdom||!u||!q){return }var r={};r.id=u;r.swfVersion=q;r.expressInstall=t?t:false;N[N.length]=r;W(u,false)},getObjectById:function(v){var q=null;if(h.w3cdom){var t=C(v);if(t){var u=t.getElementsByTagName(Q)[0];if(!u||(u&&typeof t.SetVariable!=b)){q=t}else{if(typeof u.SetVariable!=b){q=u}}}}return q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!AD||!q){return }AB+="";AD+="";if(c(q)){W(AE,false);var AA={};if(AC&&typeof AC===Q){for(var v in AC){if(AC[v]!=Object.prototype[v]){AA[v]=AC[v]}}}AA.data=x;AA.width=AB;AA.height=AD;var y={};if(z&&typeof z===Q){for(var u in z){if(z[u]!=Object.prototype[u]){y[u]=z[u]}}}if(r&&typeof r===Q){for(var t in r){if(r[t]!=Object.prototype[t]){if(typeof y.flashvars!=b){y.flashvars+="&"+t+"="+r[t]}else{y.flashvars=t+"="+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id==AE){W(AE,true)}})}else{if(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=true;W(AE,false);f(function(){var AF={};AF.id=AF.altContentId=AE;AF.width=AB;AF.height=AD;AF.expressInstall=w;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParamValue:function(v){var u=K.location.search||K.location.hash;if(v==null){return g(u)}if(u){var t=u.substring(1).split("&");for(var r=0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("="))==v){return g(t[r].substring((t[r].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(A&&M){var q=C(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.win){M.style.display="block"}}M=null;l=null;A=false}}}}}(); \ No newline at end of file Modified: trunk/lib/wiki-plugins/wikiplugin_flash.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_flash.php 2008-10-02 17:01:13 UTC (rev 14965) +++ trunk/lib/wiki-plugins/wikiplugin_flash.php 2008-10-02 17:13:52 UTC (rev 14966) @@ -41,32 +41,41 @@ } function wikiplugin_flash($data, $params) { + static $id = 0; - extract ($params,EXTR_SKIP); + global $headerlib; - if (empty($movie)) { + if (! isset($params['movie']) ) { return tra('Missing parameter movie to the plugin flash'); } - if (!isset($width)) { - $width = "425"; - } + $defaults = array( + 'width' => 425, + 'height' => 350, + 'quality' => 'high', + 'version' => '9.0.0', + ); - if (!isset($height)) { - $height = "350"; - } + $myId = 'wp-flash-' . ++$id; + $params = array_merge( $defaults, $params ); - if (!isset($quality)) { - $quality = "high"; - } + $movie = json_encode( $params['movie'] ); + $div = json_encode( $myId ); + $width = (int) $params['width']; + $height = (int) $params['height']; + $version = json_encode( $params['version'] ); - $asetup = "<OBJECT CLASSID=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0\" WIDTH=\"$width\" HEIGHT=\"$height\">"; - $asetup .= "<PARAM NAME=\"movie\" VALUE=\"$movie\">"; - $asetup .= "<PARAM NAME=\"quality\" VALUE=\"$quality\">"; - $asetup .= "<PARAM NAME=\"wmode\" VALUE=\"transparent\">"; - $asetup .= "<embed src=\"$movie\" quality=\"$quality\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" width=\"$width\" height=\"$height\" wmode=\"transparent\"></embed></object>"; + unset( $params['movie'], $params['width'], $params['height'], $params['version'] ); + $params = json_encode($params); - return $asetup; + $js = <<<JS +swfobject.embedSWF( $movie, $div, $width, $height, $version, {}, $params, {} ); +JS; + + $headerlib->add_jsfile( 'lib/swfobject.js' ); + $headerlib->add_js( $js ); + + return "~np~<div id=\"$myId\">" . tra('Flash player not available.') . "</div>~/np~"; } ?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lph...@us...> - 2008-10-04 18:29:13
|
Revision: 14985 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=14985&view=rev Author: lphuberdeau Date: 2008-10-04 18:20:05 +0000 (Sat, 04 Oct 2008) Log Message: ----------- [NEW] Add parameter replacement from the URL in the parser Modified Paths: -------------- trunk/lib/setup/prefs.php trunk/lib/tikilib.php Modified: trunk/lib/setup/prefs.php =================================================================== --- trunk/lib/setup/prefs.php 2008-10-03 20:05:54 UTC (rev 14984) +++ trunk/lib/setup/prefs.php 2008-10-04 18:20:05 UTC (rev 14985) @@ -48,6 +48,7 @@ 'feature_warn_on_edit' => 'y', 'feature_wiki_1like_redirection' => 'y', 'feature_wiki_allowhtml' => 'n', + 'feature_wiki_argvariable' => 'n', 'feature_wiki_attachments' => 'n', 'feature_wiki_comments' => 'n', 'feature_wiki_description' => 'n', @@ -58,6 +59,7 @@ 'feature_wiki_footnotes' => 'n', 'feature_wiki_icache' => 'n', 'feature_wiki_import_html' => 'n', + 'feature_wiki_mindmap' => 'n', 'feature_wiki_monosp' => 'n', 'feature_wiki_multiprint' => 'n', 'feature_wiki_notepad' => 'n', Modified: trunk/lib/tikilib.php =================================================================== --- trunk/lib/tikilib.php 2008-10-03 20:05:54 UTC (rev 14984) +++ trunk/lib/tikilib.php 2008-10-04 18:20:05 UTC (rev 14985) @@ -5845,6 +5845,38 @@ } } + if( $prefs['feature_wiki_argvariable'] == 'y' ) { + if (preg_match_all("/\\{\\{((\w+)(\\|([^\\}]+))?)\\}\\}/",$data,$args, PREG_SET_ORDER)) { + $needles = array(); + $replacements = array(); + + foreach( $args as $arg ) { + $value = $arg[4]; + $name = $arg[2]; + + switch( $name ) { + case 'user': + $value = $user; + break; + case 'page': + $value = $page; + break; + default: + if( isset($_GET[$name]) ) + $value = $_GET[$name]; + break; + } + + if( ! empty( $value ) ) { + $needles[] = $arg[0]; + $replacements[] = $value; + } + } + + $data = str_replace( $needles, $replacements, $data ); + } + } + /* <x> XSS Sanitization handling */ // Converts <x> (<x> tag using HTML entities) into the tag <x>. This tag comes from the input sanitizer (XSS filter). This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ny...@us...> - 2008-10-10 12:24:05
|
Revision: 15075 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=15075&view=rev Author: nyloth Date: 2008-10-10 12:23:51 +0000 (Fri, 10 Oct 2008) Log Message: ----------- [FIX] polls and surveys: when clearing stats or removing polls/surveys, also clean 'tiki_user_votings' to allow the user to vote again. Closes bug #1754 (thanx adren). Modified Paths: -------------- trunk/lib/polls/polllib_shared.php trunk/lib/surveys/surveylib.php Modified: trunk/lib/polls/polllib_shared.php =================================================================== --- trunk/lib/polls/polllib_shared.php 2008-10-10 12:19:33 UTC (rev 15074) +++ trunk/lib/polls/polllib_shared.php 2008-10-10 12:23:51 UTC (rev 15075) @@ -111,16 +111,20 @@ } function remove_poll($pollId) { - $query = "delete from `tiki_poll_objects` where `pollId`=?"; - $result = $this->query($query,array((int) $pollId)); - $query = "delete from `tiki_polls` where `pollId`=?"; - $result = $this->query($query,array((int) $pollId)); - $query = "delete from `tiki_poll_options` where `pollId`=?"; - $result = $this->query($query,array((int) $pollId)); - $this->remove_object('poll', $pollId); - return true; - } + $query = "delete from `tiki_poll_objects` where `pollId`=?"; + $result = $this->query($query,array((int) $pollId)); + $query = "delete from `tiki_polls` where `pollId`=?"; + $result = $this->query($query,array((int) $pollId)); + $query = "delete from `tiki_poll_options` where `pollId`=?"; + $result = $this->query($query,array((int) $pollId)); + $this->remove_object('poll', $pollId); + $query = 'delete from `tiki_user_votings` where `id`=?'; + $this->query($query, array('poll'.(int)$pollId)); + + return true; + } + function get_catObjectId($cat_type,$cat_objid) { return $this->getOne("select `objectId` from `tiki_objects` where `type`=? and `itemId`=?",array($cat_type,$cat_objid)); } Modified: trunk/lib/surveys/surveylib.php =================================================================== --- trunk/lib/surveys/surveylib.php 2008-10-10 12:19:33 UTC (rev 15074) +++ trunk/lib/surveys/surveylib.php 2008-10-10 12:23:51 UTC (rev 15075) @@ -58,6 +58,9 @@ $query = "update `tiki_survey_questions` set `average`=0, `value`=0, `votes`=0 where `surveyId`=?"; $result = $this->query($query, array((int)$surveyId)); + + $query = 'delete from `tiki_user_votings` where `id`=?'; + $result = $this->query($query, array('survey'.(int)$surveyId)); } function replace_survey($surveyId, $name, $description, $status) { @@ -275,6 +278,10 @@ $query = "delete from `tiki_survey_questions` where `surveyId`=?"; $result = $this->query($query,array((int)$surveyId)); $this->remove_object('survey', $surveyId); + + $query = 'delete from `tiki_user_votings` where `id`=?'; + $result = $this->query($query, array('survey'.(int)$surveyId)); + return true; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lph...@us...> - 2008-10-16 17:30:48
|
Revision: 15178 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=15178&view=rev Author: lphuberdeau Date: 2008-10-16 17:30:37 +0000 (Thu, 16 Oct 2008) Log Message: ----------- [FIX] Incompatibility with PDO breaking profiles (among other things probably) Modified Paths: -------------- trunk/lib/tikidblib-pdo.php trunk/lib/tikilib.php Modified: trunk/lib/tikidblib-pdo.php =================================================================== --- trunk/lib/tikidblib-pdo.php 2008-10-16 17:26:09 UTC (rev 15177) +++ trunk/lib/tikidblib-pdo.php 2008-10-16 17:30:37 UTC (rev 15178) @@ -147,7 +147,6 @@ // Gets one column for the database. function getOne($query, $values = null, $reporterrors = true, $offset = 0) { - error_reporting(E_ALL); $result = $this->query($query, $values, 1, $offset); $res = $result->fetchRow(); if ($result) { Modified: trunk/lib/tikilib.php =================================================================== --- trunk/lib/tikilib.php 2008-10-16 17:26:09 UTC (rev 15177) +++ trunk/lib/tikilib.php 2008-10-16 17:30:37 UTC (rev 15178) @@ -460,11 +460,11 @@ /*shared*/ function dir_stats() { $aux = array(); - $aux["valid"] = $this->db->getOne("select count(*) from `tiki_directory_sites` where `isValid`=?",array('y')); - $aux["invalid"] = $this->db->getOne("select count(*) from `tiki_directory_sites` where `isValid`=?",array('n')); - $aux["categs"] = $this->db->getOne("select count(*) from `tiki_directory_categories`",array()); - $aux["searches"] = $this->db->getOne("select sum(`hits`) from `tiki_directory_search`",array()); - $aux["visits"] = $this->db->getOne("select sum(`hits`) from `tiki_directory_sites`",array()); + $aux["valid"] = $this->getOne("select count(*) from `tiki_directory_sites` where `isValid`=?",array('y')); + $aux["invalid"] = $this->getOne("select count(*) from `tiki_directory_sites` where `isValid`=?",array('n')); + $aux["categs"] = $this->getOne("select count(*) from `tiki_directory_categories`",array()); + $aux["searches"] = $this->getOne("select sum(`hits`) from `tiki_directory_search`",array()); + $aux["visits"] = $this->getOne("select sum(`hits`) from `tiki_directory_sites`",array()); return $aux; } @@ -6923,8 +6923,8 @@ if (count($wexs) == 2) { $wkname = $wexs[0]; - if ($this->db->getOne("select count(*) from `tiki_extwiki` where `name`=?",array($wkname)) == 1) { - $wkurl = $this->db->getOne("select `extwiki` from `tiki_extwiki` where `name`=?",array($wkname)); + if ($this->getOne("select count(*) from `tiki_extwiki` where `name`=?",array($wkname)) == 1) { + $wkurl = $this->getOne("select `extwiki` from `tiki_extwiki` where `name`=?",array($wkname)); $wkurl = '<a href="' . str_replace('$page', urlencode($wexs[1]), $wkurl). '" class="wiki external ' . $reltype . '">' . $wexs[1] . '</a>'; return $wkurl; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lph...@us...> - 2008-10-21 23:23:27
|
Revision: 15254 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=15254&view=rev Author: lphuberdeau Date: 2008-10-21 23:23:20 +0000 (Tue, 21 Oct 2008) Log Message: ----------- [MRG] Automatic merge, branches/2.0 15194 to 15221 Modified Paths: -------------- trunk/lib/search/searchlib.php trunk/lib/searchlib.php Modified: trunk/lib/search/searchlib.php =================================================================== --- trunk/lib/search/searchlib.php 2008-10-21 19:17:31 UTC (rev 15253) +++ trunk/lib/search/searchlib.php 2008-10-21 23:23:20 UTC (rev 15254) @@ -805,8 +805,12 @@ (".implode(',',array_fill(0,count($words),'?')).") and s.`location`='dir_site' and ".$this->sql_cast("s.`page`","int")."=d.`siteId` and - cs.`siteId`=d.`siteId` - order by `hits` desc"; + cs.`siteId`=d.`siteId`"; + global $tiki_p_admin; + if ($tiki_p_admin != 'y') { + $query .= " and d.`isValid` = 'y'"; + } + $query .= " order by `hits` desc"; $result=$this->query($query,$words,$maxRecords,$offset); $cant=0; $ret=array(); Modified: trunk/lib/searchlib.php =================================================================== --- trunk/lib/searchlib.php 2008-10-21 19:17:31 UTC (rev 15253) +++ trunk/lib/searchlib.php 2008-10-21 23:23:20 UTC (rev 15254) @@ -398,6 +398,10 @@ 'pageName' => 'd.`name`', 'search' => array('d.`name`', 'd.`description`'), ); + global $tiki_p_admin; + if ($tiki_p_admin != 'y') { + $search_directory['filter'] = "d.`isValid` = 'y'"; + } return $this->_find($search_directory, $words, $offset, $maxRecords, $fulltext, $filter, $boolean); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gi...@us...> - 2008-10-28 09:32:19
|
Revision: 15348 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=15348&view=rev Author: gillesm Date: 2008-10-28 09:29:37 +0000 (Tue, 28 Oct 2008) Log Message: ----------- [NEW] groupalertlib implementation Added Paths: ----------- trunk/lib/groupalert/ trunk/lib/groupalert/groupalertlib.php Added: trunk/lib/groupalert/groupalertlib.php =================================================================== --- trunk/lib/groupalert/groupalertlib.php (rev 0) +++ trunk/lib/groupalert/groupalertlib.php 2008-10-28 09:29:37 UTC (rev 15348) @@ -0,0 +1,35 @@ +<?php +/* + groupalert is used to select user of groups to send alert email (groupware notification) +*/ + +if (strpos($_SERVER["SCRIPT_NAME"],basename(__FILE__)) !== false) { + header("location: index.php"); + exit; +} + +class groupAlertLib extends TikiLib { + + function GroupAlertLib($db) { + parent::TikiLib($db); + } + + function AddGroup ($ObjectType, $ObjectNumber,$GroupName,$displayEachUser="y" ) { + $query ="delete from `tiki_groupalert` where ( `objectType`= ? and `objectId` = ?) "; + $this->query($query,array($ObjectType,$ObjectNumber)); + if ( $GroupName != '' ) { + $query = "insert into `tiki_groupalert` ( `groupName`,`objectType`,`objectId`,`displayEachuser` ) values (?,?,?,?)"; + $this->query($query,array($GroupName,$ObjectType,$ObjectNumber,$displayEachUser)); + } + return true; + } + + function GetGroup ($ObjectType,$ObjectNumber) { + $res= $this->getOne( "select `groupName` from `tiki_groupalert` where ( `objectType` = ? and `objectId` = ? )", array($ObjectType,$ObjectNumber)); + return $res ; + } + +} +global $tikilib,$dbTiki; +$groupalertlib = new groupAlertLib($dbTiki); +?> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sy...@us...> - 2008-11-03 19:59:48
|
Revision: 15488 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=15488&view=rev Author: sylvieg Date: 2008-11-03 17:20:08 +0000 (Mon, 03 Nov 2008) Log Message: ----------- [FIX]rss: one query less per RSS Modified Paths: -------------- trunk/lib/rss/rsslib.php trunk/lib/wiki-plugins/wikiplugin_rss.php Modified: trunk/lib/rss/rsslib.php =================================================================== --- trunk/lib/rss/rsslib.php 2008-11-03 16:18:13 UTC (rev 15487) +++ trunk/lib/rss/rsslib.php 2008-11-03 17:20:08 UTC (rev 15488) @@ -455,20 +455,22 @@ } /* parse xml data and return it in an array */ - function parse_rss_data($data, $rssId) { - $showPubDate = $this->get_rss_showPubDate($rssId); - $showTitle = $this->get_rss_showTitle($rssId); - + function parse_rss_data($data, $rssId, $info='') { $news = array(); - + if (empty($info)) { + $info = $this->get_rss_module($rssId); + } + if (empty($info)) { + return $news; + } //Only include the title if the option for doing that (showTitle) has been set. - if ($showTitle=="y") { + if ($info['showTitle'] == 'y') { // get title and link of the feed: preg_match("/<title>(.*?)<\/title>/i", $data, $title); preg_match("/<link>(.*?)<\/link>/i", $data, $link); // set "y" if title should be shown: - $anew["isTitle"]=$showTitle; + $anew["isTitle"]=$info['showTitle']; $anew["title"] = ""; if (isset($title[1])) { $anew["title"] = $title[1]; } $anew["link"] = ""; @@ -528,7 +530,7 @@ $anew["description"] = $description[2][0]; //Because of the CDATA-matching, the index is off by 1. } $anew["pubDate"] = ''; - if ( isset($pubdate[1][0]) && ($showPubDate == 'y') ) + if ( isset($pubdate[1][0]) && ($info['showPubDate'] == 'y') ) { $anew["pubDate"] = $pubdate[1][0]; } Modified: trunk/lib/wiki-plugins/wikiplugin_rss.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_rss.php 2008-11-03 16:18:13 UTC (rev 15487) +++ trunk/lib/wiki-plugins/wikiplugin_rss.php 2008-11-03 17:20:08 UTC (rev 15488) @@ -85,10 +85,11 @@ $repl = ''; $items = array(); foreach ( $ids as $val ) { - if ( ! ($rssdata = $rsslib->get_rss_module_content($val)) ) { + if ( ! ($rss = $rsslib->get_rss_module($val)) ) { $repl = tra('RSS Id incorrect:').' '.$val; } - $itemsrss = $rsslib->parse_rss_data($rssdata, $val); + $itemsrss = $rsslib->parse_rss_data($rss['content'], $val, $rss); + $items = array_merge($items, $itemsrss); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ny...@us...> - 2008-11-04 09:00:12
|
Revision: 15496 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=15496&view=rev Author: nyloth Date: 2008-11-04 09:00:07 +0000 (Tue, 04 Nov 2008) Log Message: ----------- [NEW] new survey wiki-plugin (to include a survey into a wiki page) Modified Paths: -------------- trunk/lib/setup/prefs.php Added Paths: ----------- trunk/lib/wiki-plugins/wikiplugin_survey.php Modified: trunk/lib/setup/prefs.php =================================================================== --- trunk/lib/setup/prefs.php 2008-11-04 08:58:37 UTC (rev 15495) +++ trunk/lib/setup/prefs.php 2008-11-04 09:00:07 UTC (rev 15496) @@ -222,6 +222,7 @@ 'wikiplugin_subscribegroup' => 'y', 'wikiplugin_subscribegroups' => 'y', 'wikiplugin_sup' => 'y', + 'wikiplugin_survey' => 'y', 'wikiplugin_tag' => 'y', 'wikiplugin_thumb' => 'y', 'wikiplugin_titlesearch' => 'n', Added: trunk/lib/wiki-plugins/wikiplugin_survey.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_survey.php (rev 0) +++ trunk/lib/wiki-plugins/wikiplugin_survey.php 2008-11-04 09:00:07 UTC (rev 15496) @@ -0,0 +1,99 @@ +<?php +/* + * + * SURVEY plugin. Display a survey. + * + * Syntax: + * + * {SURVEY(id=xxx, lang=xxx)}{SURVEY} + * + */ +function wikiplugin_survey_help() { + return tra("survey").":~np~{SURVEY(id=xxx, lang=xxx)}{SURVEY}~/np~"; +} + +function wikiplugin_survey_info() { + return array( + 'name' => tra('Survey'), + 'description' => tra("Displays a survey"), + 'prefs' => array( 'wikiplugin_survey' ), + 'body' => '', + 'params' => array( + 'id' => array( + 'required' => true, + 'name' => tra('Id'), + 'description' => tra('Id'), + ), + 'page' => array( + 'required' => false, + 'name' => tra('Page'), + 'description' => tra('Wiki Page to redirect the user after his vote'), + ), + 'lang' => array( + 'required' => false, + 'name' => tra('Language'), + 'description' => tra('Language'), + ), + ), + ); +} + +function wikiplugin_survey($data, $params) { + global $tiki_p_take_survey; + if ( $tiki_p_take_survey != 'y' ) return ''; + + $result = ''; + if ( !isset($params['id']) ) return ''; + + // Check if user has taken this survey + global $tiki_p_admin, $tikilib, $user; + if ( $tiki_p_admin != 'y' ) { + if ( $tikilib->user_has_voted($user, 'survey'.$params['id']) ) { + include_once('lib/wiki-plugins/wikiplugin_remarksbox.php'); + return wikiplugin_remarksbox( + 'You cannot take this survey twice', + array('type' => 'comment') + ); + } + } + + include_once ('lib/surveys/surveylib.php'); + $questions = $srvlib->list_survey_questions($params['id'], 0, -1, 'position_asc', ''); + + $error_msg = ''; + if ( isset($_REQUEST['surveyId']) && $_REQUEST['surveyId'] == $params['id'] ) { + if ( isset($_REQUEST['vote']) ) { + $srvlib->add_survey_hit($_REQUEST['surveyId']); + } + if ( isset($_REQUEST['ans']) ) { + $srvlib->register_answers($params['id'], $questions['data'], $_REQUEST, $error_msg); + if ( $error_msg == '' ) { + $location = isset($params['page']) ? + 'tiki-index.php?page='.urlencode($params['page']) + : 'tiki-list_surveys.php'; + header('Location: '.$location); + } + } + } + + $survey_info = $srvlib->get_survey($params['id']); + + global $smarty; + $smarty->assign('surveyId', $params['id']); + $smarty->assign('survey_info', $survey_info); + $smarty->assign('questions', $questions['data']); + $smarty->assign('error_msg', $error_msg); + $smarty->assign('show_name', 'n'); + + include_once('lib/smarty_tiki/function.query.php'); + $smarty->assign('form_action', smarty_function_query(array('_type' => 'absolute_path'), $smarty)); + + if ( !empty($params['lang']) ) { + $result .= $smarty->fetchLang($params['lang'], 'tiki-take_survey.tpl'); + } else { + $result .= $smarty->fetch('tiki-take_survey.tpl'); + } + $result = '~np~'.$result.'~/np~'; + + return $result; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <se...@us...> - 2008-11-07 13:19:01
|
Revision: 15559 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=15559&view=rev Author: sept_7 Date: 2008-11-07 13:18:56 +0000 (Fri, 07 Nov 2008) Log Message: ----------- [ENH] use popup div for wikiplugin edition... Modified Paths: -------------- trunk/lib/ajax/ajaxlib.php trunk/lib/tiki-js.js trunk/lib/tikilib.php Modified: trunk/lib/ajax/ajaxlib.php =================================================================== --- trunk/lib/ajax/ajaxlib.php 2008-11-07 10:44:36 UTC (rev 15558) +++ trunk/lib/ajax/ajaxlib.php 2008-11-07 13:18:56 UTC (rev 15559) @@ -188,6 +188,7 @@ } else { $objResponse->addAlert(sprintf(tra("Template %s not registered"),$template)); } + $objResponse->addIncludeScript("tiki-jsplugin.php"); return $objResponse; } Modified: trunk/lib/tiki-js.js =================================================================== --- trunk/lib/tiki-js.js 2008-11-07 10:44:36 UTC (rev 15558) +++ trunk/lib/tiki-js.js 2008-11-07 13:18:56 UTC (rev 15559) @@ -1293,7 +1293,7 @@ target.appendChild( form ); } -function popup_plugin_form( type ) +function popup_plugin_form( type, index, pageName, args, bodyContent, edit_icon ) { var container = document.createElement( 'div' ); container.className = 'plugin-form-float'; @@ -1309,18 +1309,24 @@ icon.style.right = '0px'; icon.style.border = 'none'; + if (!index) { index = 0; } + if (!pageName) { pageName = ''; } + if (!args) { args = {}; } + if (!bodyContent) { bodyContent = ''; } + var form = build_plugin_form( type, - 0, - '', - {}, - '' + index, + pageName, + args, + bodyContent ); form.onsubmit = function() { var meta = tiki_plugins[type]; var params = []; + var edit = edit_icon; for( var k in meta.params ) { @@ -1338,14 +1344,21 @@ insertAt( 'editwiki', blob ); document.body.removeChild( container ); + if (edit) + edit.style.display = 'inline'; return false; } minimize.onclick = function() { + var edit = edit_icon; + if (edit) + edit.style.display = 'inline'; document.body.removeChild( container ); }; document.body.appendChild( container ); + if (edit_icon) + edit_icon.style.display = 'none'; container.appendChild( form ); } Modified: trunk/lib/tikilib.php =================================================================== --- trunk/lib/tikilib.php 2008-11-07 10:44:36 UTC (rev 15558) +++ trunk/lib/tikilib.php 2008-11-07 13:18:56 UTC (rev 15559) @@ -5257,7 +5257,7 @@ include_once('lib/smarty_tiki/function.icon.php'); global $headerlib, $page; $headerlib->add_jsfile( 'tiki-jsplugin.php?plugin=' . urlencode( $plugin_name ) ); - $ret = '~np~<a style="float:right" href="javascript:void(0)" onclick="show_plugin_form(\'' . addslashes($plugin_name) . '\', ' . addslashes($current_index) . ', \'' . addslashes($page) . '\', ' . htmlentities(json_encode($arguments)) . ', ' . htmlentities(json_encode(trim($plugin_data))) . ');this.style.display=\'none\'">'.smarty_function_icon(array('_id'=>'shape_square_edit', 'alt'=>tra('Edit Plugin')), $smarty).'</a><span id="' . $plugin_name . $current_index . '"></span>~/np~'.$ret; + $ret = '~np~<a style="float:right" href="javascript:void(0)" onclick="popup_plugin_form(\'' . addslashes($plugin_name) . '\', ' . addslashes($current_index) . ', \'' . addslashes($page) . '\', ' . htmlentities(json_encode($arguments),ENT_COMPAT,'utf-8') . ', ' . htmlentities(json_encode(trim($plugin_data)),ENT_COMPAT,'utf-8') . ',this)">'.smarty_function_icon(array('_id'=>'shape_square_edit', 'alt'=>tra('Edit Plugin')), $smarty).'</a><span id="' . $plugin_name . $current_index . '"></span>~/np~'.$ret; } } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <se...@us...> - 2008-11-10 16:56:03
|
Revision: 15598 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=15598&view=rev Author: sept_7 Date: 2008-11-10 16:55:55 +0000 (Mon, 10 Nov 2008) Log Message: ----------- [ENH] filgals : add cache for perms on file galleries Modified Paths: -------------- trunk/lib/categories/categlib.php trunk/lib/filegals/filegallib.php trunk/lib/tikilib.php trunk/lib/userslib.php Modified: trunk/lib/categories/categlib.php =================================================================== --- trunk/lib/categories/categlib.php 2008-11-10 15:21:16 UTC (rev 15597) +++ trunk/lib/categories/categlib.php 2008-11-10 16:55:55 UTC (rev 15598) @@ -200,6 +200,7 @@ $this->remove_category($res["categId"]); } $cachelib->invalidate('allcategs'); + $cachelib->empty_type_cache('fgals_perms'); $cachelib->invalidate("allcategs$categId"); $values= array("categoryId"=>$categId, "categoryName"=>$categoryName, "categoryPath"=>$categoryPath, @@ -225,6 +226,7 @@ $query = "update `tiki_categories` set `name`=?, `parentId`=?, `description`=? where `categId`=?"; $result = $this->query($query,array($name,(int) $parentId,$description,(int) $categId)); $cachelib->invalidate('allcategs'); + $cachelib->empty_type_cache('fgals_perms'); $cachelib->invalidate('childcategs'.$parentId); $this->update_category_cache($categId); @@ -242,6 +244,7 @@ $query = "select `categId` from `tiki_categories` where `name`=? and `parentId`=?"; $id = $this->getOne($query,array($name,(int) $parentId)); $cachelib->invalidate('allcategs'); + $cachelib->empty_type_cache('fgals_perms'); $cachelib->invalidate('childcategs'.$parentId); $values= array("categoryId"=>$id, "categoryName"=>$name, "categoryPath"=> $this->get_category_path_string_with_root($id), "description"=>$description, "parentId" => $parentId, "parentName" => $this->get_category_name($parentId), @@ -280,6 +283,7 @@ $this->query($query, array($id)); $cachelib->invalidate('allcategs'); + $cachelib->empty_type_cache('fgals_perms'); return $id; } @@ -602,6 +606,7 @@ $result = $this->query($query,array((int) $catObjectId)); } $cachelib->invalidate('allcategs'); + $cachelib->empty_type_cache('fgals_perms'); } // FUNCTIONS TO CATEGORIZE SPECIFIC OBJECTS //// @@ -1016,6 +1021,7 @@ // Refresh categories global $cachelib; $cachelib->invalidate('allcategs'); + $cachelib->empty_type_cache('fgals_perms'); } } Modified: trunk/lib/filegals/filegallib.php =================================================================== --- trunk/lib/filegals/filegallib.php 2008-11-10 15:21:16 UTC (rev 15597) +++ trunk/lib/filegals/filegallib.php 2008-11-10 16:55:55 UTC (rev 15598) @@ -138,6 +138,8 @@ $info = $this->get_file_info($id); $galleryId = $info['galleryId']; } + global $cachelib; require_once("lib/cache/cachelib.php"); + $cachelib->empty_type_cache('fgals_perms_'.$info['galleryId']."_"); if ($podCastGallery = $this->isPodCastGallery($galleryId)) { $savedir=$prefs['fgal_podcast_dir']; Modified: trunk/lib/tikilib.php =================================================================== --- trunk/lib/tikilib.php 2008-11-10 15:21:16 UTC (rev 15597) +++ trunk/lib/tikilib.php 2008-11-10 16:55:55 UTC (rev 15598) @@ -2146,11 +2146,21 @@ $cant = 0; $n = -1; $need_everything = ( $with_subgals_size && ( $sort_mode == 'size_asc' || $sort_mode == 'filesize_asc' ) ); - + global $cachelib; include_once('lib/cache/cachelib.php'); + $cacheName = md5("group:".implode("\n", $this->get_user_groups($user))); + $cacheType = 'fgals_perms_'.$galleryId."_"; + if ($cachelib->isCached($cacheName, $cacheType)) { + $fgal_perms = unserialize($cachelib->getCached($cacheName, $cacheType)); + } else { + $fgal_perms = array(); + } while ( $res = $result->fetchRow() ) { $object_type = ( $res['isgal'] == 1 ? 'file gallery' : 'file'); - $res['perms'] = $this->get_perm_object($res['id'], $object_type, array(), false); - + if (isset($fgal_perms[$res['id']])) { + $res['perms'] = $fgal_perms[$res['id']]; + } else { + $fgal_perms[$res['id']] = $res['perms'] = $this->get_perm_object($res['id'], $object_type, array(), false); + } // Don't return the current item, if : // the user has no rights to view the file gallery AND no rights to list all galleries (in case it's a gallery) if ( $res['perms']['tiki_p_view_file_gallery'] != 'y' @@ -2178,6 +2188,7 @@ $cant++; } + $cachelib->cacheItem($cacheName, serialize($fgal_perms), $cacheType); if ( ! $need_everything ) $cant += $offset; Modified: trunk/lib/userslib.php =================================================================== --- trunk/lib/userslib.php 2008-11-10 15:21:16 UTC (rev 15597) +++ trunk/lib/userslib.php 2008-11-10 16:55:55 UTC (rev 15598) @@ -1555,6 +1555,7 @@ global $cachelib; $cachelib->invalidate("allperms"); + $cachelib->empty_type_cache("fgals_perms"); global $menulib; include_once('lib/menubuilder/menulib.php'); $menulib->empty_menu_cache(); @@ -1571,6 +1572,7 @@ global $cachelib; $cachelib->invalidate("allperms"); + $cachelib->empty_type_cache("fgals_perms"); $cachelib->invalidate("groupperms_$group"); global $menulib; include_once('lib/menubuilder/menulib.php'); @@ -1588,6 +1590,7 @@ global $cachelib; $cachelib->invalidate("allperms"); + $cachelib->empty_type_cache("fgals_perms"); $cachelib->invalidate("groupperms_$group"); global $menulib; include_once('lib/menubuilder/menulib.php'); @@ -1602,6 +1605,7 @@ global $cachelib; $cachelib->invalidate("allperms"); + $cachelib->empty_type_cache("fgals_perms"); global $menulib; include_once('lib/menubuilder/menulib.php'); $menulib->empty_menu_cache(); @@ -1790,6 +1794,7 @@ global $cachelib; $cachelib->invalidate("allperms"); + $cachelib->empty_type_cache("fgals_perms"); $cachelib->invalidate("groupperms_$group"); global $menulib; include_once('lib/menubuilder/menulib.php'); @@ -1850,6 +1855,7 @@ global $cachelib; $cachelib->invalidate("allperms"); + $cachelib->empty_type_cache("fgals_perms"); $cachelib->invalidate("groupperms_$group"); global $menulib; include_once('lib/menubuilder/menulib.php'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sy...@us...> - 2008-11-10 19:06:30
|
Revision: 15602 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=15602&view=rev Author: sylvieg Date: 2008-11-10 19:06:21 +0000 (Mon, 10 Nov 2008) Log Message: ----------- [FIX]theme: if there was no group theme, it was impossible to switch theme as the cache was set to the prefs Modified Paths: -------------- trunk/lib/cache/cachelib.php trunk/lib/userslib.php Modified: trunk/lib/cache/cachelib.php =================================================================== --- trunk/lib/cache/cachelib.php 2008-11-10 17:55:04 UTC (rev 15601) +++ trunk/lib/cache/cachelib.php 2008-11-10 19:06:21 UTC (rev 15602) @@ -43,7 +43,7 @@ function getCached($key, $type='') { $key = $type.md5($key); - if ( filesize($this->folder."/$key") == 0 ) { + if ( !file_exists($this->folder."/$key")) { return serialize(false); } $fw = fopen($this->folder."/$key","r"); Modified: trunk/lib/userslib.php =================================================================== --- trunk/lib/userslib.php 2008-11-10 17:55:04 UTC (rev 15601) +++ trunk/lib/userslib.php 2008-11-10 19:06:21 UTC (rev 15602) @@ -1408,22 +1408,21 @@ global $cachelib; require_once("lib/cache/cachelib.php"); $k = 'group_theme_'.$group; - if ( $cachelib->isCached($k) ) return $cachelib->getCached($k); - - if ( ! empty($group) ) { + if ( $cachelib->isCached($k) ) { + echo 'CACHED'; + $return = $cachelib->getCached($k); + } elseif ( ! empty($group) ) { $query = 'select `groupTheme` from `users_groups` where `groupName` = ?'; $return = $this->getOne($query, array($group)); - if ( ! empty($return) ) { - $cachelib->cacheItem($k, $return); - return $return; - } + $cachelib->cacheItem($k, $return); + echo 'SETCACHE'; } + if (!empty($return)) { + return $return; + } global $prefs; - $return = $prefs['style']; - $cachelib->cacheItem($k, $return); - - return $return; + return $prefs['style']; } /* Returns a default category for user's default_group This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sy...@us...> - 2008-11-10 22:19:27
|
Revision: 15607 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=15607&view=rev Author: sylvieg Date: 2008-11-10 22:19:23 +0000 (Mon, 10 Nov 2008) Log Message: ----------- [FIX]cache: all the user modules had the same cache Modified Paths: -------------- trunk/lib/modules/modlib.php trunk/lib/tikilib.php Modified: trunk/lib/modules/modlib.php =================================================================== --- trunk/lib/modules/modlib.php 2008-11-10 22:16:25 UTC (rev 15606) +++ trunk/lib/modules/modlib.php 2008-11-10 22:19:23 UTC (rev 15607) @@ -22,7 +22,7 @@ $result = $this->query($query,array($name,$title,$data,$parse)); global $cachelib; require_once("lib/cache/cachelib.php"); - $cachelib->invalidate('user_modules'); + $cachelib->invalidate("user_modules_$name"); return true; } Modified: trunk/lib/tikilib.php =================================================================== --- trunk/lib/tikilib.php 2008-11-10 22:16:25 UTC (rev 15606) +++ trunk/lib/tikilib.php 2008-11-10 22:19:23 UTC (rev 15607) @@ -3187,7 +3187,7 @@ /*shared*/ function get_user_module($name) { global $cachelib; - $cacheKey = 'user_modules'; + $cacheKey = "user_modules_$name"; if ( $cachelib->isCached($cacheKey) ) { $return = unserialize($cachelib->getCached($cacheKey)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sy...@us...> - 2008-11-24 14:08:18
|
Revision: 15739 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=15739&view=rev Author: sylvieg Date: 2008-11-24 14:08:14 +0000 (Mon, 24 Nov 2008) Log Message: ----------- notice Modified Paths: -------------- trunk/lib/tikilib.php trunk/lib/wiki-plugins/wikiplugin_trackerlist.php Modified: trunk/lib/tikilib.php =================================================================== --- trunk/lib/tikilib.php 2008-11-24 13:55:40 UTC (rev 15738) +++ trunk/lib/tikilib.php 2008-11-24 14:08:14 UTC (rev 15739) @@ -5084,7 +5084,7 @@ $params_string = substr( $params_string, $pos + 1 ); $params_string = ltrim( $params_string ); - if( $params_string{0} == '"' ) { + if( !empty($params_string) && $params_string{0} == '"' ) { $quote = 0; // Parameter between quotes, find closing quote not escaped by a \ while( false !== $quote = strpos( $params_string, '"', $quote + 1 ) ) { Modified: trunk/lib/wiki-plugins/wikiplugin_trackerlist.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_trackerlist.php 2008-11-24 13:55:40 UTC (rev 15738) +++ trunk/lib/wiki-plugins/wikiplugin_trackerlist.php 2008-11-24 14:08:14 UTC (rev 15739) @@ -185,7 +185,7 @@ } function wikiplugin_trackerlist($data, $params) { - global $smarty, $tikilib, $dbTiki, $userlib, $tiki_p_admin_trackers, $prefs, $_REQUEST, $tiki_p_view_trackers, $user, $page, $tiki_p_tracker_vote_ratings, $tiki_p_tracker_view_ratings, $trklib, $tiki_p_traker_vote_rating; + global $smarty, $tikilib, $dbTiki, $userlib, $tiki_p_admin_trackers, $prefs, $_REQUEST, $tiki_p_view_trackers, $user, $page, $tiki_p_tracker_vote_ratings, $tiki_p_tracker_view_ratings, $trklib, $tiki_p_traker_vote_rating, $tiki_p_export_tracker; require_once("lib/trackers/trackerlib.php"); global $notificationlib; include_once('lib/notifications/notificationlib.php');//needed if plugin tracker after plugin trackerlist extract ($params,EXTR_SKIP); @@ -520,15 +520,25 @@ $smarty->assign_by_ref('filterfield',$exactvalue); $smarty->assign_by_ref('listfields', $listfields); $smarty->assign_by_ref('popupfields', $popupfields); - if (!empty($export)) { - $exportUrl = "tiki-view_tracker.php?trackerId=$trackerId&displayedFields=$fields&cookietab=3"; - foreach ($filterfield as $i=>$fieldId) { - $exportUrl .= "&f_$fieldId="; - if (empty($filtervalue[$i])) { - $exportUrl .= $exactvalue[$i]; - } else { - $exportUrl .= $filtervalue[$i]; + if (!empty($export) && $tiki_p_export_tracker == 'y') { + $exportUrl = "tiki-view_tracker.php?trackerId=$trackerId&cookietab=3"; + if (!empty($fields)) + $exportUrl .= "&displayedFields=$fields"; + if (is_array($filterfield)) { + foreach ($filterfield as $i=>$fieldId) { + $exportUrl .= "&f_$fieldId="; + if (empty($filtervalue[$i])) { + $exportUrl .= $exactvalue[$i]; + } else { + $exportUrl .= $filtervalue[$i]; + } } + } elseif(!empty($filterfield)) { + $exportUrl .= "&f_$filterfield="; + if (empty($filtervalue)) + $exportUrl .= $exactvalue; + else + $exportUrl .= $filtervalue; } $smarty->assign('exportUrl', $exportUrl); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lph...@us...> - 2008-12-13 22:03:14
|
Revision: 16035 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16035&view=rev Author: lphuberdeau Date: 2008-12-13 22:01:13 +0000 (Sat, 13 Dec 2008) Log Message: ----------- Moving bilingual aligner to core to fit in the unit testing framework Modified Paths: -------------- trunk/lib/core/test/AllTests.php Added Paths: ----------- trunk/lib/core/lib/Multilingual/ trunk/lib/core/lib/Multilingual/Aligner/ trunk/lib/core/lib/Multilingual/Aligner/BilingualAligner.php trunk/lib/core/lib/Multilingual/Aligner/SentenceSegmentor.php trunk/lib/core/lib/Multilingual/Aligner/ShortestPathFinder.php trunk/lib/core/test/Multilingual/ trunk/lib/core/test/Multilingual/Aligner/ trunk/lib/core/test/Multilingual/Aligner/AllTests.php trunk/lib/core/test/Multilingual/Aligner/BilingualAlignerTest.php trunk/lib/core/test/Multilingual/Aligner/SentenceSegmentorTest.php trunk/lib/core/test/Multilingual/Aligner/ShortestPathFinderTest.php trunk/lib/core/test/Multilingual/AllTests.php Removed Paths: ------------- trunk/lib/multilingual/AllTests.php trunk/lib/multilingual/BilingualAligner.php trunk/lib/multilingual/BilingualAlignerTest.php trunk/lib/multilingual/SentenceSegmentor.php trunk/lib/multilingual/SentenceSegmentorTest.php trunk/lib/multilingual/ShortestPathFinder.php trunk/lib/multilingual/ShortestPathFinderTest.php Copied: trunk/lib/core/lib/Multilingual/Aligner/BilingualAligner.php (from rev 16034, trunk/lib/multilingual/BilingualAligner.php) =================================================================== --- trunk/lib/core/lib/Multilingual/Aligner/BilingualAligner.php (rev 0) +++ trunk/lib/core/lib/Multilingual/Aligner/BilingualAligner.php 2008-12-13 22:01:13 UTC (rev 16035) @@ -0,0 +1,193 @@ +<?php + +require_once 'Multilingual/Aligner/SentenceSegmentor.php'; + +class Multilingual_Aligner_BilingualAligner { + + var $l1_sentences = array(); + var $l2_sentences = array(); + var $nodes_at_current_level = array(); + var $nodes_at_next_level = array(); + var $cost_matrix = array(); + + public function align($l1_sentences, $l2_sentences) { + return; + } + + public function _segment_into_sentences($text) { + $segmentor = new Multilingual_Aligner_SentenceSegmentor(); + $sentences = $segmentor->segment($text); + return $sentences; + } + + public function _segment_parallel_texts_to_sentences($l1_text, $l2_text) { + $this->l1_sentences = $this->_segment_into_sentences($l1_text); + $this->l2_sentences = $this->_segment_into_sentences($l2_text); + } + + function _generate_shortest_path_matrix() { +// print "-- _generate_shortest_path_matrix: invoked\n"; + + $this->nodes_at_current_level = array("-1m1|-1m1", "-1m2|-1m1", "-1m1|-1m2", + "-1s1|-1s0", "-1s0|-1s1"); +// print "-- _generate_shortest_path_matrix: count(\$this->nodes_at_current_level)=".count($this->nodes_at_current_level)."\n"; + + while (count($this->nodes_at_current_level) > 0) { +// print "-- _generate_shortest_path_matrix: extending to next level.\n"; + $this->_extend_shortest_path_matrix_by_one_level(); + } + +/* + print "-- _generate_shortest_path_matrix: upon exit, \$this->cost_matrix=\n";var_dump($this->cost_matrix);print "\n"; + foreach (array_keys($this->cost_matrix) as $origin) { + print "-- _generate_shortest_path_matrix: \$this->cost_matrix[$origin]=";var_dump($this->cost_matrix[$origin]);print"\n"; + } +*/ + } + + public function _extend_shortest_path_matrix_by_one_level() { +// print "-- _extend_shortest_path_matrix_by_one_level: \$this->nodes_at_current_level=\n";var_dump($this->nodes_at_current_level);print "\n"; + $this->nodes_at_next_level = array(); + foreach ($this->nodes_at_current_level as $a_node_to_extend) { + $this->_extend_shortest_path_matrix_from_this_node($a_node_to_extend); + } + + // NOTE: Once this method is finished, replace line below by + // $this->nodes_at_current_level = $this->nodes_at_next_level; + // + $this->nodes_at_current_level = $this->nodes_at_next_level; + } + + public function _extend_shortest_path_matrix_from_this_node($node_to_extend) { +// print "-- _extend_shortest_path_matrix_from_this_node: \$node_to_extend='$node_to_extend'\n"; + $this->_match_current_l1_and_l2_sentences($node_to_extend, 1, 1); + $this->_match_current_l1_and_l2_sentences($node_to_extend, 1, 2); + $this->_match_current_l1_and_l2_sentences($node_to_extend, 2, 1); + $this->_skip_current_l1_or_l2_sentence($node_to_extend, 1, 0); + $this->_skip_current_l1_or_l2_sentence($node_to_extend, 0, 1); + } + + + public function _match_current_l1_and_l2_sentences($node_to_extend, + $l1_n_matches, $l2_n_matches) { + +// print "-- _match_current_l1_and_l2_sentences: extending node: \$node_to_extend='$node_to_extend'\n"; + + $sentences_this_node = $this->_sentences_at_this_node($node_to_extend); + $l1_curr_sentence = $sentences_this_node[0]; + $l2_curr_sentence = $sentences_this_node[1]; + + $new_node = $this->_generate_node_ID($l1_curr_sentence, 'm', $l1_n_matches, + $l2_curr_sentence, 'm', $l2_n_matches); +// print "-- _match_current_l1_and_l2_sentences: extending to \$new_node='$new_node'\n"; + + if ($new_node != null) { + array_push($this->nodes_at_next_level, $new_node); + + // For now, assume same cost for links between nodes. + $this->cost_matrix[$node_to_extend][$new_node] = 'match_cost'; + } else { + $this->cost_matrix[$node_to_extend]['END'] = 'goto_end_cost'; + } + +// print "-- _match_current_l1_and_l2_sentences: upon exit, \$this->cost_matrix=\n";var_dump($this->cost_matrix);print "\n"; + + return; + } + + public function _skip_current_l1_or_l2_sentence($node_to_extend, + $l1_n_skips, $l2_n_skips) { + $sentences_this_node = $this->_sentences_at_this_node($node_to_extend); + $l1_curr_sentence = $sentences_this_node[0]; + $l2_curr_sentence = $sentences_this_node[1]; + + $new_node = $this->_generate_node_ID($l1_curr_sentence, 's', $l1_n_skips, + $l2_curr_sentence, 's', $l2_n_skips); + + if ($new_node != null) { + array_push($this->nodes_at_next_level, $new_node); + + // For now, assume same cost for links between nodes. + $this->cost_matrix[$node_to_extend][$new_node] = 'skip_cost'; + } else { + $this->cost_matrix[$node_to_extend]['END'] = 'goto_end_cost'; + } + + return; + + } + + /** + * Node info has following format: + * $l1_previous_sentence$l1_operation$11_num_times|$l1_initial_sentence$l2_operation$12_num_times + * + * Where: + * $l1_previous_sentence: Index of the L1 sentence which was active in previous node. + * + * $l1_operation: Operation performed on L1 sentence when moving to this node. + * 'm' = match $l1_previous_sentence to current L2 sentences. + * 's' = skip $l1_previous_sentence + * + * $l1_num_times: Number of times that the above operation should be performed. + * + * Fields for L2 are defined similarly as above. + * + * Example: + * 32m2|35m1: Means that when moving to this node, we are macthing L1 + * sentences 32 and 33 to L2 sentence 35. + * 32s1|35s0: Means that when moving to this node, we are skipping L1 + * sentence 32, and remaining at L2 sentence 35. + */ + + public function _parse_node_ID($node_id){ +// print "-- _parse_node_ID: \$node_id='$node_id'\n"; + preg_match('/([\-\d]+)([ms])([\d]+)\|([\-\d]+)([ms])([\d]+)/', $node_id, $info); +// print "-- _parse_node_ID: \$info=\n";var_dump($info);print "\n";; + return array($info[1], $info[2], $info[3], $info[4], $info[5], $info[6]); + } + + public function _generate_node_ID($l1_sentence, $l1_operation, $l1_n_times, + $l2_sentence, $l2_operation, $l2_n_times) { + $id = null; + if ($l1_sentence + $l1_n_times < count($this->l1_sentences) && + $l2_sentence + $l2_n_times < count($this->l2_sentences)) { + $id = "$l1_sentence$l1_operation$l1_n_times|$l2_sentence$l2_operation$l2_n_times"; + } + return $id; + } + + public function _sentence_length_delta($l1_sentence, $l2_sentence) { + $l1_length = strlen($l1_sentence); + $l2_length = strlen($l2_sentence); + $delta = 0; + if ($l1_length != 0) { + $delta = abs($l1_length - $l2_length)/$l1_length; + } else { + if ($l2_length == 0) { + $delta = 0; + } else { + $delta = 1; + } + } + return $delta; + } + + function _sentences_at_this_node($node_id) { + $node_info = $this->_parse_node_ID($node_id); + $l1_sentence = $node_info[0]; + $l1_operation = $node_info[1]; + $l1_advance_by = $node_info[2]; + + $l2_sentence = $node_info[3]; + $l2_operation = $node_info[4]; + $l2_advance_by = $node_info[5]; + + $l1_next_sentence = $l1_sentence + $l1_advance_by; + $l2_next_sentence = $l2_sentence + $l2_advance_by; + + return array($l1_next_sentence, $l2_next_sentence); + } + +} + +?> Property changes on: trunk/lib/core/lib/Multilingual/Aligner/BilingualAligner.php ___________________________________________________________________ Added: svn:mergeinfo + /branches/experimental/declfilter/lib/multilingual/BilingualAligner.php:15787-16031 Copied: trunk/lib/core/lib/Multilingual/Aligner/SentenceSegmentor.php (from rev 16034, trunk/lib/multilingual/SentenceSegmentor.php) =================================================================== --- trunk/lib/core/lib/Multilingual/Aligner/SentenceSegmentor.php (rev 0) +++ trunk/lib/core/lib/Multilingual/Aligner/SentenceSegmentor.php 2008-12-13 22:01:13 UTC (rev 16035) @@ -0,0 +1,33 @@ +<?php + +class Multilingual_Aligner_SentenceSegmentor { + + public function segment($text) { + + $sentences_and_separators = preg_split('/([\.\!\?]|\n\s*\n|\n(?=\*))/', $text, -1, PREG_SPLIT_DELIM_CAPTURE); + $sentences = array(); + $ii = 0; + // Concatenate each sentence with the separator that follows it. + while ($ii < sizeof($sentences_and_separators)) { + $this_sentence = $sentences_and_separators[$ii]; + if (strcmp("", $this_sentence) == 0 && + $ii == sizeof($sentences_and_separators) - 1) { + + // There may be an empty constituent left after last sentence separator + // Ignore it. + break; + } + if ($ii+1 < sizeof($sentences_and_separators)) { + $separator = $sentences_and_separators[$ii+1]; + $this_sentence = $this_sentence.$separator; + $ii++; + } + $sentences[] = $this_sentence; + $ii++; + } + return $sentences; + + } + +} + Property changes on: trunk/lib/core/lib/Multilingual/Aligner/SentenceSegmentor.php ___________________________________________________________________ Added: svn:mergeinfo + /branches/experimental/declfilter/lib/multilingual/SentenceSegmentor.php:15787-16031 Copied: trunk/lib/core/lib/Multilingual/Aligner/ShortestPathFinder.php (from rev 16034, trunk/lib/multilingual/ShortestPathFinder.php) =================================================================== --- trunk/lib/core/lib/Multilingual/Aligner/ShortestPathFinder.php (rev 0) +++ trunk/lib/core/lib/Multilingual/Aligner/ShortestPathFinder.php 2008-12-13 22:01:13 UTC (rev 16035) @@ -0,0 +1,211 @@ +<?php + +require_once 'Multilingual/Aligner/ShortestPathFinder.php'; + +/** + * This class implements the Dijkstra algorithm for finding the shortest path + * through a graph. + * + * For details on this algorithm, see: + * http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm + * + * For details on how to use the class, see the unit test file + * ShortestPathFinderTest.php. + */ + + +class Multilingual_Aligner_ShortestPathFinder { + var $visited = array(); + var $distance = array(); + var $previousNode = array(); + var $startnode =null; + var $map = array(); + var $infiniteDistance = 0; + var $numberOfNodes = 0; + var $bestPath = 0; + var $matrixWidth = 0; + var $shortestPathes = array(); + var $nodes = array(); + + function __construct(&$ourMap, $infiniteDistance) { + $this -> infiniteDistance = $infiniteDistance; + $this -> map = &$ourMap; + $this -> bestPath = 0; + + $this->nodes = $this->_nodesInMmatrix($ourMap); + $this -> numberOfNodes = count($this->nodes); + } + + function _nodesInMmatrix($distanceMatrix) { + $nodes = array(); + foreach (array_keys($distanceMatrix) as $originNode) { + if (!in_array($originNode, $nodes)) { + array_push($nodes, $originNode); + } + $distancesFromThisNode = $distanceMatrix[$originNode]; + foreach (array_keys($distancesFromThisNode) as $destinationNode) { + if (!in_array($destinationNode, $nodes)) { + array_push($nodes, $destinationNode); + } + } + } + sort($nodes); + +// echo "-- _nodesInMmatrix: outputting nodes:\n"; var_dump($nodes); + + return $nodes; + } + + function computeShortestPathes($start,$to = null) { + $this -> startnode = $start; + foreach ($this->nodes as $currNode) { + if ($currNode == $this -> startnode) { + $this -> visited[$currNode] = true; + $this -> distance[$currNode] = 0; + } else { + $this -> visited[$currNode] = false; + $this -> distance[$currNode] = isset($this -> map[$this -> startnode][$currNode]) + ? $this -> map[$this -> startnode][$currNode] + : $this -> infiniteDistance; + } + $this -> previousNode[$currNode] = $this -> startnode; + } + + $maxTries = $this -> numberOfNodes; + +// echo "-- computeShortestPathes: \$maxTries=$maxTries\n"; + + $tries = 0; + while (in_array(false, $this -> visited, true) && $tries <= $maxTries) { +// echo "-- computeShortestPathes: \$tries=$tries\n\$this->distance=\n";var_dump($this->distance);echo "\n\$this->previousNode=\n";var_dump($this->previousNode);print "\n"; + $this -> bestPath = $this->findBestPath($this->distance, array_keys($this -> visited, false, true)); + if($to !== null && $this -> bestPath === $to) { + break; + } + $this -> updateDistanceAndPrevious($this -> bestPath); + $this -> visited[$this -> bestPath] = true; + $tries++; + } + $this -> shortestPathes = $this->getShortestPathesInfo(); + + return $this -> shortestPathes; + } + + function findBestPath($ourDistance, $ourNodesLeft) { +// echo "-- findBestPath: \ourDistance=\n";var_dump($ourDistance);echo "\n\$ourNodesLeft=\n";var_dump($ourNodesLeft); + $bestPath = $this -> infiniteDistance; + $bestNode = NULL; + foreach ($ourNodesLeft as $currNode) { +// echo "-- findBestPath: processing node: $currNode, \$ourDistance[\$currNode]=$ourDistance[$currNode], \$bestPath=$bestPath\n"; + if($ourDistance[$currNode] < $bestPath) { + $bestPath = $ourDistance[$currNode]; + $bestNode = $currNode; + } + } +// echo "-- findBestPath: upon exit, \$bestNode=$bestNode, \ourDistance=\n";var_dump($ourDistance);echo "\n\$ourNodesLeft=\n";var_dump($ourNodesLeft); + return $bestNode; + } + + function updateDistanceAndPrevious($obp) { +// echo "-- updateDistanceAndPrevious: \$obp=$obp\n"; + foreach ($this->nodes as $currNode) { +// echo "-- updateDistanceAndPrevious: processing \$currNode=$currNode\n"; + if( (isset($this->map[$obp][$currNode])) + && (!($this->map[$obp][$currNode] == $this->infiniteDistance) || ($this->map[$obp][$currNode] == 0 )) + && (($this->distance[$obp] + $this->map[$obp][$currNode]) < $this -> distance[$currNode]) + ) + { +// echo "-- updateDistanceAndPrevious: found shorter rout to \$currNode, through \$obp.\n"; + $this -> distance[$currNode] = $this -> distance[$obp] + $this -> map[$obp][$currNode]; + $this -> previousNode[$currNode] = $obp; + } + } + +// echo "-- updateDistanceAndPrevious: upon exit, \$this->distance=\n";var_dump($this->distance);echo "\n\$this->previousNode=\n";var_dump($this->previousNode); echo"\n"; + + } + + function shortestPathTo($destination_node_num) { + return $this->shortestPathes[$destination_node_num]; + } + + function shortestDistanceTo($destination_node_num) { + return $this->distance[$destination_node_num]; + } + + function printMap(&$map) { + $placeholder = ' %' . strlen($this -> infiniteDistance) .'d'; + $foo = ''; + for($i=0,$im=count($map);$i<$im;$i++) { + for ($k=0,$m=$im;$k<$m;$k++) { + $foo.= sprintf($placeholder, isset($map[$i][$k]) ? $map[$i][$k] : $this -> infiniteDistance); + } + $foo.= "\n"; + } + return $foo; + } + + function getShortestPathesInfo($to = null) { + $ourShortestPath = array(); + foreach ($this->nodes as $aNode) { + if($to !== null && $to !== $aNode) { + continue; + } + $ourShortestPath[$aNode] = array(); + $endNode = null; + $currNode = $aNode; + $ourShortestPath[$aNode][] = $aNode; + while ($endNode === null || $endNode != $this -> startnode) { + $ourShortestPath[$aNode][] = $this -> previousNode[$currNode]; + $endNode = $this -> previousNode[$currNode]; + $currNode = $this -> previousNode[$currNode]; + } + $ourShortestPath[$aNode] = array_reverse($ourShortestPath[$aNode]); + if ($to === null || $to === $aNode) { + if ($to === $aNode) { + break; + } + } + } + return $ourShortestPath; + } + + function getResults($to = null) { + $ourShortestPath = array(); + $foo = ''; + foreach ($this->nodes as $aNode) { + if($to !== null && $to !== $aNode) { + continue; + } + $ourShortestPath[$aNode] = array(); + $endNode = null; + $currNode = $aNode; + $ourShortestPath[$aNode][] = $aNode; + while ($endNode === null || $endNode != $this -> startnode) { + $ourShortestPath[$aNode][] = $this -> previousNode[$currNode]; + $endNode = $this -> previousNode[$currNode]; + $currNode = $this -> previousNode[$currNode]; + } + $ourShortestPath[$aNode] = array_reverse($ourShortestPath[$aNode]); + if ($to === null || $to === $aNode) { + if($this -> distance[$aNode] >= $this -> infiniteDistance) { + $foo .= sprintf("no route from %d to %d. \n",$this -> startnode,$aNode); + } else { + $foo .= sprintf('%d => %d = %d [%d]: (%s).'."\n" , + $this -> startnode,$aNode,$this -> distance[$aNode], + count($ourShortestPath[$aNode]), + implode('-',$ourShortestPath[$aNode])); + } + $foo .= str_repeat('-',20) . "\n"; + if ($to === $aNode) { + break; + } + } + } + return $foo; + } +} // end class + + + +?> Property changes on: trunk/lib/core/lib/Multilingual/Aligner/ShortestPathFinder.php ___________________________________________________________________ Added: svn:mergeinfo + /branches/experimental/declfilter/lib/multilingual/ShortestPathFinder.php:15787-16031 Modified: trunk/lib/core/test/AllTests.php =================================================================== --- trunk/lib/core/test/AllTests.php 2008-12-13 20:31:20 UTC (rev 16034) +++ trunk/lib/core/test/AllTests.php 2008-12-13 22:01:13 UTC (rev 16035) @@ -23,6 +23,7 @@ $suite->addTest(JitFilter_AllTests::suite()); $suite->addTest(TikiFilter_AllTests::suite()); $suite->addTest(DeclFilter_AllTests::suite()); + $suite->addTest(Multilingual_AllTests::suite()); return $suite; } Copied: trunk/lib/core/test/Multilingual/Aligner/AllTests.php (from rev 16034, trunk/lib/multilingual/AllTests.php) =================================================================== --- trunk/lib/core/test/Multilingual/Aligner/AllTests.php (rev 0) +++ trunk/lib/core/test/Multilingual/Aligner/AllTests.php 2008-12-13 22:01:13 UTC (rev 16035) @@ -0,0 +1,12 @@ +<?php + +class Multilingual_Aligner_AllTests { + public static function suite() { + $suite = new PHPUnit_Framework_TestSuite('Multilingual_Aligner'); + $suite->addTestSuite('Multilingual_Aligner_BilingualAlignerTest'); + $suite->addTestSuite('Multilingual_Aligner_SentenceSegmentorTest'); + $suite->addTestSuite('Multilingual_Aligner_ShortestPathFinderTest'); + return $suite; + } +} + Property changes on: trunk/lib/core/test/Multilingual/Aligner/AllTests.php ___________________________________________________________________ Added: svn:mergeinfo + /branches/experimental/declfilter/lib/multilingual/AllTests.php:15787-16031 Copied: trunk/lib/core/test/Multilingual/Aligner/BilingualAlignerTest.php (from rev 16034, trunk/lib/multilingual/BilingualAlignerTest.php) =================================================================== --- trunk/lib/core/test/Multilingual/Aligner/BilingualAlignerTest.php (rev 0) +++ trunk/lib/core/test/Multilingual/Aligner/BilingualAlignerTest.php 2008-12-13 22:01:13 UTC (rev 16035) @@ -0,0 +1,320 @@ +<?php + +class Multilingual_Aligner_BilingualAlignerTest extends PHPUnit_Framework_TestCase +{ + + public function ___test_reminder() { + $this->fail("remember to reactivate all tests in BilingualAlignerTest"); + } + + + //////////////////////////////////////////////////////////////// + // Documentation tests + // These tests illustrate how to use this class. + //////////////////////////////////////////////////////////////// + + public function test_this_is_how_you_create_a_BilingualAligner() { + $aligner = new Multilingual_Aligner_BilingualAligner(); + } + + //////////////////////////////////////////////////////////////// + // Note: In the rest of these tests, you can assume that + // $this->aligner is an instance of BilingualAligner + // created as above. + //////////////////////////////////////////////////////////////// + + protected function setUp() { + $this->aligner = new Multilingual_Aligner_BilingualAligner(); + } + + public function test_this_is_how_you_align_two_texts() { + $aligner = new Multilingual_Aligner_BilingualAligner(); + $en_entences = array("Hello earthlings. Take me to your leader."); + $fr_sentences = array("Bonjour terriens. Inutile de résister. Amenez moi à votre chef."); + $aligned_sentences = $aligner->align($en_entences, $fr_sentences); + $first_pair = $aligned_sentences[0]; + $first_en_sent = $first_pair[0]; + $first_fr_sent = $first_pair[1]; + } + + //////////////////////////////////////////////////////////////// + // Internal tests + // These tests check the internal workings of the class. + //////////////////////////////////////////////////////////////// + + public function test__segment_into_sentences() { + $text = "This is sentence 1! This is sentence 2\n* This is sentence 3"; + $got_sentences = $this->aligner->_segment_into_sentences($text); + $exp_sentences = array("This is sentence 1!", + " This is sentence 2\n", + "* This is sentence 3"); + $this->assertEquals($exp_sentences, $got_sentences, + "Sentences were not properly segmented"); + } + + public function test__segment_parallel_texts_to_sentences() { + $l1_text = "This is sentence 1! This is sentence 2."; + $l2_text = "Voici la phrase 1! Voici la phrase 2."; + + $exp_l1_sentences = array("This is sentence 1!", " This is sentence 2."); + $exp_l2_sentences = array("Voici la phrase 1!", " Voici la phrase 2."); + + $this->aligner->_segment_parallel_texts_to_sentences($l1_text, $l2_text); + + $this->assertEquals($exp_l1_sentences, $this->aligner->l1_sentences, + "L1 sentences not generated properly."); + $this->assertEquals($exp_l2_sentences, $this->aligner->l2_sentences, + "L2 sentences not generated properly."); + + } + + public function test__sentence_length_delta() { + + $l1_sentence = "Hello world."; + $l2_sentence = "Bonjour le monde."; + $this->assert_sentence_length_delta_is($l1_sentence, $l2_sentence, 0.417, + "Bad delta for case with two non-empty sentences."); + + $l1_sentence = ""; + $l2_sentence = "Bonjour le monde."; + $this->assert_sentence_length_delta_is($l1_sentence, $l2_sentence, 1, + "Bad delta for case with only L1 sentence empty."); + + $l1_sentence = "Hello world."; + $l2_sentence = ""; + $this->assert_sentence_length_delta_is($l1_sentence, $l2_sentence, 1, + "Bad delta for case with only L2 sentence empty."); + + $l1_sentence = ""; + $l2_sentence = ""; + $this->assert_sentence_length_delta_is($l1_sentence, $l2_sentence, 0, + "Bad delta for case with both sentences empty."); + + $l1_sentence = null; + $l2_sentence = "Bonjour le monde."; + $this->assert_sentence_length_delta_is($l1_sentence, $l2_sentence, 1, + "Bad delta for case with only L1 sentence null."); + + $l1_sentence = "Hello world."; + $l2_sentence = null; + $this->assert_sentence_length_delta_is($l1_sentence, $l2_sentence, 1, + "Bad delta for case with only L2 sentence null."); + + $l1_sentence = null; + $l2_sentence = null; + $this->assert_sentence_length_delta_is($l1_sentence, $l2_sentence, 0, + "Bad delta for case with both sentences null."); + } + + function test__generate_shortest_path_matrix() { + $this->_setup_segmented_sentences(); + $this->aligner->_generate_shortest_path_matrix(); + + $exp_cost_matrix = array(); + + $exp_cost_matrix["-1m1|-1m1"]["0m1|0m1"]= "match_cost"; + $exp_cost_matrix["-1m1|-1m1"]["0m1|0m2"]= "match_cost"; + $exp_cost_matrix["-1m1|-1m1"]["0s1|0s0"]= "skip_cost"; + $exp_cost_matrix["-1m1|-1m1"]["0s0|0s1"]= "skip_cost"; + $exp_cost_matrix["-1m1|-1m1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["-1m2|-1m1"]["END"]= "goto_end_cost"; + $exp_cost_matrix["-1m2|-1m1"]["1s0|0s1"]= "skip_cost"; + + $exp_cost_matrix["-1m1|-1m2"]["0m1|1m1"]= "match_cost"; + $exp_cost_matrix["-1m1|-1m2"]["END"]= "goto_end_cost"; + $exp_cost_matrix["-1m1|-1m2"]["0s1|1s0"]= "skip_cost"; + $exp_cost_matrix["-1m1|-1m2"]["0s0|1s1"]= "skip_cost"; + + $exp_cost_matrix["-1s1|-1s0"]["0m1|-1m1"]= "match_cost"; + $exp_cost_matrix["-1s1|-1s0"]["END"]= "goto_end_cost"; + $exp_cost_matrix["-1s1|-1s0"]["0m1|-1m2"]= "match_cost"; + $exp_cost_matrix["-1s1|-1s0"]["0s1|-1s0"]= "skip_cost"; + $exp_cost_matrix["-1s1|-1s0"]["0s0|-1s1"]= "skip_cost"; + + $exp_cost_matrix["-1s0|-1s1"]["-1m1|0m1"]= "match_cost"; + $exp_cost_matrix["-1s0|-1s1"]["-1m1|0m2"]= "match_cost"; + $exp_cost_matrix["-1s0|-1s1"]["-1m2|0m1"]= "match_cost"; + $exp_cost_matrix["-1s0|-1s1"]["-1s1|0s0"]= "skip_cost"; + $exp_cost_matrix["-1s0|-1s1"]["-1s0|0s1"]= "skip_cost"; + + $exp_cost_matrix["0m1|0m1"]["1s0|1s1"]= "skip_cost"; + $exp_cost_matrix["0m1|0m1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["0m1|0m2"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["0s1|0s0"]["1s0|0s1"]= "skip_cost"; + $exp_cost_matrix["0s1|0s0"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["0s0|0s1"]["0m1|1m1"]= "match_cost"; + $exp_cost_matrix["0s0|0s1"]["0s1|1s0"]= "skip_cost"; + $exp_cost_matrix["0s0|0s1"]["0s0|1s1"]= "skip_cost"; + $exp_cost_matrix["0s0|0s1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["1s0|0s1"]["1s0|1s1"]= "skip_cost"; + $exp_cost_matrix["1s0|0s1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["0m1|1m1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["0s1|1s0"]["1s0|1s1"]= "skip_cost"; + $exp_cost_matrix["0s1|1s0"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["0s0|1s1"]["0s1|2s0"]= "skip_cost"; + $exp_cost_matrix["0s0|1s1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["0m1|-1m1"]["1s0|0s1"]= "skip_cost"; + $exp_cost_matrix["0m1|-1m1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["0m1|-1m2"]["1s0|1s1"]= "skip_cost"; + $exp_cost_matrix["0m1|-1m2"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["0s1|-1s0"]["1s0|-1s1"]= "skip_cost"; + $exp_cost_matrix["0s1|-1s0"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["0s0|-1s1"]["0m1|0m1"]= "match_cost"; + $exp_cost_matrix["0s0|-1s1"]["0m1|0m2"]= "match_cost"; + $exp_cost_matrix["0s0|-1s1"]["0s1|0s0"]= "skip_cost"; + $exp_cost_matrix["0s0|-1s1"]["0s0|0s1"]= "skip_cost"; + $exp_cost_matrix["0s0|-1s1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["-1m1|0m1"]["0m1|1m1"]= "match_cost"; + $exp_cost_matrix["-1m1|0m1"]["0s1|1s0"]= "skip_cost"; + $exp_cost_matrix["-1m1|0m1"]["0s0|1s1"]= "skip_cost"; + $exp_cost_matrix["-1m1|0m1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["-1m1|0m2"]["0s1|2s0"]= "skip_cost"; + $exp_cost_matrix["-1m1|0m2"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["-1m2|0m1"]["1s0|1s1"]= "skip_cost"; + $exp_cost_matrix["-1m2|0m1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["-1s1|0s0"]["0m1|0m1"]= "match_cost"; + $exp_cost_matrix["-1s1|0s0"]["0m1|0m2"]= "match_cost"; + $exp_cost_matrix["-1s1|0s0"]["0s1|0s0"]= "skip_cost"; + $exp_cost_matrix["-1s1|0s0"]["0s0|0s1"]= "skip_cost"; + $exp_cost_matrix["-1s1|0s0"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["-1s0|0s1"]["-1m1|1m1"]= "match_cost"; + $exp_cost_matrix["-1s0|0s1"]["-1m2|1m1"]= "match_cost"; + $exp_cost_matrix["-1s0|0s1"]["-1s1|1s0"]= "skip_cost"; + $exp_cost_matrix["-1s0|0s1"]["-1s0|1s1"]= "skip_cost"; + $exp_cost_matrix["-1s0|0s1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["1s0|1s1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["0s1|2s0"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["1s0|-1s1"]["1s0|0s1"]= "skip_cost"; + $exp_cost_matrix["1s0|-1s1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["-1m1|1m1"]["0s1|2s0"]= "skip_cost"; + $exp_cost_matrix["-1m1|1m1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["-1m2|1m1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["-1s1|1s0"]["0m1|1m1"]= "match_cost"; + $exp_cost_matrix["-1s1|1s0"]["0s1|1s0"]= "skip_cost"; + $exp_cost_matrix["-1s1|1s0"]["0s0|1s1"]= "skip_cost"; + $exp_cost_matrix["-1s1|1s0"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["-1s0|1s1"]["-1s1|2s0"]= "skip_cost"; + $exp_cost_matrix["-1s0|1s1"]["END"]= "goto_end_cost"; + + $exp_cost_matrix["-1s1|2s0"]["0s1|2s0"]= "skip_cost"; + $exp_cost_matrix["-1s1|2s0"]["END"]= "goto_end_cost"; + +// $exp_cost_matrix["1m1|0m1"]["END"] = "goto_end_cost"; + + $this->assertCostMatrixEquals($exp_cost_matrix, $this->aligner->cost_matrix, + "Cost matrix was wrong."); + + $this->fail("Need to generate arcs from START node. Pickup development from there."); + } + + function test__parse_node_ID() { + $this->assert_parse_node_ID_yields('3m1|5m1', array(3, 'm', 1, 5, 'm', 1), + "Parsed node ID info was wrong for case where sentences are matched."); + $this->assert_parse_node_ID_yields('3s1|5m0', array(3, 's', 1, 5, 'm', 0), + "Parsed node ID info was wrong for case where sentences were skipped."); + $this->assert_parse_node_ID_yields('-1m1|-1m1', array(-1, 'm', 1, -1, 'm', 1), + "Parsed node ID info was wrong for case with sentence number = -1 (i.e., initial state)."); + } + + + function test__generate_node_ID() { + $this->_setup_segmented_sentences(); + $this->assertEquals('0s1|0s0', + $this->aligner->_generate_node_ID(0, 's', 1, 0, 's', 0)); + $this->assertEquals(null, + $this->aligner->_generate_node_ID(5, 'm', 2, 4, 'm', 1), + "Node ID should be null when the L1 or L2 sentence number exceeds length of L1 or L2 document"); + + + } + + function test__sentences_at_this_node() { + $this->assert_sentences_at_this_node('3m1|5m1', array(4, 6), + "Current sentences were wrong for node with matches on both sides."); + $this->assert_sentences_at_this_node('-1m1|-1m1', array(0, 0), + "Current sentences were wrong for initial nodes (i.e., sentence number = -1)"); + $this->assert_sentences_at_this_node('4s1|5m0', array(5, 5), + "Current sentences were wrong for case where we skip a sentence."); + + } + + + //////////////////////////////////////////////////////////////// + // Helper methods + //////////////////////////////////////////////////////////////// + + private function assert_sentence_length_delta_is($l1_sentence, $l2_sentence, $exp_delta, $message) { + $got_delta = $this->aligner->_sentence_length_delta($l1_sentence, $l2_sentence); + $message = $message."\nSentence length delta was wrong."; + $this->assertEquals($exp_delta, $got_delta, $message, 0.001); + } + + private function _setup_segmented_sentences() { + $en_entences = "Hello earthlings. Take me to your leader."; + $fr_sentences = "Bonjour terriens. Inutile de résister. Amenez moi à votre chef."; + $this->aligner->_segment_parallel_texts_to_sentences($en_entences, $fr_sentences); + } + + private function assert_parse_node_ID_yields($node_id, $exp_parsed_info, $message) { +// print "-- assert_parse_node_ID_yields: \$node_id=$node_id\n"; + $parsed_info = $this->aligner->_parse_node_ID($node_id); + $this->assertEquals($exp_parsed_info, $parsed_info, "$message\nParsed info was wrong for node ID: '$node_id'"); + } + + private function assert_sentences_at_this_node($node_id, $exp_next_sentences, $message) { + $next_sentences = $this->aligner->_sentences_at_this_node($node_id); + $this->assertEquals($exp_next_sentences, $next_sentences, + $message."\nNext sentences were wrong for node '$node_id'"); + + } + + private function assertCostMatrixEquals($exp_cost_matrix, $got_cost_matrix, $message) { + + // print "-- assertCostMatrixEquals: \$exp_cost_matrix=\n";var_dump($exp_cost_matrix);print"\n"; + // print "-- assertCostMatrixEquals: \$got_cost_matrix=\n";var_dump($got_cost_matrix);print"\n"; + + $exp_origins = array_keys($exp_cost_matrix); + sort($exp_origins); + $got_origins = array_keys($got_cost_matrix); + sort($got_origins); + +// print "-- assertCostMatrixEquals: \$exp_origins=\n";var_dump($exp_origins);print"\n"; +// print "-- assertCostMatrixEquals: \$got_origins=\n";var_dump($got_origins);print"\n"; + + $this->assertEquals($exp_origins, $got_origins, + "List of origins in cost matrix differed."); + + foreach (array_keys($exp_cost_matrix) as $origin) { + // print "-- assertCostMatrixEquals: \$exp_cost_matrix[$origin]=";var_dump($exp_cost_matrix[$origin]);print"\n"; + // print "-- assertCostMatrixEquals: \$got_cost_matrix[$origin]=";var_dump($got_cost_matrix[$origin]);print"\n"; + $this->assertEquals($got_cost_matrix[$origin], $exp_cost_matrix[$origin], + "Costs from origin $origin differed"); + + } + } +} +?> Property changes on: trunk/lib/core/test/Multilingual/Aligner/BilingualAlignerTest.php ___________________________________________________________________ Added: svn:mergeinfo + /branches/experimental/declfilter/lib/multilingual/BilingualAlignerTest.php:15787-16031 Copied: trunk/lib/core/test/Multilingual/Aligner/SentenceSegmentorTest.php (from rev 16034, trunk/lib/multilingual/SentenceSegmentorTest.php) =================================================================== --- trunk/lib/core/test/Multilingual/Aligner/SentenceSegmentorTest.php (rev 0) +++ trunk/lib/core/test/Multilingual/Aligner/SentenceSegmentorTest.php 2008-12-13 22:01:13 UTC (rev 16035) @@ -0,0 +1,101 @@ +<?php + +class Multilingual_Aligner_SentenceSegmentorTest extends PHPUnit_Framework_TestCase +{ + + //////////////////////////////////////////////////////////////// + // Documentation tests + // These tests illustrate how to use this class. + //////////////////////////////////////////////////////////////// + + public function test_This_is_how_you_create_a_SentenceSegmentor() { + $segmentor = new Multilingual_Aligner_SentenceSegmentor(); + } + + public function test_this_is_how_you_segment_text_into_sentences() { + $segmentor = new Multilingual_Aligner_SentenceSegmentor(); + $text = "hello. world"; + $sentences = $segmentor->segment($text); + } + + //////////////////////////////////////////////////////////////// + // Internal tests + // These tests check the internal workings of the class. + //////////////////////////////////////////////////////////////// + + + public function test_segmentation_deals_with_period() { + $text = "hello brand new. world."; + $expSentences = array("hello brand new.", " world."); + $this->do_test_basic_segmentation($text, $expSentences, + "Segmentation did not deal properly with separation with period."); + } + + public function test_segmentation_deals_with_question_mark() { + $text = "hello? Anybody home?"; + $expSentences = array("hello?", " Anybody home?"); + $this->do_test_basic_segmentation($text, $expSentences, + "Segmentation did not deal properly with separation with question mark."); + } + + + public function test_segmentation_deals_with_exclamation_mark() { + $text = "hello! Anybody home!"; + $expSentences = array("hello!", " Anybody home!"); + $this->do_test_basic_segmentation($text, $expSentences, + "Segmentation did not deal properly with separation with exclamation mark."); + } + + public function test_segmentation_deals_with_exclamation_empty_string() { + $text = ""; + $expSentences = array(); + $this->do_test_basic_segmentation($text, $expSentences, + "Segmentation did not deal properly with empty string."); + } + + public function test_segmentation_deals_with_wiki_paragraph_break() { + $text = "This sentence ends with a period and a newline.\n". + "This sentence has no period, but ends with a wiki paragraph break\n\n". + "This is the start of a new paragraph."; + $expSentences = array("This sentence ends with a period and a newline.", + "\nThis sentence has no period, but ends with a wiki paragraph break\n\n", + "This is the start of a new paragraph."); + $this->do_test_basic_segmentation($text, $expSentences, + "Segmentation did not deal properly with wiki paragraph break."); + + } + + public function test_segmentation_deals_with_bullet_lists() { + $text = "This sentence precedes a bullet list.\n". + "* Bullet 1\n". + "** Bullet 1-1\n". + "* Bullet 2\n". + "After bullet list"; + $expSentences = array("This sentence precedes a bullet list.", + "\n", + "* Bullet 1\n", + "** Bullet 1-1\n", + "* Bullet 2\nAfter bullet list"); + $this->do_test_basic_segmentation($text, $expSentences, + "Segmentation did not deal properly with bullet list."); + + } + + //////////////////////////////////////////////////////////////// + // Helper methods + //////////////////////////////////////////////////////////////// + + public function do_test_basic_segmentation($text, $expSentences, $message) { + $segmentor = new Multilingual_Aligner_SentenceSegmentor(); + $sentences = $segmentor->segment($text); + $got_sentences_as_string = implode(', ', $sentences); + $exp_sentences_as_string = implode(', ', $expSentences); + $this->assertEquals($expSentences, $sentences, + $message."\n". + "Segmented sentences differed from expected.\n". + "Expected Sentences: $exp_sentences_as_string\n". + "Got Sentences: $got_sentences_as_string\n"); + } +} + +?> Property changes on: trunk/lib/core/test/Multilingual/Aligner/SentenceSegmentorTest.php ___________________________________________________________________ Added: svn:mergeinfo + /branches/experimental/declfilter/lib/multilingual/SentenceSegmentorTest.php:15787-16031 Copied: trunk/lib/core/test/Multilingual/Aligner/ShortestPathFinderTest.php (from rev 16034, trunk/lib/multilingual/ShortestPathFinderTest.php) =================================================================== --- trunk/lib/core/test/Multilingual/Aligner/ShortestPathFinderTest.php (rev 0) +++ trunk/lib/core/test/Multilingual/Aligner/ShortestPathFinderTest.php 2008-12-13 22:01:13 UTC (rev 16035) @@ -0,0 +1,125 @@ +<?php + +class Multilingual_Aligner_ShortestPathFinderTest extends PHPUnit_Framework_TestCase +{ + + //////////////////////////////////////////////////////////////// + // Documentation tests + // These tests illustrate how to use this class. + //////////////////////////////////////////////////////////////// + + protected function setUp() { + $distances_matrix[0][1] = 11; + $distances_matrix[0][2] = 23; + $distances_matrix[1][2] = 5; + $INFINITY = 9999999; + $this->pfinder = new Multilingual_Aligner_ShortestPathFinder($distances_matrix, $INFINITY); + } + + // + // Note: In remaining tests, assume that $this->pfinder has already + // been constructed in a similar way. + // + public function test_This_is_how_you_create_a_ShortestPathFinder() { + + // First, generate a distance matrix. + $distances_matrix[0][1] = 11; + $distances_matrix[0][2] = 23; + $distances_matrix[1][2] = 5; + $distances_matrix[0][0] = 0; + $distances_matrix[1][1] = 0; + $distances_matrix[2][2] = 0; + + // Need to choose a very large number to act as infinity. + $INFINITY = 9999999; + + $path_finder = new Multilingual_Aligner_ShortestPathFinder($distances_matrix, $INFINITY); + } + + public function test_This_is_how_you_find_shortest_path_from_the_origin_to_another_node() { + $origin_node_num = 0; + $destination_node_num = 2; + $this->pfinder->computeShortestPathes($origin_node_num); + + $nodes_in_path = $this->pfinder->shortestPathTo($destination_node_num); + $distance = $this->pfinder->shortestDistanceTo($destination_node_num); + } + + public function test_node_names_do_not_have_to_be_numbers() { + $distances_matrix['paris']['lyon'] = 11; + $distances_matrix['paris']['marseilles'] = 23; + $distances_matrix['lyon']['marseilles'] = 5; + $INFINITY = 9999999; + + $this->pfinder = new Multilingual_Aligner_ShortestPathFinder($distances_matrix, $INFINITY); + $this->pfinder->computeShortestPathes('paris'); + $nodes_in_path = $this->pfinder->shortestPathTo('marseilles'); + $distance = $this->pfinder->shortestDistanceTo('marseilles'); + + } + + //////////////////////////////////////////////////////////////// + // Internal tests + // These tests check the internal workings of the class. + //////////////////////////////////////////////////////////////// + + public function test__nodesInMatrix() { + + $distances_matrix = array(); + $distances_matrix['paris']['london'] = 300; + $distances_matrix['paris']['rome'] = 600; + $distances_matrix['london']['ottawa'] = 2000; + $exp_nodes = array('london', 'ottawa', 'paris', 'rome'); + + $nodes_list = $this->pfinder->_nodesInMmatrix($distances_matrix); + + $this->assertEquals($exp_nodes, $nodes_list, "Bad list of nodes."); + } + + public function test_path_finder_SMALL_example() { + $start_node_num = 0; + $this->pfinder->computeShortestPathes($start_node_num); + + $this->assertShortestPathIs(1, array(0, 1), 11, ""); + $this->assertShortestPathIs(2, array(0, 1, 2), 16, ""); + } + + public function test_path_finder_LARGER_example() { + $start_node_num = 'ottawa'; + $cost_matrix['ottawa']['montreal'] = 50; + $cost_matrix['ottawa']['chicago'] = 100; + $cost_matrix['ottawa']['detroit'] = 150; + $cost_matrix['montreal']['detroit'] = 90; + $cost_matrix['montreal']['vancouver'] = 300; + + $cost_matrix['detroit']['vancouver'] = 110; + $cost_matrix['chicago']['vancouver'] = 170; + $cost_matrix['ottawa']['toronto'] = 90; + $cost_matrix['toronto']['vancouver'] = 280; + $INFINITY = 9999999; + + $this->pfinder = new Multilingual_Aligner_ShortestPathFinder($cost_matrix, $INFINITY); + $this->pfinder->computeShortestPathes('ottawa'); + + $this->assertShortestPathIs('montreal', array("ottawa", "montreal"), 50, "Bad path to montreal"); + $this->assertShortestPathIs('toronto', array("ottawa", "toronto"), 90, "Bad path to toronto"); + $this->assertShortestPathIs('chicago', array("ottawa", "chicago"), 100, "Bad path to chicago"); + $this->assertShortestPathIs('detroit', array("ottawa", "montreal", "detroit"), 140, "Bad path to detroit"); + $this->assertShortestPathIs('vancouver', array("ottawa", "montreal", "detroit", "vancouver"), 250, "Bad path to vancouver"); + } + + + //////////////////////////////////////////////////////////////// + // Helper methods + //////////////////////////////////////////////////////////////// + + function assertShortestPathIs($destination, $exp_path, $exp_dist, $message) { + $got_dist = $distance = $this->pfinder->shortestDistanceTo($destination); + $this->assertEquals($exp_dist, $got_dist, "Shortest distance to node $destination was wrong."); + $got_path = $this->pfinder->shortestPathTo($destination); + $this->assertEquals($exp_path, $got_path, "$message\nShortest path to node $destination was wrong."); + } + +} + +?> Added: trunk/lib/core/test/Multilingual/AllTests.php =================================================================== --- trunk/lib/core/test/Multilingual/AllTests.php (rev 0) +++ trunk/lib/core/test/Multilingual/AllTests.php 2008-12-13 22:01:13 UTC (rev 16035) @@ -0,0 +1,20 @@ +<?php + +class Multilingual_AllTests +{ + public static function main() + { + PHPUnit_TextUI_TestRunner::run(self::suite()); + } + + public static function suite() + { + $suite = new PHPUnit_Framework_TestSuite('MultilingualSuite'); + + $suite->addTest(Multilingual_Aligner_AllTests::suite()); + + return $suite; + } +} + +?> Deleted: trunk/lib/multilingual/AllTests.php =================================================================== --- trunk/lib/multilingual/AllTests.php 2008-12-13 20:31:20 UTC (rev 16034) +++ trunk/lib/multilingual/AllTests.php 2008-12-13 22:01:13 UTC (rev 16035) @@ -1,22 +0,0 @@ -<?php - -require_once 'BilingualAlignerTest.php'; -require_once 'SentenceSegmentorTest.php'; -require_once 'ShortestPathFinderTest.php'; - - -class AllTests { - public static function main() { - PHPUnit_TextUI_TestRunner::run(self::suite()); - } - - public static function suite() { - $suite = new PHPUnit_Framework_TestSuite('PHPUnit'); - $suite->addTestSuite('BilingualAlignerTest'); - $suite->addTestSuite('SentenceSegmentorTest'); - $suite->addTestSuite('ShortestPathFinderTest'); - return $suite; - } -} - -AllTests::main(); Deleted: trunk/lib/multilingual/BilingualAligner.php =================================================================== --- trunk/lib/multilingual/BilingualAligner.php 2008-12-13 20:31:20 UTC (rev 16034) +++ trunk/lib/multilingual/BilingualAligner.php 2008-12-13 22:01:13 UTC (rev 16035) @@ -1,195 +0,0 @@ -<?PHP - -error_reporting(E_ALL); - -require_once 'SentenceSegmentor.php'; - -class BilingualAligner { - - var $l1_sentences = array(); - var $l2_sentences = array(); - var $nodes_at_current_level = array(); - var $nodes_at_next_level = array(); - var $cost_matrix = array(); - - public function align($l1_sentences, $l2_sentences) { - return; - } - - public function _segment_into_sentences($text) { - $segmentor = new SentenceSegmentor(); - $sentences = $segmentor->segment($text); - return $sentences; - } - - public function _segment_parallel_texts_to_sentences($l1_text, $l2_text) { - $this->l1_sentences = $this->_segment_into_sentences($l1_text); - $this->l2_sentences = $this->_segment_into_sentences($l2_text); - } - - function _generate_shortest_path_matrix() { -// print "-- _generate_shortest_path_matrix: invoked\n"; - - $this->nodes_at_current_level = array("-1m1|-1m1", "-1m2|-1m1", "-1m1|-1m2", - "-1s1|-1s0", "-1s0|-1s1"); -// print "-- _generate_shortest_path_matrix: count(\$this->nodes_at_current_level)=".count($this->nodes_at_current_level)."\n"; - - while (count($this->nodes_at_current_level) > 0) { -// print "-- _generate_shortest_path_matrix: extending to next level.\n"; - $this->_extend_shortest_path_matrix_by_one_level(); - } - -/* - print "-- _generate_shortest_path_matrix: upon exit, \$this->cost_matrix=\n";var_dump($this->cost_matrix);print "\n"; - foreach (array_keys($this->cost_matrix) as $origin) { - print "-- _generate_shortest_path_matrix: \$this->cost_matrix[$origin]=";var_dump($this->cost_matrix[$origin]);print"\n"; - } -*/ - } - - public function _extend_shortest_path_matrix_by_one_level() { -// print "-- _extend_shortest_path_matrix_by_one_level: \$this->nodes_at_current_level=\n";var_dump($this->nodes_at_current_level);print "\n"; - $this->nodes_at_next_level = array(); - foreach ($this->nodes_at_current_level as $a_node_to_extend) { - $this->_extend_shortest_path_matrix_from_this_node($a_node_to_extend); - } - - // NOTE: Once this method is finished, replace line below by - // $this->nodes_at_current_level = $this->nodes_at_next_level; - // - $this->nodes_at_current_level = $this->nodes_at_next_level; - } - - public function _extend_shortest_path_matrix_from_this_node($node_to_extend) { -// print "-- _extend_shortest_path_matrix_from_this_node: \$node_to_extend='$node_to_extend'\n"; - $this->_match_current_l1_and_l2_sentences($node_to_extend, 1, 1); - $this->_match_current_l1_and_l2_sentences($node_to_extend, 1, 2); - $this->_match_current_l1_and_l2_sentences($node_to_extend, 2, 1); - $this->_skip_current_l1_or_l2_sentence($node_to_extend, 1, 0); - $this->_skip_current_l1_or_l2_sentence($node_to_extend, 0, 1); - } - - - public function _match_current_l1_and_l2_sentences($node_to_extend, - $l1_n_matches, $l2_n_matches) { - -// print "-- _match_current_l1_and_l2_sentences: extending node: \$node_to_extend='$node_to_extend'\n"; - - $sentences_this_node = $this->_sentences_at_this_node($node_to_extend); - $l1_curr_sentence = $sentences_this_node[0]; - $l2_curr_sentence = $sentences_this_node[1]; - - $new_node = $this->_generate_node_ID($l1_curr_sentence, 'm', $l1_n_matches, - $l2_curr_sentence, 'm', $l2_n_matches); -// print "-- _match_current_l1_and_l2_sentences: extending to \$new_node='$new_node'\n"; - - if ($new_node != null) { - array_push($this->nodes_at_next_level, $new_node); - - // For now, assume same cost for links between nodes. - $this->cost_matrix[$node_to_extend][$new_node] = 'match_cost'; - } else { - $this->cost_matrix[$node_to_extend]['END'] = 'goto_end_cost'; - } - -// print "-- _match_current_l1_and_l2_sentences: upon exit, \$this->cost_matrix=\n";var_dump($this->cost_matrix);print "\n"; - - return; - } - - public function _skip_current_l1_or_l2_sentence($node_to_extend, - $l1_n_skips, $l2_n_skips) { - $sentences_this_node = $this->_sentences_at_this_node($node_to_extend); - $l1_curr_sentence = $sentences_this_node[0]; - $l2_curr_sentence = $sentences_this_node[1]; - - $new_node = $this->_generate_node_ID($l1_curr_sentence, 's', $l1_n_skips, - $l2_curr_sentence, 's', $l2_n_skips); - - if ($new_node != null) { - array_push($this->nodes_at_next_level, $new_node); - - // For now, assume same cost for links between nodes. - $this->cost_matrix[$node_to_extend][$new_node] = 'skip_cost'; - } else { - $this->cost_matrix[$node_to_extend]['END'] = 'goto_end_cost'; - } - - return; - - } - - /** - * Node info has following format: - * $l1_previous_sentence$l1_operation$11_num_times|$l1_initial_sentence$l2_operation$12_num_times - * - * Where: - * $l1_previous_sentence: Index of the L1 sentence which was active in previous node. - * - * $l1_operation: Operation performed on L1 sentence when moving to this node. - * 'm' = match $l1_previous_sentence to current L2 sentences. - * 's' = skip $l1_previous_sentence - * - * $l1_num_times: Number of times that the above operation should be performed. - * - * Fields for L2 are defined similarly as above. - * - * Example: - * 32m2|35m1: Means that when moving to this node, we are macthing L1 - * sentences 32 and 33 to L2 sentence 35. - * 32s1|35s0: Means that when moving to this node, we are skipping L1 - * sentence 32, and remaining at L2 sentence 35. - */ - - public function _parse_node_ID($node_id){ -// print "-- _parse_node_ID: \$node_id='$node_id'\n"; - preg_match('/([\-\d]+)([ms])([\d]+)\|([\-\d]+)([ms])([\d]+)/', $node_id, $info); -// print "-- _parse_node_ID: \$info=\n";var_dump($info);print "\n";; - return array($info[1], $info[2], $info[3], $info[4], $info[5], $info[6]); - } - - public function _generate_node_ID($l1_sentence, $l1_operation, $l1_n_times, - $l2_sentence, $l2_operation, $l2_n_times) { - $id = null; - if ($l1_sentence + $l1_n_times < count($this->l1_sentences) && - $l2_sentence + $l2_n_times < count($this->l2_sentences)) { - $id = "$l1_sentence$l1_operation$l1_n_times|$l2_sentence$l2_operation$l2_n_times"; - } - return $id; - } - - public function _sentence_length_delta($l1_sentence, $l2_sentence) { - $l1_length = strlen($l1_sentence); - $l2_length = strlen($l2_sentence); - $delta = 0; - if ($l1_length != 0) { - $delta = abs($l1_length - $l2_length)/$l1_length; - } else { - if ($l2_length == 0) { - $delta = 0; - } else { - $delta = 1; - } - } - return $delta; - } - - function _sentences_at_this_node($node_id) { - $node_info = $this->_parse_node_ID($node_id); - $l1_sentence = $node_info[0]; - $l1_operation = $node_info[1]; - $l1_advance_by = $node_info[2]; - - $l2_sentence = $node_info[3]; - $l2_operation = $node_info[4]; - $l2_advance_by = $node_info[5]; - - $l1_next_sentence = $l1_sentence + $l1_advance_by; - $l2_next_sentence = $l2_sentence + $l2_advance_by; - - return array($l1_next_sentence, $l2_next_sentence); - } - -} - -?> \ No newline at end of file Deleted: trunk/lib/multilingual/BilingualAlignerTest.php =================================================================== --- trunk/lib/multilingual/BilingualAlignerTest.php 2008-12-13 20:31:20 UTC (rev 16034) +++ trunk/lib/multilingual/BilingualAlignerTest.php 2008-12-13 22:01:13 UTC (rev 16035) @@ -1,325 +0,0 @@ -<?php - -error_reporting(E_ALL); - -require_once 'PHPUnit/Framework.php'; -require_once 'BilingualAligner.php'; - -class BilingualAlignerTest extends PHPUnit_Framework_TestCase -{ - - public function ___test_reminder() { - $this->fail("remember to reactivate all tests in BilingualAlignerTest"); - } - - - //////////////////////////////////////////////////////////////// - // Documentation tests - // These tests illustrate how to use this class. - //////////////////////////////////////////////////////////////// - - public function test_this_is_how_you_create_a_BilingualAligner() { - $aligner = new BilingualAligner(); - } - - //////////////////////////////////////////////////////////////// - // Note: In the rest of these tests, you can assume that - // $this->aligner is an instance of BilingualAligner - // created as above. - //////////////////////////////////////////////////////////////// - - protected function setUp() { - $this->aligner = new BilingualAligner(); - } - - public function test_this_is_how_you_align_two_texts() { - $aligner = new BilingualAligner(); - $en_entences = array("Hello earthlings. Take me to your leader."); - $fr_sentences = array("Bonjour terriens. Inutile de résister. Amenez moi à votre chef."); - $aligned_sentences = $aligner->align($en_entences, $fr_sentences); - $first_pair = $aligned_sentences[0]; - $first_en_sent = $first_pair[0]; - $first_fr_sent = $first_pair[1]; - } - - //////////////////////////////////////////////////////////////// - // Internal tests - // These tests check the internal workings of the class. - //////////////////////////////////////////////////////////////// - - public function test__segment_into_sentences() { - $text = "This is sentence 1! This is sentence 2\n* This is sentence 3"; - $got_sentences = $this->aligner->_segment_into_sentences($text); - $exp_sentences = array("This is sentence 1!", - " This is sentence 2\n", - "* This is sentence 3"); - $this->assertEquals($exp_sentences, $got_sentences, - "Sentences were not properly segmented"); - } - - public function test__segment_parallel_texts_to_sentences() { - $l1_text = "This is sentence 1! This is sentence 2."; - $l2_text = "Voici la phrase 1! Voici la phrase 2."; - - $exp_l1_sentences = array("This is sentence 1!", " This is sentence 2."); - $exp_l2_sentences = array("Voici la phrase 1!", " Voici la phrase 2."); - - $this->aligner->_segment_parallel_texts_to_sentences($l1_text, $l2_text); - - $this->assertEquals($exp_l1_sentences, $this->aligner->l1_sentences, - "L1 sentences not generated properly."); - $this->assertEquals($exp_l2_sentences, $this->aligner->l2_sentences, - "L2 sentences not generated properly."); - - } - - public function test__sentence_length_delta() { - - $l1_sentence = "Hello world."; - $l2_sentence = "Bonjour le monde."; - $this->assert_sentence_length_delta_is($l1_sentence, $l2_sentence, 0.417, - "Bad delta for case with two non-empty sentences."); - - $l1_sentence = ""; - $l2_sentence = "Bonjour le monde."; - $this->assert_sentence_length_d... [truncated message content] |
From: <ny...@us...> - 2008-12-19 11:05:29
|
Revision: 16105 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16105&view=rev Author: nyloth Date: 2008-12-19 11:05:25 +0000 (Fri, 19 Dec 2008) Log Message: ----------- [FIX] newsletters: fix images in mails by make wiki parsing 'absolute urls' option work again. Seems that some guys just don't care (as usual) about environment... :[ Modified Paths: -------------- trunk/lib/tikilib.php trunk/lib/wiki-plugins/wikiplugin_img.php Modified: trunk/lib/tikilib.php =================================================================== --- trunk/lib/tikilib.php 2008-12-19 11:02:52 UTC (rev 16104) +++ trunk/lib/tikilib.php 2008-12-19 11:05:25 UTC (rev 16105) @@ -5146,7 +5146,7 @@ } // This recursive function handles pre- and no-parse sections and plugins - function parse_first(&$data, &$preparsed, &$noparsed, $real_start_diff='0', $options=null) { + function parse_first(&$data, &$preparsed, &$noparsed, $options=null, $real_start_diff='0') { global $dbTiki, $smarty, $tiki_p_edit, $prefs, $pluginskiplist; if( ! is_array( $pluginskiplist ) ) $pluginskiplist = array(); @@ -5255,7 +5255,7 @@ } else { // print "<pre>args1: :".htmlspecialchars( $plugins[2] ) .":</pre>"; // Handle nested plugins in the arguments. - $this->parse_first($plugins[2], $preparsed, $noparsed); + $this->parse_first($plugins[2], $preparsed, $noparsed, $options); // print "<pre>args2: :".htmlspecialchars( $plugins[2] ) .":</pre>"; // Normal plugins @@ -5292,10 +5292,10 @@ } else { // Handle nested plugins. - $this->parse_first($plugin_data, $preparsed, $noparsed, $real_start_diff + $pos+strlen($plugin_start)); + $this->parse_first($plugin_data, $preparsed, $noparsed, $options, $real_start_diff + $pos+strlen($plugin_start)); if( true === $status = $this->plugin_can_execute( $plugin_name, $plugin_data, $arguments ) ) { - $ret = $this->plugin_execute( $plugin_name, $plugin_data, $arguments, $real_start_diff + $pos+strlen($plugin_start)); + $ret = $this->plugin_execute( $plugin_name, $plugin_data, $arguments, $real_start_diff + $pos+strlen($plugin_start), false, $options); } else { global $tiki_p_plugin_viewdetail, $tiki_p_plugin_preview, $tiki_p_plugin_approve; $details = $tiki_p_plugin_viewdetail == 'y' && $status != 'rejected'; @@ -5331,7 +5331,7 @@ } else { // Handle nested plugins. - $this->parse_first($plugin_data, $preparsed, $noparsed); + $this->parse_first($plugin_data, $preparsed, $noparsed, $options); $ret = tra( "__WARNING__: Plugin disabled $plugin!" ) . $plugin_data; } @@ -5340,7 +5340,7 @@ } else { if( $plugins['type'] == 'long' ) { // Handle nested plugins. - $this->parse_first($plugin_data, $preparsed, $noparsed); + $this->parse_first($plugin_data, $preparsed, $noparsed, $options); $ret = tra( "__WARNING__: No such module $plugin!" ) . $plugin_data; $skip = false; @@ -5354,7 +5354,7 @@ if( ! $skip ) { // Handle pre- & no-parse sections and plugins inserted by this plugin - $this->parse_first($ret, $preparsed, $noparsed); + $this->parse_first($ret, $preparsed, $noparsed, $options); //$ret = $this->parse_data($ret); // Replace plugin section with its output in data @@ -5620,7 +5620,7 @@ return "$name-$bodyHash-$argsHash-$bodyLen-$argsLen"; } - function plugin_execute( $name, $data = '', $args = array(), $offset = 0, $validationPerformed = false ) { + function plugin_execute( $name, $data = '', $args = array(), $offset = 0, $validationPerformed = false, $parseOptions = array() ) { if( ! $this->plugin_exists( $name, true ) ) return false; @@ -5648,7 +5648,7 @@ } if( function_exists( $func_name ) ) { - return $func_name( $data, $args, $offset ); + return $func_name( $data, $args, $offset, $parseOptions ); } elseif( $info = $this->plugin_alias_info( $name ) ) { $name = $info['implementation']; @@ -5680,7 +5680,7 @@ } } - return $this->plugin_execute( $name, $data, $params, $offset, true ); + return $this->plugin_execute( $name, $data, $params, $offset, true, $parseOptions ); } } @@ -6004,7 +6004,7 @@ $preparsed = array('data'=>array(),'key'=>array()); $noparsed = array('data'=>array(),'key'=>array()); if (!$noparseplugins) { - $this->parse_first($data, $preparsed, $noparsed); + $this->parse_first($data, $preparsed, $noparsed, $options); } // Handle |# anchor links by turning them into ALINK module calls. @@ -6043,7 +6043,7 @@ } if (!$noparseplugins) { - $this->parse_first($data, $preparsed, $noparsed); + $this->parse_first($data, $preparsed, $noparsed, $options); } // Handle ~pre~...~/pre~ sections Modified: trunk/lib/wiki-plugins/wikiplugin_img.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_img.php 2008-12-19 11:02:52 UTC (rev 16104) +++ trunk/lib/wiki-plugins/wikiplugin_img.php 2008-12-19 11:05:25 UTC (rev 16105) @@ -66,7 +66,7 @@ ); } -function wikiplugin_img( $data, $params ) +function wikiplugin_img( $data, $params, $offset, $parseOptions ) { global $tikidomain, $tikiroot, $prefs; @@ -102,8 +102,7 @@ // Handle absolute links (e.g. to send a newsletter with images that remains on the tiki site) - $options = array(); // FIXME : From parse_data options - $absolute_links = isset($options['absolute_links']) ? $options['absolute_links'] : false; + $absolute_links = isset($parseOptions['absolute_links']) ? $parseOptions['absolute_links'] : false; if ( $imgdata['src'] != '' && $absolute_links && ! preg_match('|^[a-zA-Z]+:\/\/|', $imgdata['src']) ) { global $base_host, $url_path; $imgdata['src'] = $base_host.( $imgdata['src'][0] == '/' ? '' : $url_path ).$imgdata['src']; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sy...@us...> - 2008-12-25 22:41:02
|
Revision: 16148 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16148&view=rev Author: sylvieg Date: 2008-12-25 22:40:58 +0000 (Thu, 25 Dec 2008) Log Message: ----------- [FIX]xml export: some fix on structures Modified Paths: -------------- trunk/lib/tikilib.php trunk/lib/wiki/xmllib.php Modified: trunk/lib/tikilib.php =================================================================== --- trunk/lib/tikilib.php 2008-12-25 22:07:55 UTC (rev 16147) +++ trunk/lib/tikilib.php 2008-12-25 22:40:58 UTC (rev 16148) @@ -7800,6 +7800,13 @@ } } + function get_attach_hash_file_name($file_name) { + global $prefs; + do { + $fhash = '§'.md5($file_name.date('U').rand()).'§'; + } while (file_exists($prefs['w_use_dir'].$fhash)); + return $fhash; + } function attach_file($file_name, $file_tmp_name, $store_type) { global $prefs; $tmp_dest = $prefs['tmpDir'] . "/" . $file_name.".tmp"; @@ -7810,10 +7817,10 @@ $fhash = ''; $chunk = ''; if ($store_type == 'dir') { - $fhash = '§'.md5($name = $file_name.date('U')).'§'; + $fhash = $this->get_attach_hash_file_name($file_name); $fw = fopen($prefs['w_use_dir'].$fhash, "wb"); if (!$fw) - return array("ok"=>false, "error"=>tra('Cannot write to this file:').$fhash); + return array("ok"=>false, "error"=>tra('Cannot write to this file:').$prefs['w_use_dir'].$fhash); } while(!feof($fp)) { $chunk = fread($fp, 8192*16); Modified: trunk/lib/wiki/xmllib.php =================================================================== --- trunk/lib/wiki/xmllib.php 2008-12-25 22:07:55 UTC (rev 16147) +++ trunk/lib/wiki/xmllib.php 2008-12-25 22:40:58 UTC (rev 16148) @@ -14,6 +14,7 @@ var $xml = ''; var $zip = ''; var $config = array('comments'=>true, 'attachments'=>true, 'history'=>true, 'images'=>true, 'debug'=>false); + var $structureStack = array(); function XmlLib() { global $dbTiki; parent::TikiLib($dbTiki); @@ -72,11 +73,10 @@ return false; } } - while (count($stack) && $stack[count($stack) - 1] != $page['parentId']) { + while (count($stack)) { array_pop($stack); $this->xml .= '</structure>'; } - $this->xml .= '</structure>'; } if (!$this->zip->addFromString(WIKI_XML, $this->xml) ) { @@ -327,7 +327,14 @@ $this->query($query,array($info['name'], $version['version'], $tikilib->now, $version['user'], $version['ip'], $version['comment'], $version['data'], $version['description'])); } } - + if ($prefs['feature_wiki_structure'] == 'y' && !empty($info['structure'])) { + global $structlib; include_once('lib/structures/structlib.php'); + if ($info['structure'] == 1) { + $this->structureStack[$info['structure']] = $structlib->s_create_page(null, null , $info['name'], $info['alias']); + } else { + $structlib->s_create_page($this->structureStack[$info['structure'] - 1], $after, $info['name'], ''); + } + } return true; } @@ -343,14 +350,22 @@ var $folding = false; // keep tag as original var $commentsStack = array(); var $commentId = 0; + var $iStructure = 0; function startHandler($parser, $name, $attribs) { switch ($name) { case 'page': - if ($attribs) { + $this->context = null; + if (is_array($attribs)) { $this->page = array('data'=>'', 'comment'=>'', 'description'=>'', 'user'=>'admin', 'ip'=>'0.0.0.0', 'lang'=>'', 'is_html'=>false, 'hash'=>null, 'wysiwyg'=>null); $this->page = array_merge($this->page, $attribs); } + if ($this->iStructure > 0 ) { + $this->page['structure'] = $this->iStructure; + } break; + case 'structure': + ++$this->iStructure; + break; case 'comments': $comentsStack = array(); case 'attachments': @@ -404,6 +419,10 @@ break; case 'page': $this->pages[] = $this->page; + break; + case 'structure': + --$this->iStructure; + break; } } function cdataHandler($parser, $data) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lph...@us...> - 2009-01-06 21:10:50
|
Revision: 16192 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16192&view=rev Author: lphuberdeau Date: 2009-01-06 21:10:47 +0000 (Tue, 06 Jan 2009) Log Message: ----------- [FIX] Picking up a few loose ends Modified Paths: -------------- trunk/lib/categories/categlib.php trunk/lib/structures/structlib.php trunk/lib/tikilib.php trunk/lib/userslib.php trunk/lib/wiki/wikilib.php Modified: trunk/lib/categories/categlib.php =================================================================== --- trunk/lib/categories/categlib.php 2009-01-06 20:46:10 UTC (rev 16191) +++ trunk/lib/categories/categlib.php 2009-01-06 21:10:47 UTC (rev 16192) @@ -1336,6 +1336,8 @@ function remove_category_from_watchlists($categId) { $query = 'delete from `tiki_user_watches` where `object`=? and `type`=?'; $this->query($query, array((int) $categId, 'Category')); + $query = 'delete from `tiki_group_watches` where `object`=? and `type`=?'; + $this->query($query, array((int) $categId, 'Category')); } Modified: trunk/lib/structures/structlib.php =================================================================== --- trunk/lib/structures/structlib.php 2009-01-06 20:46:10 UTC (rev 16191) +++ trunk/lib/structures/structlib.php 2009-01-06 21:10:47 UTC (rev 16192) @@ -321,7 +321,15 @@ } $query = "SELECT ts.`parent_id`,tuw.`email`,tuw.`user`, tuw.`event`"; $query .= " FROM `tiki_structures` ts"; - $query .= " LEFT JOIN `tiki_user_watches` tuw ON (tuw.`object`=ts.`page_ref_id` AND tuw.`event`=?)"; + $query .= " LEFT JOIN ( + SELECT watchId, user, event, object, title, type, url, email FROM `tiki_user_watches` + UNION DISTINCT + SELECT watchId, uu.login as user, event, object, title, type, url, uu.email + FROM + `tiki_group_watches` tgw + INNER JOIN users_usergroups ug ON tgw.`group` = ug.groupName + INNER JOIN users_users uu ON ug.userId = uu.userId AND uu.email IS NOT NULL AND uu.email <> '' + ) tuw ON (tuw.`object`=ts.`page_ref_id` AND tuw.`event`=?)"; if (empty($page_ref_id)) { $query .= " LEFT JOIN `tiki_pages` tp ON ( tp.`page_id`=ts.`page_id`)"; $query .= " WHERE tp.`pageName`=?"; Modified: trunk/lib/tikilib.php =================================================================== --- trunk/lib/tikilib.php 2009-01-06 20:46:10 UTC (rev 16191) +++ trunk/lib/tikilib.php 2009-01-06 21:10:47 UTC (rev 16192) @@ -3588,6 +3588,8 @@ $query = "delete from `tiki_user_watches` where `event`=? and `object`=?"; $this->query($query,array('wiki_page_changed', $page)); + $query = "delete from `tiki_group_watches` where `event`=? and `object`=?"; + $this->query($query,array('wiki_page_changed', $page)); $atts = $wikilib->list_wiki_attachments($page, 0, -1, 'created_desc', ''); foreach ($atts["data"] as $at) { Modified: trunk/lib/userslib.php =================================================================== --- trunk/lib/userslib.php 2009-01-06 20:46:10 UTC (rev 16191) +++ trunk/lib/userslib.php 2009-01-06 21:10:47 UTC (rev 16192) @@ -1324,6 +1324,7 @@ $query[] = "delete from `users_objectpermissions` where `groupName` = ?"; $query[] = "delete from `tiki_newsletter_groups` where `groupName` = ?"; $query[] = "delete from `tiki_newsreader_marks` where `groupName` = ?"; + $query[] = "delete from `tiki_group_watches` where `group` = ?"; foreach ( $query as $q ) $this->query($q, array($group)); global $cachelib; Modified: trunk/lib/wiki/wikilib.php =================================================================== --- trunk/lib/wiki/wikilib.php 2009-01-06 20:46:10 UTC (rev 16191) +++ trunk/lib/wiki/wikilib.php 2009-01-06 21:10:47 UTC (rev 16192) @@ -245,6 +245,8 @@ $newId = 'wikipage' . $newName; $query = "update `tiki_user_watches` set `object`=? where `object`=?"; $this->query($query, array( $newId, $oldId ) ); + $query = "update `tiki_group_watches` set `object`=? where `object`=?"; + $this->query($query, array( $newId, $oldId ) ); // theme_control_objects(objId,name) $oldId = md5('wiki page' . $oldName); @@ -290,6 +292,8 @@ // user watches $query = "update `tiki_user_watches` set `object`=?, `title`=?, `url`=? where `object`=? and `type` = 'wiki page'"; $this->query($query, array( $newName, $newName, 'tiki-index.php?page='.$newName, $oldName ) ); + $query = "update `tiki_group_watches` set `object`=?, `title`=?, `url`=? where `object`=? and `type` = 'wiki page'"; + $this->query($query, array( $newName, $newName, 'tiki-index.php?page='.$newName, $oldName ) ); // now send notification email to all on the watchlist: if ($prefs['feature_user_watches'] == 'y') { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sy...@us...> - 2009-01-09 17:47:51
|
Revision: 16220 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16220&view=rev Author: sylvieg Date: 2009-01-09 17:47:47 +0000 (Fri, 09 Jan 2009) Log Message: ----------- [FIX]perm: check perm for tiki-user_info/tiki_my_tiki list Modified Paths: -------------- trunk/lib/articles/artlib.php trunk/lib/commentslib.php trunk/lib/tikilib.php trunk/lib/wiki/wikilib.php Modified: trunk/lib/articles/artlib.php =================================================================== --- trunk/lib/articles/artlib.php 2009-01-09 17:27:16 UTC (rev 16219) +++ trunk/lib/articles/artlib.php 2009-01-09 17:47:47 UTC (rev 16220) @@ -526,7 +526,9 @@ $ret = array(); while ($res = $result->fetchRow()) { - $ret[] = $res; + if ($this->user_has_perm_on_object($user, $res['articleId'], 'article', 'tiki_p_read_article')) { + $ret[] = $res; + } } return $ret; Modified: trunk/lib/commentslib.php =================================================================== --- trunk/lib/commentslib.php 2009-01-09 17:27:16 UTC (rev 16219) +++ trunk/lib/commentslib.php 2009-01-09 17:47:47 UTC (rev 16220) @@ -1244,7 +1244,9 @@ $ret = array(); while ($res = $result->fetchRow()) { - $ret[] = $res; + if ($this->user_has_perm_on_object($user, $res['forumId'], 'forum', 'tiki_p_forum_read')) { + $ret[] = $res; + } } return $ret; Modified: trunk/lib/tikilib.php =================================================================== --- trunk/lib/tikilib.php 2009-01-09 17:27:16 UTC (rev 16219) +++ trunk/lib/tikilib.php 2009-01-09 17:47:47 UTC (rev 16220) @@ -593,6 +593,9 @@ $ret = array(); while ($res = $result->fetchRow()) { + if (!$this->user_has_perm_on_object($user, $res['trackerId'], 'tracker', 'tiki_p_view_trackers')) { + continue; + } $itemId = $res["itemId"]; $trackerId = $res["trackerId"]; @@ -2707,7 +2710,9 @@ $ret = array(); while ($res = $result->fetchRow()) { - $ret[] = $res; + if ($this->user_has_perm_on_object($user, $res['blogId'], 'blog', 'tiki_p_read_blog')) { + $ret[] = $res; + } } return $ret; } @@ -4868,7 +4873,9 @@ $ret = array(); while ($res = $result->fetchRow()) { - $ret[] = $res; + if ($this->user_has_perm_on_object($user, $res['galleryId'], 'image gallery', 'tiki_p_view_image_gallery')) { + $ret[] = $res; + } } return $ret; } Modified: trunk/lib/wiki/wikilib.php =================================================================== --- trunk/lib/wiki/wikilib.php 2009-01-09 17:27:16 UTC (rev 16219) +++ trunk/lib/wiki/wikilib.php 2009-01-09 17:47:47 UTC (rev 16220) @@ -819,7 +819,9 @@ $result = $this->query($query, array($user, 'Updated', 'Created')); $ret = array(); while ($res = $result->fetchRow()) { + if ($this->user_has_perm_on_object($user, $res['pageName'], 'wiki page', 'tiki_p_view')) { $ret[] = $res; + } } return $ret; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lph...@us...> - 2009-01-10 18:54:42
|
Revision: 16232 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16232&view=rev Author: lphuberdeau Date: 2009-01-10 18:54:35 +0000 (Sat, 10 Jan 2009) Log Message: ----------- [FIX] Remove debug information Modified Paths: -------------- trunk/lib/core/test/DeclFilter/ConfigureTest.php trunk/lib/imagegals/imagegallib.php trunk/lib/ointegratelib.php Modified: trunk/lib/core/test/DeclFilter/ConfigureTest.php =================================================================== --- trunk/lib/core/test/DeclFilter/ConfigureTest.php 2009-01-10 18:42:22 UTC (rev 16231) +++ trunk/lib/core/test/DeclFilter/ConfigureTest.php 2009-01-10 18:54:35 UTC (rev 16232) @@ -47,6 +47,18 @@ $filter = DeclFilter::fromConfiguration( $configuration, array( 'catchAllFilter' ) ); } + /** + * @expectedException Exception + */ + function testMissingLevel() + { + $configuration = array( + 'catchAllUnset' => null, + ); + + $filter = DeclFilter::fromConfiguration( $configuration ); + } + function testUnsetSome() { $configuration = array( Modified: trunk/lib/imagegals/imagegallib.php =================================================================== --- trunk/lib/imagegals/imagegallib.php 2009-01-10 18:42:22 UTC (rev 16231) +++ trunk/lib/imagegals/imagegallib.php 2009-01-10 18:54:35 UTC (rev 16232) @@ -875,7 +875,6 @@ // insert thumb if ($t_data) { -echo 'THUMB'.$imageId; $this->blob_encode($t_data['data']); $query = "insert into `tiki_images_data`(`imageId`,`xsize`,`ysize`, `type`,`filesize`,`filetype`,`filename`,`data`) values (?,?,?,?,?,?,?,?)"; Modified: trunk/lib/ointegratelib.php =================================================================== --- trunk/lib/ointegratelib.php 2009-01-10 18:42:22 UTC (rev 16231) +++ trunk/lib/ointegratelib.php 2009-01-10 18:54:35 UTC (rev 16232) @@ -137,6 +137,10 @@ $parts = explode( ';', $type ); $type = trim($parts[0]); + if( empty($data) ) { + return null; + } + switch( $type ) { case 'application/json': This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lph...@us...> - 2009-01-10 22:36:11
|
Revision: 16238 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16238&view=rev Author: lphuberdeau Date: 2009-01-10 22:36:08 +0000 (Sat, 10 Jan 2009) Log Message: ----------- [MOD] Rewrite of the mouseover plugin to work in more contexts Modified Paths: -------------- trunk/lib/tikilib.php trunk/lib/wiki-plugins/wikiplugin_mouseover.php Modified: trunk/lib/tikilib.php =================================================================== --- trunk/lib/tikilib.php 2009-01-10 20:51:26 UTC (rev 16237) +++ trunk/lib/tikilib.php 2009-01-10 22:36:08 UTC (rev 16238) @@ -5281,9 +5281,9 @@ $key = "§".md5($this->genPass())."§"; $noparsed["key"][] = preg_quote($key); $plugin_data = str_replace('\\','\\\\',$plugin_data); - if( strstr( $plugin_data, '$' ) ) { - $plugin_data = str_replace('$', '\$', $plugin_data); - } + //if( strstr( $plugin_data, '$' ) ) { + //$plugin_data = str_replace('$', '\$', $plugin_data); + //} if( $plugin_start == "~pp~" ) { $noparsed["data"][] = "<pre>" . $plugin_data . "</pre>"; } elseif( preg_match( "/^ *<[pP][rR][eE]>/", $plugin_start ) ) { Modified: trunk/lib/wiki-plugins/wikiplugin_mouseover.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_mouseover.php 2009-01-10 20:51:26 UTC (rev 16237) +++ trunk/lib/wiki-plugins/wikiplugin_mouseover.php 2009-01-10 22:36:08 UTC (rev 16238) @@ -4,7 +4,7 @@ * PLugin mouseover - See documentation http://www.bosrup.com/web/overlib/?Documentation */ function wikiplugin_mouseover_help() { - return tra("Create a mouseover feature on some text").":<br />~np~{MOUSEOVER(url=url,text=text,parse=y,width=300,height=300, sticky=>y,left=y,right=n,center=n,above=n,below=y,offsetx=0,offsety=0,sticky=0|1)}".tra('text')."{MOUSEOVER}~/np~"; + return tra("Create a mouseover feature on some text").":<br />~np~{MOUSEOVER(url=url,text=text,parse=y,width=300,height=300)}".tra('text')."{MOUSEOVER}~/np~"; } function wikiplugin_mouseover_info() { @@ -18,107 +18,66 @@ 'required' => false, 'name' => tra('URL'), 'description' => tra('?'), + 'filter' => 'url', ), 'text' => array( 'required' => true, 'name' => tra('Text'), 'description' => tra('Text displayed on the page.'), + 'filter' => 'striptags', ), - 'parse' => array( - 'required' => false, - 'name' => tra('Parse'), - 'description' => 'y|n', - ), 'width' => array( 'required' => false, 'name' => tra('Width'), 'description' => tra('Mouse over box width.'), + 'filter' => 'digits', ), 'height' => array( 'required' => false, 'name' => tra('Height'), 'description' => tra('Mouse over box height.'), + 'filter' => 'digits', ), - 'sticky' => array( - 'required' => false, - 'name' => tra('Sticky'), - 'description' => 'y|n', - ), - 'left' => array( - 'required' => false, - 'name' => tra('Left'), - 'description' => 'y|n', - ), - 'right' => array( - 'required' => false, - 'name' => tra('Right'), - 'description' => 'y|n', - ), - 'center' => array( - 'required' => false, - 'name' => tra('Center'), - 'description' => 'y|n', - ), - 'above' => array( - 'required' => false, - 'name' => tra('Above'), - 'description' => 'y|n', - ), - 'below' => array( - 'required' => false, - 'name' => tra('Below'), - 'description' => 'y|n', - ), - 'offsetx' => array( - 'required' => false, - 'name' => tra('Horizontal Offset'), - 'description' => tra('Numeric'), - ), - 'offsety' => array( - 'required' => false, - 'name' => tra('Vertical Offset'), - 'description' => tra('Numeric'), - ), ), ); } -function wikiplugin_mouseover($data, $params) { +function wikiplugin_mouseover( $data, $params ) { global $smarty, $tikilib; - extract ($params,EXTR_SKIP); - $html = ''; - if (empty($url)) { + + if( ! isset($params['url']) ) { $url = 'javascript:void()'; - } - if (!$smarty->get_template_vars('overlib_loaded')) { - $html .= '<div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>'; - $html .= '<script type="text/javascript" src="lib/overlib.js"></script>'; - $smarty->assign('overlib_loaded',1); - } - $html .= "<a href='$url'"; - if (!empty($parse) && ($parse == 'y' || $parse == '1')) { - $data = $tikilib->parse_data($data); - $data = substr($data, 0, -1);// do not ask me why - but the parsing adds a CR } else { - // Really don't parse... - $data = "~np~ $data ~/np~"; + $url = $params['url']; } - $data = preg_replace('/\r\n/', '<br />', $data); - $html .= " onmouseover=\"return overlib('".str_replace("'", "\'", htmlspecialchars($data))."'"; - foreach ($params as $param=>$value) { - $p = strtoupper($param); - if ($p != 'URL' && $p != 'TEXT' && $p != 'PARSE') { - if ((!empty($value) || $value != 'n') && ($p == 'STICKY' || $p == 'LEFT' || $p == 'RIGHT' || $p == 'CENTER' || $p == 'ABOVE' || $p == 'BELOW' || $p == 'AUTOSTATUS' || $p == 'AUTOSTATUSCAP' || $p == 'HAUTO' || $p == 'VAUTO' || $p == 'CLOSECLICK' || $p == 'FULLHTML' || $p == 'CSSOFF' || $p == 'CSSSTYLE' || $p == 'CSSCLASS' || $p == 'NOCLOSE')) { - $html .= ','.$p; - } else { - $html .= ','.$p; - $html .= ','.$value; - } - } - } - $html .= ");\" onmouseout='nd();' >"; - $html .= "$text</a>"; - return $html; + $width = isset( $params['width'] ) ? (int) $params['width'] : 300; + $height = isset( $params['height'] ) ? (int) $params['height'] : 300; + + $text = isset( $params['text'] ) ? $params['text'] : 'No label specified'; + + static $lastval = 0; + $id = "mo" . ++$lastval; + + $url = htmlentities( $url, ENT_QUOTES, 'UTF-8' ); + + global $headerlib; + + $headerlib->add_js( " +window.addEvent('domready', function() { + $('$id-link').addEvent( 'mouseover', function(event) { + $('$id').setStyle('left', event.page.x + 'px'); + $('$id').setStyle('top', event.page.y + 'px'); + $('$id').setStyle('display','block'); + } ); + $('$id-link').addEvent( 'mouseout', function(event) { + $('$id').setStyle('display','none'); + } ); +} ); +" ); + + return "~np~<a id=\"$id-link\" href=\"$url\">$text</a><div id=\"$id\" style=\"width: {$width}px; height: {$height}px; display:none; position: absolute; z-index: 500; background: white;\">~/np~ +$data +~np~</div>~/np~"; } ?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: Sylvie G. <sgr...@gm...> - 2009-01-11 19:18:28
|
I do not think it is a good idea - You need to provide a script or ... to change the wiki syntax if you do so. Why not creating another plugin if you do not like the previous syntax. And what about sticky and other params. I am for a rollback and create a onmouseover plugin or something like that Thanks sylvie On Sat, 2009-01-10 at 22:36 +0000, lph...@us... wrote: > Revision: 16238 > http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16238&view=rev > Author: lphuberdeau > Date: 2009-01-10 22:36:08 +0000 (Sat, 10 Jan 2009) > > Log Message: > ----------- > [MOD] Rewrite of the mouseover plugin to work in more contexts > > Modified Paths: > -------------- > trunk/lib/tikilib.php > trunk/lib/wiki-plugins/wikiplugin_mouseover.php > > Modified: trunk/lib/tikilib.php > =================================================================== > --- trunk/lib/tikilib.php 2009-01-10 20:51:26 UTC (rev 16237) > +++ trunk/lib/tikilib.php 2009-01-10 22:36:08 UTC (rev 16238) > @@ -5281,9 +5281,9 @@ > $key = "§".md5($this->genPass())."§"; > $noparsed["key"][] = preg_quote($key); > $plugin_data = str_replace('\\','\\\\',$plugin_data); > - if( strstr( $plugin_data, '$' ) ) { > - $plugin_data = str_replace('$', '\$', $plugin_data); > - } > + //if( strstr( $plugin_data, '$' ) ) { > + //$plugin_data = str_replace('$', '\$', $plugin_data); > + //} > if( $plugin_start == "~pp~" ) { > $noparsed["data"][] = "<pre>" . $plugin_data . "</pre>"; > } elseif( preg_match( "/^ *<[pP][rR][eE]>/", $plugin_start ) ) { > > Modified: trunk/lib/wiki-plugins/wikiplugin_mouseover.php > =================================================================== > --- trunk/lib/wiki-plugins/wikiplugin_mouseover.php 2009-01-10 20:51:26 UTC (rev 16237) > +++ trunk/lib/wiki-plugins/wikiplugin_mouseover.php 2009-01-10 22:36:08 UTC (rev 16238) > @@ -4,7 +4,7 @@ > * PLugin mouseover - See documentation http://www.bosrup.com/web/overlib/?Documentation > */ > function wikiplugin_mouseover_help() { > - return tra("Create a mouseover feature on some text").":<br />~np~{MOUSEOVER(url=url,text=text,parse=y,width=300,height=300, sticky=>y,left=y,right=n,center=n,above=n,below=y,offsetx=0,offsety=0,sticky=0|1)}".tra('text')."{MOUSEOVER}~/np~"; > + return tra("Create a mouseover feature on some text").":<br />~np~{MOUSEOVER(url=url,text=text,parse=y,width=300,height=300)}".tra('text')."{MOUSEOVER}~/np~"; > } > > function wikiplugin_mouseover_info() { > @@ -18,107 +18,66 @@ > 'required' => false, > 'name' => tra('URL'), > 'description' => tra('?'), > + 'filter' => 'url', > ), > 'text' => array( > 'required' => true, > 'name' => tra('Text'), > 'description' => tra('Text displayed on the page.'), > + 'filter' => 'striptags', > ), > - 'parse' => array( > - 'required' => false, > - 'name' => tra('Parse'), > - 'description' => 'y|n', > - ), > 'width' => array( > 'required' => false, > 'name' => tra('Width'), > 'description' => tra('Mouse over box width.'), > + 'filter' => 'digits', > ), > 'height' => array( > 'required' => false, > 'name' => tra('Height'), > 'description' => tra('Mouse over box height.'), > + 'filter' => 'digits', > ), > - 'sticky' => array( > - 'required' => false, > - 'name' => tra('Sticky'), > - 'description' => 'y|n', > - ), > - 'left' => array( > - 'required' => false, > - 'name' => tra('Left'), > - 'description' => 'y|n', > - ), > - 'right' => array( > - 'required' => false, > - 'name' => tra('Right'), > - 'description' => 'y|n', > - ), > - 'center' => array( > - 'required' => false, > - 'name' => tra('Center'), > - 'description' => 'y|n', > - ), > - 'above' => array( > - 'required' => false, > - 'name' => tra('Above'), > - 'description' => 'y|n', > - ), > - 'below' => array( > - 'required' => false, > - 'name' => tra('Below'), > - 'description' => 'y|n', > - ), > - 'offsetx' => array( > - 'required' => false, > - 'name' => tra('Horizontal Offset'), > - 'description' => tra('Numeric'), > - ), > - 'offsety' => array( > - 'required' => false, > - 'name' => tra('Vertical Offset'), > - 'description' => tra('Numeric'), > - ), > ), > ); > } > > -function wikiplugin_mouseover($data, $params) { > +function wikiplugin_mouseover( $data, $params ) { > global $smarty, $tikilib; > - extract ($params,EXTR_SKIP); > - $html = ''; > - if (empty($url)) { > + > + if( ! isset($params['url']) ) { > $url = 'javascript:void()'; > - } > - if (!$smarty->get_template_vars('overlib_loaded')) { > - $html .= '<div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>'; > - $html .= '<script type="text/javascript" src="lib/overlib.js"></script>'; > - $smarty->assign('overlib_loaded',1); > - } > - $html .= "<a href='$url'"; > - if (!empty($parse) && ($parse == 'y' || $parse == '1')) { > - $data = $tikilib->parse_data($data); > - $data = substr($data, 0, -1);// do not ask me why - but the parsing adds a CR > } else { > - // Really don't parse... > - $data = "~np~ $data ~/np~"; > + $url = $params['url']; > } > - $data = preg_replace('/\r\n/', '<br />', $data); > - $html .= " onmouseover=\"return overlib('".str_replace("'", "\'", htmlspecialchars($data))."'"; > - foreach ($params as $param=>$value) { > - $p = strtoupper($param); > - if ($p != 'URL' && $p != 'TEXT' && $p != 'PARSE') { > - if ((!empty($value) || $value != 'n') && ($p == 'STICKY' || $p == 'LEFT' || $p == 'RIGHT' || $p == 'CENTER' || $p == 'ABOVE' || $p == 'BELOW' || $p == 'AUTOSTATUS' || $p == 'AUTOSTATUSCAP' || $p == 'HAUTO' || $p == 'VAUTO' || $p == 'CLOSECLICK' || $p == 'FULLHTML' || $p == 'CSSOFF' || $p == 'CSSSTYLE' || $p == 'CSSCLASS' || $p == 'NOCLOSE')) { > - $html .= ','.$p; > - } else { > - $html .= ','.$p; > - $html .= ','.$value; > - } > - } > - } > - $html .= ");\" onmouseout='nd();' >"; > - $html .= "$text</a>"; > > - return $html; > + $width = isset( $params['width'] ) ? (int) $params['width'] : 300; > + $height = isset( $params['height'] ) ? (int) $params['height'] : 300; > + > + $text = isset( $params['text'] ) ? $params['text'] : 'No label specified'; > + > + static $lastval = 0; > + $id = "mo" . ++$lastval; > + > + $url = htmlentities( $url, ENT_QUOTES, 'UTF-8' ); > + > + global $headerlib; > + > + $headerlib->add_js( " > +window.addEvent('domready', function() { > + $('$id-link').addEvent( 'mouseover', function(event) { > + $('$id').setStyle('left', event.page.x + 'px'); > + $('$id').setStyle('top', event.page.y + 'px'); > + $('$id').setStyle('display','block'); > + } ); > + $('$id-link').addEvent( 'mouseout', function(event) { > + $('$id').setStyle('display','none'); > + } ); > +} ); > +" ); > + > + return "~np~<a id=\"$id-link\" href=\"$url\">$text</a><div id=\"$id\" style=\"width: {$width}px; height: {$height}px; display:none; position: absolute; z-index: 500; background: white;\">~/np~ > +$data > +~np~</div>~/np~"; > } > ?> > > > This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. > > ------------------------------------------------------------------------------ > Check out the new SourceForge.net Marketplace. > It is the best place to buy or sell services for > just about anything Open Source. > http://p.sf.net/sfu/Xq1LFB > _______________________________________________ > Tikiwiki-cvs mailing list > Tik...@li... > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs |
From: Louis-Philippe H. <lph...@lp...> - 2009-01-11 19:22:00
|
Syntax remains largely the same. Plugin was rewritten because it was broken. Most declared parameters were unused as far as I can tell. This plugin was not bundled by default before 3.0. It used to be a mod. Need more arguments? On January 11, 2009 14:18:22 Sylvie Greverend wrote: > I do not think it is a good idea - You need to provide a script or ... > to change the wiki syntax if you do so. Why not creating another plugin > if you do not like the previous syntax. And what about sticky and other > params. > I am for a rollback and create a onmouseover plugin or something like > that > Thanks > sylvie > > On Sat, 2009-01-10 at 22:36 +0000, lph...@us... > > wrote: > > Revision: 16238 > > > > http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16238&view=rev Author: > > lphuberdeau > > Date: 2009-01-10 22:36:08 +0000 (Sat, 10 Jan 2009) > > > > Log Message: > > ----------- > > [MOD] Rewrite of the mouseover plugin to work in more contexts > > > > Modified Paths: > > -------------- > > trunk/lib/tikilib.php > > trunk/lib/wiki-plugins/wikiplugin_mouseover.php > > > > Modified: trunk/lib/tikilib.php > > =================================================================== > > --- trunk/lib/tikilib.php 2009-01-10 20:51:26 UTC (rev 16237) > > +++ trunk/lib/tikilib.php 2009-01-10 22:36:08 UTC (rev 16238) > > @@ -5281,9 +5281,9 @@ > > $key = "§".md5($this->genPass())."§"; > > $noparsed["key"][] = preg_quote($key); > > $plugin_data = str_replace('\\','\\\\',$plugin_data); > > - if( strstr( $plugin_data, '$' ) ) { > > - $plugin_data = str_replace('$', '\$', $plugin_data); > > - } > > + //if( strstr( $plugin_data, '$' ) ) { > > + //$plugin_data = str_replace('$', '\$', $plugin_data); > > + //} > > if( $plugin_start == "~pp~" ) { > > $noparsed["data"][] = "<pre>" . $plugin_data . "</pre>"; > > } elseif( preg_match( "/^ *<[pP][rR][eE]>/", $plugin_start ) ) > > { > > > > Modified: trunk/lib/wiki-plugins/wikiplugin_mouseover.php > > =================================================================== > > --- trunk/lib/wiki-plugins/wikiplugin_mouseover.php 2009-01-10 20:51:26 > > UTC (rev 16237) +++ > > trunk/lib/wiki-plugins/wikiplugin_mouseover.php 2009-01-10 22:36:08 UTC > > (rev 16238) @@ -4,7 +4,7 @@ > > * PLugin mouseover - See documentation > > http://www.bosrup.com/web/overlib/?Documentation */ > > function wikiplugin_mouseover_help() { > > - return tra("Create a mouseover feature on some text").":<br > > />~np~{MOUSEOVER(url=url,text=text,parse=y,width=300,height=300, > > sticky=>y,left=y,right=n,center=n,above=n,below=y,offsetx=0,offsety=0,sti > >cky=0|1)}".tra('text')."{MOUSEOVER}~/np~"; + return tra("Create a > > mouseover feature on some text").":<br > > />~np~{MOUSEOVER(url=url,text=text,parse=y,width=300,height=300)}".tra('t > >ext')."{MOUSEOVER}~/np~"; } > > > > function wikiplugin_mouseover_info() { > > @@ -18,107 +18,66 @@ > > 'required' => false, > > 'name' => tra('URL'), > > 'description' => tra('?'), > > + 'filter' => 'url', > > ), > > 'text' => array( > > 'required' => true, > > 'name' => tra('Text'), > > 'description' => tra('Text displayed on the page.'), > > + 'filter' => 'striptags', > > ), > > - 'parse' => array( > > - 'required' => false, > > - 'name' => tra('Parse'), > > - 'description' => 'y|n', > > - ), > > 'width' => array( > > 'required' => false, > > 'name' => tra('Width'), > > 'description' => tra('Mouse over box width.'), > > + 'filter' => 'digits', > > ), > > 'height' => array( > > 'required' => false, > > 'name' => tra('Height'), > > 'description' => tra('Mouse over box height.'), > > + 'filter' => 'digits', > > ), > > - 'sticky' => array( > > - 'required' => false, > > - 'name' => tra('Sticky'), > > - 'description' => 'y|n', > > - ), > > - 'left' => array( > > - 'required' => false, > > - 'name' => tra('Left'), > > - 'description' => 'y|n', > > - ), > > - 'right' => array( > > - 'required' => false, > > - 'name' => tra('Right'), > > - 'description' => 'y|n', > > - ), > > - 'center' => array( > > - 'required' => false, > > - 'name' => tra('Center'), > > - 'description' => 'y|n', > > - ), > > - 'above' => array( > > - 'required' => false, > > - 'name' => tra('Above'), > > - 'description' => 'y|n', > > - ), > > - 'below' => array( > > - 'required' => false, > > - 'name' => tra('Below'), > > - 'description' => 'y|n', > > - ), > > - 'offsetx' => array( > > - 'required' => false, > > - 'name' => tra('Horizontal Offset'), > > - 'description' => tra('Numeric'), > > - ), > > - 'offsety' => array( > > - 'required' => false, > > - 'name' => tra('Vertical Offset'), > > - 'description' => tra('Numeric'), > > - ), > > ), > > ); > > } > > > > -function wikiplugin_mouseover($data, $params) { > > +function wikiplugin_mouseover( $data, $params ) { > > global $smarty, $tikilib; > > - extract ($params,EXTR_SKIP); > > - $html = ''; > > - if (empty($url)) { > > + > > + if( ! isset($params['url']) ) { > > $url = 'javascript:void()'; > > - } > > - if (!$smarty->get_template_vars('overlib_loaded')) { > > - $html .= '<div id="overDiv" style="position:absolute; > > visibility:hidden; z-index:1000;"></div>'; - $html .= '<script > > type="text/javascript" src="lib/overlib.js"></script>'; > > - $smarty->assign('overlib_loaded',1); > > - } > > - $html .= "<a href='$url'"; > > - if (!empty($parse) && ($parse == 'y' || $parse == '1')) { > > - $data = $tikilib->parse_data($data); > > - $data = substr($data, 0, -1);// do not ask me why - but the parsing > > adds a CR } else { > > - // Really don't parse... > > - $data = "~np~ $data ~/np~"; > > + $url = $params['url']; > > } > > - $data = preg_replace('/\r\n/', '<br />', $data); > > - $html .= " onmouseover=\"return overlib('".str_replace("'", "\'", > > htmlspecialchars($data))."'"; - foreach ($params as $param=>$value) { > > - $p = strtoupper($param); > > - if ($p != 'URL' && $p != 'TEXT' && $p != 'PARSE') { > > - if ((!empty($value) || $value != 'n') && ($p == 'STICKY' || $p == > > 'LEFT' || $p == 'RIGHT' || $p == 'CENTER' || $p == 'ABOVE' || $p == > > 'BELOW' || $p == 'AUTOSTATUS' || $p == 'AUTOSTATUSCAP' || $p == 'HAUTO' > > || $p == 'VAUTO' || $p == 'CLOSECLICK' || $p == 'FULLHTML' || $p == > > 'CSSOFF' || $p == 'CSSSTYLE' || $p == 'CSSCLASS' || $p == 'NOCLOSE')) { > > - $html .= ','.$p; > > - } else { > > - $html .= ','.$p; > > - $html .= ','.$value; > > - } > > - } > > - } > > - $html .= ");\" onmouseout='nd();' >"; > > - $html .= "$text</a>"; > > > > - return $html; > > + $width = isset( $params['width'] ) ? (int) $params['width'] : 300; > > + $height = isset( $params['height'] ) ? (int) $params['height'] : 300; > > + > > + $text = isset( $params['text'] ) ? $params['text'] : 'No label > > specified'; + > > + static $lastval = 0; > > + $id = "mo" . ++$lastval; > > + > > + $url = htmlentities( $url, ENT_QUOTES, 'UTF-8' ); > > + > > + global $headerlib; > > + > > + $headerlib->add_js( " > > +window.addEvent('domready', function() { > > + $('$id-link').addEvent( 'mouseover', function(event) { > > + $('$id').setStyle('left', event.page.x + 'px'); > > + $('$id').setStyle('top', event.page.y + 'px'); > > + $('$id').setStyle('display','block'); > > + } ); > > + $('$id-link').addEvent( 'mouseout', function(event) { > > + $('$id').setStyle('display','none'); > > + } ); > > +} ); > > +" ); > > + > > + return "~np~<a id=\"$id-link\" href=\"$url\">$text</a><div id=\"$id\" > > style=\"width: {$width}px; height: {$height}px; display:none; position: > > absolute; z-index: 500; background: white;\">~/np~ +$data > > +~np~</div>~/np~"; > > } > > ?> > > > > > > This was sent by the SourceForge.net collaborative development platform, > > the world's largest Open Source development site. > > > > ------------------------------------------------------------------------- > >----- Check out the new SourceForge.net Marketplace. > > It is the best place to buy or sell services for > > just about anything Open Source. > > http://p.sf.net/sfu/Xq1LFB > > _______________________________________________ > > Tikiwiki-cvs mailing list > > Tik...@li... > > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs > > --------------------------------------------------------------------------- >--- Check out the new SourceForge.net Marketplace. > It is the best place to buy or sell services for > just about anything Open Source. > http://p.sf.net/sfu/Xq1LFB > _______________________________________________ > Tikiwiki-cvs mailing list > Tik...@li... > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs |
From: <lph...@us...> - 2009-01-19 16:32:03
|
Revision: 16313 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16313&view=rev Author: lphuberdeau Date: 2009-01-19 16:31:56 +0000 (Mon, 19 Jan 2009) Log Message: ----------- [FIX]?\194?\160Multiple inconsistencies in encoding (should have been commited a few days ago) Modified Paths: -------------- trunk/lib/tikilib.php trunk/lib/wiki-plugins/wikiplugin_code.php Modified: trunk/lib/tikilib.php =================================================================== --- trunk/lib/tikilib.php 2009-01-19 15:33:32 UTC (rev 16312) +++ trunk/lib/tikilib.php 2009-01-19 16:31:56 UTC (rev 16313) @@ -234,8 +234,7 @@ global $userlib; $email = $userlib->get_user_email($user); } - $query = "delete from `tiki_user_watches` where ".$this->convert_binary()." `user`=? and `event`=? and `object`=?"; - $this->query($query,array($user,$event,$object)); + $this->remove_user_watch( $user, $event, $object, $type ); $query = "insert into `tiki_user_watches`(`user`,`event`,`object`,`email`,`type`,`title`,`url`) "; $query.= "values(?,?,?,?,?,?,?)"; $this->query($query,array($user,$event,$object,$email,$type,$title,$url)); @@ -244,8 +243,7 @@ function add_group_watch($group, $event, $object, $type, $title, $url) { - $query = "delete from `tiki_group_watches` where ".$this->convert_binary()." `group`=? and `event`=? and `object`=?"; - $this->query($query,array($group,$event,$object)); + $this->remove_group_watch( $group, $event, $object, $type ); $query = "insert into `tiki_group_watches`(`group`,`event`,`object`,`type`,`title`,`url`) "; $query.= "values(?,?,?,?,?,?)"; $this->query($query,array($group,$event,$object,$type,$title,$url)); @@ -264,14 +262,14 @@ } /*shared*/ - function remove_user_watch($user, $event, $object) { - $query = "delete from `tiki_user_watches` where ".$this->convert_binary()." `user`=? and `event`=? and `object`=?"; - $this->query($query,array($user,$event,$object)); + function remove_user_watch($user, $event, $object, $type = 'wiki page') { + $query = "delete from `tiki_user_watches` where ".$this->convert_binary()." `user`=? and `event`=? and `object`=? and `type` = ?"; + $this->query($query,array($user,$event,$object,$type)); } - function remove_group_watch($group, $event, $object) { - $query = "delete from `tiki_group_watches` where ".$this->convert_binary()." `group`=? and `event`=? and `object`=?"; - $this->query($query,array($group,$event,$object)); + function remove_group_watch($group, $event, $object, $type = 'wiki page') { + $query = "delete from `tiki_group_watches` where ".$this->convert_binary()." `group`=? and `event`=? and `object`=? and `type` = ?"; + $this->query($query,array($group,$event,$object,$type)); } /*shared*/ @@ -5059,7 +5057,7 @@ if( !is_array( $pluginskiplist ) ) $pluginskiplist = array(); - $matcher_fake = array("~pp~","~np~","<pre>","CODE"); + $matcher_fake = array("~pp~","~np~","<pre>"); $matcher = "/\{([A-Z]+)\(|\{([a-z]+)(\s|\})|~pp~|~np~|<[pP][rR][eE]>/"; $plugins = array(); @@ -5192,7 +5190,7 @@ // Closing quote found if( $quote !== false ) { $value = substr( $params_string, 1, $quote - 1 ); - $arguments[$name] = $value; + $arguments[$name] = str_replace( '\"', '"', $value ); $params_string = substr( $params_string, $quote + 1 ); continue; @@ -5348,52 +5346,36 @@ $current_index = ++$plugin_indexes[$plugin_name]; - // We store CODE stuff out of the way too, but then process it as a plugin as well. - if( preg_match( '/^ *\{CODE\(/', $plugin_start ) ) { - $ret = wikiplugin_code($plugin_data, $arguments); + // Handle nested plugins. + $this->parse_first($plugin_data, $preparsed, $noparsed, $options, $real_start_diff + $pos+strlen($plugin_start)); - // Pull the np out. - preg_match( "/~np~(.*)~\/np~/s", $ret, $stuff ); + if( true === $status = $this->plugin_can_execute( $plugin_name, $plugin_data, $arguments ) ) { + $ret = $this->plugin_execute( $plugin_name, $plugin_data, $arguments, $real_start_diff + $pos+strlen($plugin_start), false, $options); + } else { + global $tiki_p_plugin_viewdetail, $tiki_p_plugin_preview, $tiki_p_plugin_approve; + $details = $tiki_p_plugin_viewdetail == 'y' && $status != 'rejected'; + $preview = $tiki_p_plugin_preview == 'y' && $details; + $approve = $tiki_p_plugin_approve == 'y' && $details; - if( count( $stuff ) > 0 ) { - $key = "§".md5($this->genPass())."§"; - $noparsed["key"][] = preg_quote($key); - $noparsed["data"][] = $stuff[1]; - - $ret = preg_replace( "/~np~.*~\/np~/s", $key, $ret ); + if( $status != 'rejected' ) { + $smarty->assign( 'plugin_fingerprint', $status ); + $status = 'pending'; } - } else { - // Handle nested plugins. - $this->parse_first($plugin_data, $preparsed, $noparsed, $options, $real_start_diff + $pos+strlen($plugin_start)); + $smarty->assign( 'plugin_name', $plugin_name ); + $smarty->assign( 'plugin_index', $current_index ); - if( true === $status = $this->plugin_can_execute( $plugin_name, $plugin_data, $arguments ) ) { - $ret = $this->plugin_execute( $plugin_name, $plugin_data, $arguments, $real_start_diff + $pos+strlen($plugin_start), false, $options); - } else { - global $tiki_p_plugin_viewdetail, $tiki_p_plugin_preview, $tiki_p_plugin_approve; - $details = $tiki_p_plugin_viewdetail == 'y' && $status != 'rejected'; - $preview = $tiki_p_plugin_preview == 'y' && $details; - $approve = $tiki_p_plugin_approve == 'y' && $details; + $smarty->assign( 'plugin_status', $status ); + $smarty->assign( 'plugin_details', $details ); + $smarty->assign( 'plugin_preview', $preview ); + $smarty->assign( 'plugin_approve', $approve ); - if( $status != 'rejected' ) { - $smarty->assign( 'plugin_fingerprint', $status ); - $status = 'pending'; - } + $smarty->assign( 'plugin_body', $plugin_data ); + $smarty->assign( 'plugin_args', $arguments ); - $smarty->assign( 'plugin_name', $plugin_name ); - $smarty->assign( 'plugin_index', $current_index ); - - $smarty->assign( 'plugin_status', $status ); - $smarty->assign( 'plugin_details', $details ); - $smarty->assign( 'plugin_preview', $preview ); - $smarty->assign( 'plugin_approve', $approve ); - - $smarty->assign( 'plugin_body', $plugin_data ); - $smarty->assign( 'plugin_args', $arguments ); - - $ret = '~np~' . $smarty->fetch('tiki-plugin_blocked.tpl') . '~/np~'; - } + $ret = '~np~' . $smarty->fetch('tiki-plugin_blocked.tpl') . '~/np~'; } + //echo '<pre>'; debug_print_backtrace(); echo '</pre>'; if( $this->plugin_is_editable( $plugin_name ) && (empty($options['print']) || !$options['print']) ) { include_once('lib/smarty_tiki/function.icon.php'); @@ -5412,7 +5394,7 @@ . ', ' . json_encode($arguments) . ', ' - . json_encode(trim($plugin_data)) + . json_encode(trim(TikiLib::htmldecode($plugin_data))) . ", event.target); } ); } ); Modified: trunk/lib/wiki-plugins/wikiplugin_code.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_code.php 2009-01-19 15:33:32 UTC (rev 16312) +++ trunk/lib/wiki-plugins/wikiplugin_code.php 2009-01-19 16:31:56 UTC (rev 16313) @@ -146,14 +146,14 @@ $pre_style = 'overflow:auto;'; } - $out = '<pre class="codelisting" dir="'.( (isset($rtl) && $rtl == 1) ? 'rtl' : 'ltr').'" style="'.$pre_style.'">' + $out = '~np~<pre class="codelisting" dir="'.( (isset($rtl) && $rtl == 1) ? 'rtl' : 'ltr').'" style="'.$pre_style.'">~/np~' .(( $parse_wiki ) ? '' : '~np~') .$out .(( $parse_wiki ) ? '' : '~/np~') - .'</pre>'; + .'~np~</pre>~/np~'; if ( isset($caption) ) { - $out = '<div class="codecaption">'.$caption.'</div>'.$out; + $out = '~np~<div class="codecaption">~/np~'.$caption.'~np~</div>~/np~'.$out; } return $out; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jon...@us...> - 2009-01-27 00:28:33
|
Revision: 16423 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16423&view=rev Author: jonnybradley Date: 2009-01-27 00:28:30 +0000 (Tue, 27 Jan 2009) Log Message: ----------- [ENH] Added pref: remembermethod as first attempt to mend the rememberme function If absent or empty behaves as before (cookie hash value dependent on IP address) If remembermethod=simple (new) uses random number as cookie hash value Modified Paths: -------------- trunk/lib/setup/prefs.php trunk/lib/userslib.php Modified: trunk/lib/setup/prefs.php =================================================================== --- trunk/lib/setup/prefs.php 2009-01-26 22:41:41 UTC (rev 16422) +++ trunk/lib/setup/prefs.php 2009-01-27 00:28:30 UTC (rev 16423) @@ -727,6 +727,7 @@ 'registerPasscode' => md5($tikilib->genPass()), 'rememberme' => 'disabled', 'remembertime' => 7200, + 'remembermethod' => '', 'feature_clear_passwords' => 'n', 'feature_crypt_passwords' => (CRYPT_MD5 == 1)? 'crypt-md5': 'tikihash', 'feature_challenge' => 'n', Modified: trunk/lib/userslib.php =================================================================== --- trunk/lib/userslib.php 2009-01-26 22:41:41 UTC (rev 16422) +++ trunk/lib/userslib.php 2009-01-27 00:28:30 UTC (rev 16423) @@ -2137,7 +2137,7 @@ function create_user_cookie($user,$hash=false) { global $prefs; if (!$hash) { - $hash = md5($this->get_ip_address().$_SERVER['HTTP_USER_AGENT']) . ".". ($this->now + $prefs['remembertime']); + $hash = $this->get_cookie_check() . ".". ($this->now + $prefs['remembertime']); } $this->delete_user_cookie($user); $this->set_user_preference($user,'cookie',$hash); @@ -2148,10 +2148,21 @@ $query = 'delete from `tiki_user_preferences` where `prefName`=? and `user`=?'; $this->query($query, array('cookie',$user)); } + + function get_cookie_check() { + global $prefs; + if ($prefs['remembermethod'] == 'simple') { + // this only makes sense in setting the cookie - it will always be different if checked + return md5(session_id() . uniqid(mt_rand(), true)); + } else { + return md5($this->get_ip_address().$_SERVER['HTTP_USER_AGENT']); + } + } function get_user_by_cookie($hash,$bypasscheck=false) { + global $prefs; list($check,$expire,$userCookie) = explode('.',$hash, 3); - if ($check == md5($this->get_ip_address().$_SERVER['HTTP_USER_AGENT']) or $bypasscheck) { + if ($check == $this->get_cookie_check() or $bypasscheck or $prefs['remembermethod'] == 'simple') { $query = 'select `user` from `tiki_user_preferences` where `prefName`=? and `value` like ? and `user`=?'; $user = $this->getOne($query, array('cookie',"$check.%",$userCookie)); // $fp=fopen('temp/interlogtest','a+');fputs($fp,"main gubc -- $check.$expire.$userCookie -- $user --\n");fclose($fp); @@ -2767,7 +2778,7 @@ function intervalidate($remote,$user,$pass,$get_info = false) { global $prefs; include_once('XML/RPC.php'); - $hashkey = md5($this->get_ip_address().$_SERVER['HTTP_USER_AGENT']) . ".". ($this->now + $prefs['remembertime']); + $hashkey = $this->get_cookie_check() . ".". ($this->now + $prefs['remembertime']); $remote['path'] = preg_replace("/^\/?/","/",$remote['path']); $client = new XML_RPC_Client($remote['path'], $remote['host'], $remote['port']); $client->setDebug(0); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |