From: Marc L. <ma...@ma...> - 2008-07-20 12:20:57
|
Hi! 1- Since this is in trunk (and will be part of 3.0), shouldn't trunk/db/tiki_2.0to3.0.sql be modified instead of trunk/db/tiki_1.9to2.0.sql? 2- Is trunk/db/profiles/default-inserts.sql still useful with the recent changes (now that we have lib/setup/prefs.php)? Thanks! -- M ;-) ////////////////////////////////////////////////////////////////////// / / / Marc Laporte <|> http://marclaporte.com / / Avantech.net <|> http://avantech.net / / TikiWiki CMS/Groupware <|> http://tikiwiki.org/UserPagemarclaporte / / / ////////////////////////////////////////////////////////////////////// -----Original Message----- From: m_...@us... [mailto:m_...@us...] Sent: July 19, 2008 7:58 PM To: tik...@li... Subject: [Tikiwiki-cvs/svn] SF.net SVN: tikiwiki:[13749] trunk Revision: 13749 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=13749&view=rev Author: m_stef Date: 2008-07-19 23:57:28 +0000 (Sat, 19 Jul 2008) Log Message: ----------- [ENH] added support for paged posts in tiki blog RSS. Modified Paths: -------------- trunk/db/profiles/default-inserts.sql trunk/db/tiki_1.9to2.0.sql trunk/templates/tiki-admin-include-rss.tpl trunk/tiki-admin_include_rss.php trunk/tiki-blogs_rss.php Modified: trunk/db/profiles/default-inserts.sql =================================================================== --- trunk/db/profiles/default-inserts.sql 2008-07-19 11:02:34 UTC (rev 13748) +++ trunk/db/profiles/default-inserts.sql 2008-07-19 23:57:28 UTC (rev 13749) @@ -229,6 +229,7 @@ INSERT INTO tiki_preferences VALUES ('max_rss_articles','10'); INSERT INTO tiki_preferences VALUES ('max_rss_blog','10'); INSERT INTO tiki_preferences VALUES ('max_rss_blogs','10'); +INSERT INTO tiki_preferences VALUES ('summary_rss_blogs','n'); INSERT INTO tiki_preferences VALUES ('max_rss_file_galleries','10'); INSERT INTO tiki_preferences VALUES ('max_rss_file_gallery','10'); INSERT INTO tiki_preferences VALUES ('max_rss_forum','10'); Modified: trunk/db/tiki_1.9to2.0.sql =================================================================== --- trunk/db/tiki_1.9to2.0.sql 2008-07-19 11:02:34 UTC (rev 13748) +++ trunk/db/tiki_1.9to2.0.sql 2008-07-19 23:57:28 UTC (rev 13749) @@ -1788,3 +1788,6 @@ #2008-07-11 nyloth UPDATE `tiki_preferences` SET `value`='n' WHERE `name`='feature_wysiwyg' AND `value`='default'; + +#2008-07-20 mstef +insert into tiki_preferences (name, value) values +('summary_rss_blogs','n'); Modified: trunk/templates/tiki-admin-include-rss.tpl =================================================================== --- trunk/templates/tiki-admin-include-rss.tpl 2008-07-19 11:02:34 UTC (rev 13748) +++ trunk/templates/tiki-admin-include-rss.tpl 2008-07-19 23:57:28 UTC (rev 13749) @@ -22,7 +22,7 @@ <td width="20"><input type="checkbox" name="rss_blogs" onclick="flip('blogsrss');"{if $prefs.rss_blogs eq 'y'} checked="checked"{/if}{if $prefs.feature_blogs ne 'y'} disabled="disabled"{/if} /></td> <td class="form" colspan="2">{if $prefs.rss_blogs eq 'y'}<a href="tiki-blogs_rss.php" title="{tr}Feed for blogs{/tr}.">{/if}{tr}Blogs{/tr}{if $prefs.rss_blogs eq 'y'}</a>{/if} {if $prefs.feature_blogs ne 'y'} ({tr}Feature is disabled.{/tr} <a href="tiki-admin.php?page=features" title="{tr}Features{/tr}">{tr}Enable now{/tr}</a>.){/if} <div id="blogsrss" style="display:{if ($prefs.rss_blogs eq 'y') and ($prefs.feature_blogs eq 'y')}block{else}none{/if};"> - <p>{tr}Title{/tr}: <input type="text" name="title_rss_blogs" size="20" maxlength="255" style="width:95%" value='{$prefs.title_rss_blogs|escape}' /><br />{tr}Description{/tr}: <textarea name="desc_rss_blogs" style="width:95%" cols="20" rows="2">{$prefs.desc_rss_blogs|escape}</textarea><br />{tr}Maximum number of items to display{/tr}:<input type="text" name="max_rss_blogs" size="5" value="{$prefs.max_rss_blogs|escape}" /></p> + <p>{tr}Title{/tr}: <input type="text" + name="title_rss_blogs" size="20" maxlength="255" style="width:95%" value='{$prefs.title_rss_blogs|escape}' /><br />{tr}Description{/tr}: <textarea name="desc_rss_blogs" style="width:95%" cols="20" rows="2">{$prefs.desc_rss_blogs|escape}</textarea><br />{tr}Maximum number of items to display{/tr}:<input type="text" name="max_rss_blogs" size="5" value="{$prefs.max_rss_blogs|escape}" /><br />{tr}Only first page{/tr}:<input type="checkbox" name="summary_rss_blogs" onclick="flip('summaryrssblogs');"{if $prefs.summary_rss_blogs eq 'y'} checked="checked"{/if} /></p> </div> </td> </tr> Modified: trunk/tiki-admin_include_rss.php =================================================================== --- trunk/tiki-admin_include_rss.php 2008-07-19 11:02:34 UTC (rev 13748) +++ trunk/tiki-admin_include_rss.php 2008-07-19 23:57:28 UTC (rev 13749) @@ -34,6 +34,7 @@ simple_set_value('rssfeed_webmaster'); simple_set_value('rss_cache_time'); simple_set_value('rssfeed_img'); + simple_set_toggle('summary_rss_blogs'); } ask_ticket('admin-inc-rss'); Modified: trunk/tiki-blogs_rss.php =================================================================== --- trunk/tiki-blogs_rss.php 2008-07-19 11:02:34 UTC (rev 13748) +++ trunk/tiki-blogs_rss.php 2008-07-19 23:57:28 UTC (rev 13749) @@ -43,7 +43,12 @@ $changes = $bloglib -> list_all_blog_posts(0, $prefs['max_rss_blogs'], $dateId.'_desc', '', $now); $tmp = array(); foreach ($changes["data"] as $data) { - $data["$descId"] = $tikilib->parse_data($data["$descId"]); + global $bloglib; + if($prefs['summary_rss_blogs'] == "y") { + $data["$descId"] = $tikilib->parse_data($bloglib->get_page($data["$descId"],1)); + } else { + $data["$descId"] = $tikilib->parse_data($data["$descId"]); + } $tmp[] = $data; } $changes["data"] = $tmp; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Tikiwiki-cvs mailing list Tik...@li... https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs |
From: Jonny B <jm...@no...> - 2008-08-22 09:50:15
|
Thanks Sylvie (replying on tiki-devel here) When i refactored that code into parse_html() i tried to leave the structure of it as close to what it was initially to minimise the mess, and this lead to the "pass-by-reference" thing (but i'm not getting an error message here - where do you see this?) I've been away from PHP for a while and mostly using Java/C# etc where this kind of thing just sorts itself out - but i thought the pass-by-reference deprecation was only on return values, which makes sense - can anyone explain why you can't pass a reference (read only, of course) into a function (like in C etc)? In the meantime i'll try and fix it so it uses nice safe copies of the string each way... ;) jonny on 21/8/08 20:32, Sylvie Greverend at sgr...@gm... wrote: > I get now > > Warning: Call-time pass-by-reference has been deprecated; If you would > like to pass it by reference, modify the declaration of parse_html(). If > you would like to enable call-time pass-by-reference, you can set > allow_call_time_pass_reference to true in your INI file > in /var/www/html/tikitrunk/tiki-editpage.php on line 604 > > thx for fixing it > > On Thu, 2008-08-21 at 17:58 +0000, jon...@us... > wrote: >> Revision: 14456 >> http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=14456&view=rev >> Author: jonnybradley >> Date: 2008-08-21 17:58:04 +0000 (Thu, 21 Aug 2008) >> >> Log Message: >> ----------- >> [MOD] Markup now parsed when switching from normal (wiki) to wysiwyg (html) >> editors (itemId=1831) >> Doesn't loose edits, copes with images and smilies - but: wikiplugins now get >> <x>'s scattered into the code they produce, so break a lot (i'll work on >> that!) >> >> Modified Paths: >> -------------- >> trunk/templates/tiki-editpage.tpl >> trunk/tiki-editpage.php >> trunk/tiki-parsemode_setup.php >> >> Modified: trunk/templates/tiki-editpage.tpl >> =================================================================== >> --- trunk/templates/tiki-editpage.tpl 2008-08-21 17:33:01 UTC (rev 14455) >> +++ trunk/templates/tiki-editpage.tpl 2008-08-21 17:58:04 UTC (rev 14456) >> @@ -162,11 +162,11 @@ >> </div> >> {/if} >> >> -{if $prefs.feature_wysiwyg eq 'y' and $prefs.wysiwyg_optional eq 'y' and >> !$preview and $staging_preview neq 'y' and !isset($hdr)} >> +{if $prefs.feature_wysiwyg eq 'y' and $prefs.wysiwyg_optional eq 'y' and >> !isset($hdr)} >> {if $wysiwyg ne 'y'} >> - <span class="button2" onclick="needToConfirm = false;">{self_link >> _class='linkbut' wysiwyg='y'}{tr}Use wysiwyg editor{/tr}{/self_link}</span> >> - {else} >> - <span class="button2" onclick="needToConfirm = false;">{self_link >> _class='linkbut' wysiwyg='n'}{tr}Use normal editor{/tr}{/self_link}</span> >> + <input type="submit" class="wikiaction" onmouseover="return >> overlib('{tr}Switch to WYSIWYG editor.{/tr}');" onmouseout="nd();" >> name="mode_wysiwyg" value="{tr}Use wysiwyg editor{/tr}" >> onclick="needToConfirm=false;" /> >> +{else} >> + <input type="submit" class="wikiaction" onmouseover="return >> overlib('{tr}Switch to normal (wiki) editor.{/tr}');" onmouseout="nd();" >> name="mode_normal" value="{tr}Use normal editor{/tr}" >> onclick="needToConfirm=false;" /> >> {/if} >> {/if} >> >> @@ -240,7 +240,7 @@ >> {/if} >> </td></tr> >> {/if} >> -{if $prefs.feature_smileys eq 'y'&&!$wysiwyg} >> +{if $prefs.feature_smileys eq 'y' && ($wysiwyg neq 'y' or >> $prefs.wysiwyg_wiki_parsed eq 'y')} >> <tr class="formcolor"><td>{tr}Smileys{/tr}:</td><td> >> {include file="tiki-smileys.tpl" area_name='editwiki'} >> </td> >> >> Modified: trunk/tiki-editpage.php >> =================================================================== >> --- trunk/tiki-editpage.php 2008-08-21 17:33:01 UTC (rev 14455) >> +++ trunk/tiki-editpage.php 2008-08-21 17:58:04 UTC (rev 14456) >> @@ -526,11 +526,57 @@ >> walk_and_parse($c[$i]["content"], $src, $p, $head_url ); >> } >> } >> -} >> +} // end walk_and_parse >> +/** >> + * wrapper around zaufi's HTML sucker code just to use the html to wiki bit >> + * >> + * \param &$c string -- HTML in >> + * \param &$src string -- output string >> + */ >> +function parse_html(&$inHtml, &$parseddata) { >> + //error_reporting(6143); >> + // Read compiled (serialized) grammar >> + $grammarfile = 'lib/htmlparser/htmlgrammar.cmp'; >> + if (!$fp = @fopen($grammarfile,'r')) >> + { >> + $smarty->assign('msg', tra("Can't parse HTML data - no grammar file")); >> + $smarty->display("error.tpl"); >> + die; >> + } >> + $grammar = unserialize(fread($fp, filesize($grammarfile))); >> + fclose($fp); >> + // create parser object, insert html code and parse it >> + $htmlparser = new HtmlParser($inHtml, $grammar, '', 0); >> + $htmlparser->Parse(); >> + // Should I try to convert HTML to wiki? >> + $parseddata = ''; >> + $p = array('stack' => array(), 'listack' => array(), 'first_td' => false); >> + walk_and_parse( $htmlparser->content, $parseddata, $p, '' ); >> + // Is some tags still opened? (It can be if HTML not valid, but this is not >> reason >> + // to produce invalid wiki :) >> + while (count($p['stack'])) >> + { >> + $e = end($p['stack']); >> + $parseddata .= $e['string']; >> + array_pop($p['stack']); >> + } >> + // Unclosed lists r ignored... wiki have no special start/end lists >> syntax.... >> + // OK. Things remains to do: >> + // 1) fix linked images >> + $parseddata = preg_replace(',\[(.*)\|\(img src=(.*)\)\],mU','{img src=$2 >> link=$1}', $parseddata); >> + // 2) fix remains images (not in links) >> + $parseddata = preg_replace(',\(img src=(.*)\),mU','{img src=$1}', >> $parseddata); >> + // 3) remove empty lines >> + $parseddata = preg_replace(",[\n]+,mU","\n", $parseddata); >> + // 4) remove nbsp's >> + $parseddata = preg_replace(", ,mU"," ", $parseddata); >> +} // end parse_html >> + >> // Suck another page and append to the end of current >> include ('lib/htmlparser/htmlparser.inc'); >> $suck_url = isset($_REQUEST["suck_url"]) ? $_REQUEST["suck_url"] : ''; >> -$parsehtml = isset ($_REQUEST["parsehtml"]) ? ($_REQUEST["parsehtml"] == >> 'on' ? 'y' : 'n') : 'n'; >> +$parsehtml = isset ($_REQUEST["parsehtml"]) ? ($_REQUEST["parsehtml"] == >> 'on' ? 'y' : 'n') : ($info['is_html'] ? 'n' : 'y'); >> +$smarty->assign('parsehtml', $parsehtml); >> if (isset($_REQUEST['do_suck']) && strlen($suck_url) > 0) >> { >> // \note by zaufi >> @@ -553,40 +599,11 @@ >> // Need to parse HTML? >> if ($parsehtml == 'y') >> { >> - // Read compiled (serialized) grammar >> - $grammarfile = 'lib/htmlparser/htmlgrammar.cmp'; >> - if (!$fp = @fopen($grammarfile,'r')) >> - { >> - $smarty->assign('msg', tra("Can't parse remote HTML page")); >> - $smarty->display("error.tpl"); >> - die; >> - } >> - $grammar = unserialize(fread($fp, filesize($grammarfile))); >> - fclose($fp); >> - // create parser object, insert html code and parse it >> - $htmlparser = new HtmlParser($sdta, $grammar, '', 0); >> - $htmlparser->Parse(); >> - // Should I try to convert HTML to wiki? >> + // note by jonnyb - replaced by >> $parseddata = ''; >> - $p = array('stack' => array(), 'listack' => array(), 'first_td' => >> false); >> - $head_url = preg_replace( ';[^/]*$;', '', $_REQUEST["suck_url"] ); >> - walk_and_parse( $htmlparser->content, $parseddata, $p, $head_url ); >> - // Is some tags still opened? (It can be if HTML not valid, but this >> is not reason >> - // to produce invalid wiki :) >> - while (count($p['stack'])) >> - { >> - $e = end($p['stack']); >> - $sdta .= $e['string']; >> - array_pop($p['stack']); >> - } >> - // Unclosed lists r ignored... wiki have no special start/end lists >> syntax.... >> - // OK. Things remains to do: >> - // 1) fix linked images >> - $parseddata = preg_replace(',\[(.*)\|\(img src=(.*)\)\],mU','{img >> src=$2 link=$1}', $parseddata); >> - // 2) fix remains images (not in links) >> - $parseddata = preg_replace(',\(img src=(.*)\),mU','{img src=$1}', >> $parseddata); >> - // 3) remove empty lines >> - $parseddata = preg_replace(",[\n]+,mU","\n", $parseddata); >> + parse_html(&$sdta, &$parseddata); >> + // following code moved to parse_html() >> + >> // Reassign previous data >> $sdta = $parseddata; >> } >> @@ -778,20 +795,55 @@ >> } else { >> $smarty->assign( 'translation_critical', 0 ); >> } >> -if ( ! isset($_REQUEST['edit']) && ! $is_html ) { >> - // When we get data from database (i.e. we are not in preview mode) and if >> we don't allow HTML, >> - // then we need to convert database's HTML entities into their "normal >> chars" equivalents >> - $smarty->assign('pagedata', TikiLib::htmldecode($edit_data)); >> -} else { >> - $smarty->assign('pagedata', $edit_data); >> + >> +// Parse (or not) $edit_data into $parsed >> +// Handles switching editor modes >> +if (isset($_REQUEST['mode_normal'])) { >> + // Parsing page data as first time seeing html page in normal editor >> + $smarty->assign('msg', "Parsing html to wiki"); >> + $parsed = ''; >> + parse_html($edit_data, &$parsed); >> + $parsed = preg_replace('/\{img src=.*?img\/smiles\/.*? >> alt=([\w\-]*?)\}/im','(:$1:)', $parsed); // "unfix" smilies >> + $parsed = preg_replace('/%%%/m',"\n", $parsed); // newlines >> + $is_html = false; >> + $info['is_html'] = false; >> + $info['wysiwyg'] = false; >> + $smarty->assign('allowhtml','n'); >> +} elseif (isset($_REQUEST['mode_wysiwyg'])) { >> + // Parsing page data as first time seeing wiki page in wysiwyg editor >> + $smarty->assign('msg', "Parsing wiki to html"); >> + $secedit = $prefs['wiki_edit_section']; >> + $prefs['wiki_edit_section'] = 'n'; // get rid of the section edit icons >> + $exticons = $prefs['feature_wiki_ext_icon']; >> + $prefs['feature_wiki_ext_icon'] = 'n'; // and the external link icons >> + $parsed = $tikilib->parse_data($edit_data,Array('absolute_links'=>true)); >> + $parsed = preg_replace('/<span class=\"img\">(.*?)<\/span>/im','$1', >> $parsed); // remove spans round img's >> + $parsed = >> preg_replace("/src=\"img\/smiles\//im","src=\"".$tikiroot."img/smiles/", >> $parsed); // fix smiley src's >> + $smarty->assign('pagedata', $parsed); >> + $prefs['wiki_edit_section'] = $secedit; >> + $prefs['feature_wiki_ext_icon'] = $exticons; >> + $is_html = true; >> + $info['is_html'] = true; >> + $info['wysiwyg'] = true; >> + $smarty->assign('allowhtml','y'); >> } >> -if ( isset($_REQUEST['edit']) && ! $is_html ) { >> - // When we are in preview mode (i.e. data doesn't come from database) and >> if we don't allow HTML, >> - // then we need to convert HTML special chars into their HTML entities >> equivalent; >> - $parsed = htmlspecialchars($edit_data); >> -} else { >> - $parsed = $edit_data; >> +if (!$parsed) { >> + if ( ! isset($_REQUEST['edit']) && ! $is_html ) { >> + // When we get data from database (i.e. we are not in preview mode) and if >> we don't allow HTML, >> + // then we need to convert database's HTML entities into their "normal >> chars" equivalents >> + $parsed = TikiLib::htmldecode($edit_data); >> + } else { >> + //if ( isset($_REQUEST['edit']) && ! $is_html ) { >> + // When we are in preview mode (i.e. data doesn't come from database) and >> if we don't allow HTML, >> + // then we need to convert HTML special chars into their HTML entities >> equivalent; >> + // $parsed = htmlspecialchars($edit_data); >> + //} else { >> + $parsed = $edit_data; >> + //} >> + } >> } >> +$smarty->assign('pagedata', $parsed); >> + >> // apply the optional post edit filters before preview >> if(isset($_REQUEST["preview"]) || ($prefs['wiki_spellcheck'] == 'y' && >> isset($_REQUEST["spellcheck"]) && $_REQUEST["spellcheck"] == 'on')) { >> $parsed = $tikilib->apply_postedit_handlers($parsed); >> >> Modified: trunk/tiki-parsemode_setup.php >> =================================================================== >> --- trunk/tiki-parsemode_setup.php 2008-08-21 17:33:01 UTC (rev 14455) >> +++ trunk/tiki-parsemode_setup.php 2008-08-21 17:58:04 UTC (rev 14456) >> @@ -7,8 +7,12 @@ >> $parsemode_setup = 'y'; >> $is_html = false; >> if ($prefs['feature_wysiwyg'] == 'y') { >> - if ((isset($_REQUEST['wysiwyg']) and $_REQUEST['wysiwyg'] == 'y' and >> $prefs['wysiwyg_optional'] == 'y') ) { >> + if (isset($_REQUEST['mode_wysiwyg']) and $prefs['wysiwyg_optional'] == 'y') >> { >> $_SESSION['wysiwyg'] = 'y'; >> + } elseif (isset($_REQUEST['mode_normal']) and $prefs['wysiwyg_optional'] == >> 'y') { >> + $_SESSION['wysiwyg'] = 'n'; >> + } elseif ((isset($_REQUEST['wysiwyg']) and $_REQUEST['wysiwyg'] == 'y' and >> $prefs['wysiwyg_optional'] == 'y') ) { >> + $_SESSION['wysiwyg'] = 'y'; >> } elseif ((isset($_REQUEST['wysiwyg']) and $_REQUEST['wysiwyg'] == 'n' and >> $prefs['wysiwyg_optional'] == 'y') ) { >> $_SESSION['wysiwyg'] = 'n'; >> } elseif ($prefs['wysiwyg_optional'] == 'n') { >> >> >> This was sent by the SourceForge.net collaborative development platform, the >> world's largest Open Source development site. >> >> ------------------------------------------------------------------------- >> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge >> Build the coolest Linux based applications with Moblin SDK & win great prizes >> Grand prize is a trip for two to an Open Source event anywhere in the world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> Tikiwiki-cvs mailing list >> Tik...@li... >> https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Tikiwiki-cvs mailing list > Tik...@li... > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs |
From: Sylvie G. <sgr...@gm...> - 2008-08-22 13:16:40
|
Thanks jonny for the quick fix (I know that it is not nice to say to somebody that the commit is not perfect - but if we want to improve tw it is a good way... so i hope nobody will feel offended with this kind of notice ) tikiwiki will be the best !!!! sylvie On Fri, 2008-08-22 at 10:48 +0100, Jonny B wrote: > Thanks Sylvie (replying on tiki-devel here) > > When i refactored that code into parse_html() i tried to leave the structure > of it as close to what it was initially to minimise the mess, and this lead > to the "pass-by-reference" thing (but i'm not getting an error message here > - where do you see this?) > > I've been away from PHP for a while and mostly using Java/C# etc where this > kind of thing just sorts itself out - but i thought the pass-by-reference > deprecation was only on return values, which makes sense - can anyone > explain why you can't pass a reference (read only, of course) into a > function (like in C etc)? > > In the meantime i'll try and fix it so it uses nice safe copies of the > string each way... ;) > > jonny > > > > on 21/8/08 20:32, Sylvie Greverend at sgr...@gm... wrote: > > > I get now > > > > Warning: Call-time pass-by-reference has been deprecated; If you would > > like to pass it by reference, modify the declaration of parse_html(). If > > you would like to enable call-time pass-by-reference, you can set > > allow_call_time_pass_reference to true in your INI file > > in /var/www/html/tikitrunk/tiki-editpage.php on line 604 > > > > thx for fixing it > > > > On Thu, 2008-08-21 at 17:58 +0000, jon...@us... > > wrote: > >> Revision: 14456 > >> http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=14456&view=rev > >> Author: jonnybradley > >> Date: 2008-08-21 17:58:04 +0000 (Thu, 21 Aug 2008) > >> > >> Log Message: > >> ----------- > >> [MOD] Markup now parsed when switching from normal (wiki) to wysiwyg (html) > >> editors (itemId=1831) > >> Doesn't loose edits, copes with images and smilies - but: wikiplugins now get > >> <x>'s scattered into the code they produce, so break a lot (i'll work on > >> that!) > >> > >> Modified Paths: > >> -------------- > >> trunk/templates/tiki-editpage.tpl > >> trunk/tiki-editpage.php > >> trunk/tiki-parsemode_setup.php > >> > >> Modified: trunk/templates/tiki-editpage.tpl > >> =================================================================== > >> --- trunk/templates/tiki-editpage.tpl 2008-08-21 17:33:01 UTC (rev 14455) > >> +++ trunk/templates/tiki-editpage.tpl 2008-08-21 17:58:04 UTC (rev 14456) > >> @@ -162,11 +162,11 @@ > >> </div> > >> {/if} > >> > >> -{if $prefs.feature_wysiwyg eq 'y' and $prefs.wysiwyg_optional eq 'y' and > >> !$preview and $staging_preview neq 'y' and !isset($hdr)} > >> +{if $prefs.feature_wysiwyg eq 'y' and $prefs.wysiwyg_optional eq 'y' and > >> !isset($hdr)} > >> {if $wysiwyg ne 'y'} > >> - <span class="button2" onclick="needToConfirm = false;">{self_link > >> _class='linkbut' wysiwyg='y'}{tr}Use wysiwyg editor{/tr}{/self_link}</span> > >> - {else} > >> - <span class="button2" onclick="needToConfirm = false;">{self_link > >> _class='linkbut' wysiwyg='n'}{tr}Use normal editor{/tr}{/self_link}</span> > >> + <input type="submit" class="wikiaction" onmouseover="return > >> overlib('{tr}Switch to WYSIWYG editor.{/tr}');" onmouseout="nd();" > >> name="mode_wysiwyg" value="{tr}Use wysiwyg editor{/tr}" > >> onclick="needToConfirm=false;" /> > >> +{else} > >> + <input type="submit" class="wikiaction" onmouseover="return > >> overlib('{tr}Switch to normal (wiki) editor.{/tr}');" onmouseout="nd();" > >> name="mode_normal" value="{tr}Use normal editor{/tr}" > >> onclick="needToConfirm=false;" /> > >> {/if} > >> {/if} > >> > >> @@ -240,7 +240,7 @@ > >> {/if} > >> </td></tr> > >> {/if} > >> -{if $prefs.feature_smileys eq 'y'&&!$wysiwyg} > >> +{if $prefs.feature_smileys eq 'y' && ($wysiwyg neq 'y' or > >> $prefs.wysiwyg_wiki_parsed eq 'y')} > >> <tr class="formcolor"><td>{tr}Smileys{/tr}:</td><td> > >> {include file="tiki-smileys.tpl" area_name='editwiki'} > >> </td> > >> > >> Modified: trunk/tiki-editpage.php > >> =================================================================== > >> --- trunk/tiki-editpage.php 2008-08-21 17:33:01 UTC (rev 14455) > >> +++ trunk/tiki-editpage.php 2008-08-21 17:58:04 UTC (rev 14456) > >> @@ -526,11 +526,57 @@ > >> walk_and_parse($c[$i]["content"], $src, $p, $head_url ); > >> } > >> } > >> -} > >> +} // end walk_and_parse > >> +/** > >> + * wrapper around zaufi's HTML sucker code just to use the html to wiki bit > >> + * > >> + * \param &$c string -- HTML in > >> + * \param &$src string -- output string > >> + */ > >> +function parse_html(&$inHtml, &$parseddata) { > >> + //error_reporting(6143); > >> + // Read compiled (serialized) grammar > >> + $grammarfile = 'lib/htmlparser/htmlgrammar.cmp'; > >> + if (!$fp = @fopen($grammarfile,'r')) > >> + { > >> + $smarty->assign('msg', tra("Can't parse HTML data - no grammar file")); > >> + $smarty->display("error.tpl"); > >> + die; > >> + } > >> + $grammar = unserialize(fread($fp, filesize($grammarfile))); > >> + fclose($fp); > >> + // create parser object, insert html code and parse it > >> + $htmlparser = new HtmlParser($inHtml, $grammar, '', 0); > >> + $htmlparser->Parse(); > >> + // Should I try to convert HTML to wiki? > >> + $parseddata = ''; > >> + $p = array('stack' => array(), 'listack' => array(), 'first_td' => false); > >> + walk_and_parse( $htmlparser->content, $parseddata, $p, '' ); > >> + // Is some tags still opened? (It can be if HTML not valid, but this is not > >> reason > >> + // to produce invalid wiki :) > >> + while (count($p['stack'])) > >> + { > >> + $e = end($p['stack']); > >> + $parseddata .= $e['string']; > >> + array_pop($p['stack']); > >> + } > >> + // Unclosed lists r ignored... wiki have no special start/end lists > >> syntax.... > >> + // OK. Things remains to do: > >> + // 1) fix linked images > >> + $parseddata = preg_replace(',\[(.*)\|\(img src=(.*)\)\],mU','{img src=$2 > >> link=$1}', $parseddata); > >> + // 2) fix remains images (not in links) > >> + $parseddata = preg_replace(',\(img src=(.*)\),mU','{img src=$1}', > >> $parseddata); > >> + // 3) remove empty lines > >> + $parseddata = preg_replace(",[\n]+,mU","\n", $parseddata); > >> + // 4) remove nbsp's > >> + $parseddata = preg_replace(", ,mU"," ", $parseddata); > >> +} // end parse_html > >> + > >> // Suck another page and append to the end of current > >> include ('lib/htmlparser/htmlparser.inc'); > >> $suck_url = isset($_REQUEST["suck_url"]) ? $_REQUEST["suck_url"] : ''; > >> -$parsehtml = isset ($_REQUEST["parsehtml"]) ? ($_REQUEST["parsehtml"] == > >> 'on' ? 'y' : 'n') : 'n'; > >> +$parsehtml = isset ($_REQUEST["parsehtml"]) ? ($_REQUEST["parsehtml"] == > >> 'on' ? 'y' : 'n') : ($info['is_html'] ? 'n' : 'y'); > >> +$smarty->assign('parsehtml', $parsehtml); > >> if (isset($_REQUEST['do_suck']) && strlen($suck_url) > 0) > >> { > >> // \note by zaufi > >> @@ -553,40 +599,11 @@ > >> // Need to parse HTML? > >> if ($parsehtml == 'y') > >> { > >> - // Read compiled (serialized) grammar > >> - $grammarfile = 'lib/htmlparser/htmlgrammar.cmp'; > >> - if (!$fp = @fopen($grammarfile,'r')) > >> - { > >> - $smarty->assign('msg', tra("Can't parse remote HTML page")); > >> - $smarty->display("error.tpl"); > >> - die; > >> - } > >> - $grammar = unserialize(fread($fp, filesize($grammarfile))); > >> - fclose($fp); > >> - // create parser object, insert html code and parse it > >> - $htmlparser = new HtmlParser($sdta, $grammar, '', 0); > >> - $htmlparser->Parse(); > >> - // Should I try to convert HTML to wiki? > >> + // note by jonnyb - replaced by > >> $parseddata = ''; > >> - $p = array('stack' => array(), 'listack' => array(), 'first_td' => > >> false); > >> - $head_url = preg_replace( ';[^/]*$;', '', $_REQUEST["suck_url"] ); > >> - walk_and_parse( $htmlparser->content, $parseddata, $p, $head_url ); > >> - // Is some tags still opened? (It can be if HTML not valid, but this > >> is not reason > >> - // to produce invalid wiki :) > >> - while (count($p['stack'])) > >> - { > >> - $e = end($p['stack']); > >> - $sdta .= $e['string']; > >> - array_pop($p['stack']); > >> - } > >> - // Unclosed lists r ignored... wiki have no special start/end lists > >> syntax.... > >> - // OK. Things remains to do: > >> - // 1) fix linked images > >> - $parseddata = preg_replace(',\[(.*)\|\(img src=(.*)\)\],mU','{img > >> src=$2 link=$1}', $parseddata); > >> - // 2) fix remains images (not in links) > >> - $parseddata = preg_replace(',\(img src=(.*)\),mU','{img src=$1}', > >> $parseddata); > >> - // 3) remove empty lines > >> - $parseddata = preg_replace(",[\n]+,mU","\n", $parseddata); > >> + parse_html(&$sdta, &$parseddata); > >> + // following code moved to parse_html() > >> + > >> // Reassign previous data > >> $sdta = $parseddata; > >> } > >> @@ -778,20 +795,55 @@ > >> } else { > >> $smarty->assign( 'translation_critical', 0 ); > >> } > >> -if ( ! isset($_REQUEST['edit']) && ! $is_html ) { > >> - // When we get data from database (i.e. we are not in preview mode) and if > >> we don't allow HTML, > >> - // then we need to convert database's HTML entities into their "normal > >> chars" equivalents > >> - $smarty->assign('pagedata', TikiLib::htmldecode($edit_data)); > >> -} else { > >> - $smarty->assign('pagedata', $edit_data); > >> + > >> +// Parse (or not) $edit_data into $parsed > >> +// Handles switching editor modes > >> +if (isset($_REQUEST['mode_normal'])) { > >> + // Parsing page data as first time seeing html page in normal editor > >> + $smarty->assign('msg', "Parsing html to wiki"); > >> + $parsed = ''; > >> + parse_html($edit_data, &$parsed); > >> + $parsed = preg_replace('/\{img src=.*?img\/smiles\/.*? > >> alt=([\w\-]*?)\}/im','(:$1:)', $parsed); // "unfix" smilies > >> + $parsed = preg_replace('/%%%/m',"\n", $parsed); // newlines > >> + $is_html = false; > >> + $info['is_html'] = false; > >> + $info['wysiwyg'] = false; > >> + $smarty->assign('allowhtml','n'); > >> +} elseif (isset($_REQUEST['mode_wysiwyg'])) { > >> + // Parsing page data as first time seeing wiki page in wysiwyg editor > >> + $smarty->assign('msg', "Parsing wiki to html"); > >> + $secedit = $prefs['wiki_edit_section']; > >> + $prefs['wiki_edit_section'] = 'n'; // get rid of the section edit icons > >> + $exticons = $prefs['feature_wiki_ext_icon']; > >> + $prefs['feature_wiki_ext_icon'] = 'n'; // and the external link icons > >> + $parsed = $tikilib->parse_data($edit_data,Array('absolute_links'=>true)); > >> + $parsed = preg_replace('/<span class=\"img\">(.*?)<\/span>/im','$1', > >> $parsed); // remove spans round img's > >> + $parsed = > >> preg_replace("/src=\"img\/smiles\//im","src=\"".$tikiroot."img/smiles/", > >> $parsed); // fix smiley src's > >> + $smarty->assign('pagedata', $parsed); > >> + $prefs['wiki_edit_section'] = $secedit; > >> + $prefs['feature_wiki_ext_icon'] = $exticons; > >> + $is_html = true; > >> + $info['is_html'] = true; > >> + $info['wysiwyg'] = true; > >> + $smarty->assign('allowhtml','y'); > >> } > >> -if ( isset($_REQUEST['edit']) && ! $is_html ) { > >> - // When we are in preview mode (i.e. data doesn't come from database) and > >> if we don't allow HTML, > >> - // then we need to convert HTML special chars into their HTML entities > >> equivalent; > >> - $parsed = htmlspecialchars($edit_data); > >> -} else { > >> - $parsed = $edit_data; > >> +if (!$parsed) { > >> + if ( ! isset($_REQUEST['edit']) && ! $is_html ) { > >> + // When we get data from database (i.e. we are not in preview mode) and if > >> we don't allow HTML, > >> + // then we need to convert database's HTML entities into their "normal > >> chars" equivalents > >> + $parsed = TikiLib::htmldecode($edit_data); > >> + } else { > >> + //if ( isset($_REQUEST['edit']) && ! $is_html ) { > >> + // When we are in preview mode (i.e. data doesn't come from database) and > >> if we don't allow HTML, > >> + // then we need to convert HTML special chars into their HTML entities > >> equivalent; > >> + // $parsed = htmlspecialchars($edit_data); > >> + //} else { > >> + $parsed = $edit_data; > >> + //} > >> + } > >> } > >> +$smarty->assign('pagedata', $parsed); > >> + > >> // apply the optional post edit filters before preview > >> if(isset($_REQUEST["preview"]) || ($prefs['wiki_spellcheck'] == 'y' && > >> isset($_REQUEST["spellcheck"]) && $_REQUEST["spellcheck"] == 'on')) { > >> $parsed = $tikilib->apply_postedit_handlers($parsed); > >> > >> Modified: trunk/tiki-parsemode_setup.php > >> =================================================================== > >> --- trunk/tiki-parsemode_setup.php 2008-08-21 17:33:01 UTC (rev 14455) > >> +++ trunk/tiki-parsemode_setup.php 2008-08-21 17:58:04 UTC (rev 14456) > >> @@ -7,8 +7,12 @@ > >> $parsemode_setup = 'y'; > >> $is_html = false; > >> if ($prefs['feature_wysiwyg'] == 'y') { > >> - if ((isset($_REQUEST['wysiwyg']) and $_REQUEST['wysiwyg'] == 'y' and > >> $prefs['wysiwyg_optional'] == 'y') ) { > >> + if (isset($_REQUEST['mode_wysiwyg']) and $prefs['wysiwyg_optional'] == 'y') > >> { > >> $_SESSION['wysiwyg'] = 'y'; > >> + } elseif (isset($_REQUEST['mode_normal']) and $prefs['wysiwyg_optional'] == > >> 'y') { > >> + $_SESSION['wysiwyg'] = 'n'; > >> + } elseif ((isset($_REQUEST['wysiwyg']) and $_REQUEST['wysiwyg'] == 'y' and > >> $prefs['wysiwyg_optional'] == 'y') ) { > >> + $_SESSION['wysiwyg'] = 'y'; > >> } elseif ((isset($_REQUEST['wysiwyg']) and $_REQUEST['wysiwyg'] == 'n' and > >> $prefs['wysiwyg_optional'] == 'y') ) { > >> $_SESSION['wysiwyg'] = 'n'; > >> } elseif ($prefs['wysiwyg_optional'] == 'n') { > >> > >> > >> This was sent by the SourceForge.net collaborative development platform, the > >> world's largest Open Source development site. > >> > >> ------------------------------------------------------------------------- > >> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > >> Build the coolest Linux based applications with Moblin SDK & win great prizes > >> Grand prize is a trip for two to an Open Source event anywhere in the world > >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ > >> _______________________________________________ > >> Tikiwiki-cvs mailing list > >> Tik...@li... > >> https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs > > > > > > ------------------------------------------------------------------------- > > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > > Build the coolest Linux based applications with Moblin SDK & win great prizes > > Grand prize is a trip for two to an Open Source event anywhere in the world > > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > > _______________________________________________ > > Tikiwiki-cvs mailing list > > Tik...@li... > > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs > > > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Tikiwiki-devel mailing list > Tik...@li... > https://lists.sourceforge.net/lists/listinfo/tikiwiki-devel |
From: Jonny B <jm...@no...> - 2008-08-22 15:34:52
|
Hey, no problem, feedback is good! But i'm still a bit lost on this pass-by-reference thing... so i thought i better read up on it... http://php.net/manual/en/language.references.pass.php says that the "referencing" should be done on the function declaration, not the call - so i'll tweak my fix slightly - done. Just sharing this here in case anyone else here is as rubbish at PHP as me ;) jb on 22/8/08 14:16, Sylvie Greverend at sgr...@gm... wrote: > Thanks jonny for the quick fix > (I know that it is not nice to say to somebody that the commit is not > perfect - but if we want to improve tw it is a good way... so i hope > nobody will feel offended with this kind of notice ) > tikiwiki will be the best !!!! > sylvie > > > On Fri, 2008-08-22 at 10:48 +0100, Jonny B wrote: >> Thanks Sylvie (replying on tiki-devel here) >> >> When i refactored that code into parse_html() i tried to leave the structure >> of it as close to what it was initially to minimise the mess, and this lead >> to the "pass-by-reference" thing (but i'm not getting an error message here >> - where do you see this?) >> >> I've been away from PHP for a while and mostly using Java/C# etc where this >> kind of thing just sorts itself out - but i thought the pass-by-reference >> deprecation was only on return values, which makes sense - can anyone >> explain why you can't pass a reference (read only, of course) into a >> function (like in C etc)? >> >> In the meantime i'll try and fix it so it uses nice safe copies of the >> string each way... ;) >> >> jonny >> >> >> >> on 21/8/08 20:32, Sylvie Greverend at sgr...@gm... wrote: >> >>> I get now >>> >>> Warning: Call-time pass-by-reference has been deprecated; If you would >>> like to pass it by reference, modify the declaration of parse_html(). If >>> you would like to enable call-time pass-by-reference, you can set >>> allow_call_time_pass_reference to true in your INI file >>> in /var/www/html/tikitrunk/tiki-editpage.php on line 604 >>> >>> thx for fixing it >>> >>> On Thu, 2008-08-21 at 17:58 +0000, jon...@us... >>> wrote: >>>> Revision: 14456 >>>> http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=14456&view=rev >>>> Author: jonnybradley >>>> Date: 2008-08-21 17:58:04 +0000 (Thu, 21 Aug 2008) >>>> >>>> Log Message: >>>> ----------- >>>> [MOD] Markup now parsed when switching from normal (wiki) to wysiwyg (html) >>>> editors (itemId=1831) >>>> Doesn't loose edits, copes with images and smilies - but: wikiplugins now >>>> get >>>> <x>'s scattered into the code they produce, so break a lot (i'll work on >>>> that!) >>>> >>>> Modified Paths: >>>> -------------- >>>> trunk/templates/tiki-editpage.tpl >>>> trunk/tiki-editpage.php >>>> trunk/tiki-parsemode_setup.php >>>> >>>> Modified: trunk/templates/tiki-editpage.tpl >>>> =================================================================== >>>> --- trunk/templates/tiki-editpage.tpl 2008-08-21 17:33:01 UTC (rev 14455) >>>> +++ trunk/templates/tiki-editpage.tpl 2008-08-21 17:58:04 UTC (rev 14456) >>>> @@ -162,11 +162,11 @@ >>>> </div> >>>> {/if} >>>> >>>> -{if $prefs.feature_wysiwyg eq 'y' and $prefs.wysiwyg_optional eq 'y' and >>>> !$preview and $staging_preview neq 'y' and !isset($hdr)} >>>> +{if $prefs.feature_wysiwyg eq 'y' and $prefs.wysiwyg_optional eq 'y' and >>>> !isset($hdr)} >>>> {if $wysiwyg ne 'y'} >>>> - <span class="button2" onclick="needToConfirm = false;">{self_link >>>> _class='linkbut' wysiwyg='y'}{tr}Use wysiwyg editor{/tr}{/self_link}</span> >>>> - {else} >>>> - <span class="button2" onclick="needToConfirm = false;">{self_link >>>> _class='linkbut' wysiwyg='n'}{tr}Use normal editor{/tr}{/self_link}</span> >>>> + <input type="submit" class="wikiaction" onmouseover="return >>>> overlib('{tr}Switch to WYSIWYG editor.{/tr}');" onmouseout="nd();" >>>> name="mode_wysiwyg" value="{tr}Use wysiwyg editor{/tr}" >>>> onclick="needToConfirm=false;" /> >>>> +{else} >>>> + <input type="submit" class="wikiaction" onmouseover="return >>>> overlib('{tr}Switch to normal (wiki) editor.{/tr}');" onmouseout="nd();" >>>> name="mode_normal" value="{tr}Use normal editor{/tr}" >>>> onclick="needToConfirm=false;" /> >>>> {/if} >>>> {/if} >>>> >>>> @@ -240,7 +240,7 @@ >>>> {/if} >>>> </td></tr> >>>> {/if} >>>> -{if $prefs.feature_smileys eq 'y'&&!$wysiwyg} >>>> +{if $prefs.feature_smileys eq 'y' && ($wysiwyg neq 'y' or >>>> $prefs.wysiwyg_wiki_parsed eq 'y')} >>>> <tr class="formcolor"><td>{tr}Smileys{/tr}:</td><td> >>>> {include file="tiki-smileys.tpl" area_name='editwiki'} >>>> </td> >>>> >>>> Modified: trunk/tiki-editpage.php >>>> =================================================================== >>>> --- trunk/tiki-editpage.php 2008-08-21 17:33:01 UTC (rev 14455) >>>> +++ trunk/tiki-editpage.php 2008-08-21 17:58:04 UTC (rev 14456) >>>> @@ -526,11 +526,57 @@ >>>> walk_and_parse($c[$i]["content"], $src, $p, $head_url ); >>>> } >>>> } >>>> -} >>>> +} // end walk_and_parse >>>> +/** >>>> + * wrapper around zaufi's HTML sucker code just to use the html to wiki >>>> bit >>>> + * >>>> + * \param &$c string -- HTML in >>>> + * \param &$src string -- output string >>>> + */ >>>> +function parse_html(&$inHtml, &$parseddata) { >>>> + //error_reporting(6143); >>>> + // Read compiled (serialized) grammar >>>> + $grammarfile = 'lib/htmlparser/htmlgrammar.cmp'; >>>> + if (!$fp = @fopen($grammarfile,'r')) >>>> + { >>>> + $smarty->assign('msg', tra("Can't parse HTML data - no grammar file")); >>>> + $smarty->display("error.tpl"); >>>> + die; >>>> + } >>>> + $grammar = unserialize(fread($fp, filesize($grammarfile))); >>>> + fclose($fp); >>>> + // create parser object, insert html code and parse it >>>> + $htmlparser = new HtmlParser($inHtml, $grammar, '', 0); >>>> + $htmlparser->Parse(); >>>> + // Should I try to convert HTML to wiki? >>>> + $parseddata = ''; >>>> + $p = array('stack' => array(), 'listack' => array(), 'first_td' => >>>> false); >>>> + walk_and_parse( $htmlparser->content, $parseddata, $p, '' ); >>>> + // Is some tags still opened? (It can be if HTML not valid, but this is >>>> not >>>> reason >>>> + // to produce invalid wiki :) >>>> + while (count($p['stack'])) >>>> + { >>>> + $e = end($p['stack']); >>>> + $parseddata .= $e['string']; >>>> + array_pop($p['stack']); >>>> + } >>>> + // Unclosed lists r ignored... wiki have no special start/end lists >>>> syntax.... >>>> + // OK. Things remains to do: >>>> + // 1) fix linked images >>>> + $parseddata = preg_replace(',\[(.*)\|\(img src=(.*)\)\],mU','{img src=$2 >>>> link=$1}', $parseddata); >>>> + // 2) fix remains images (not in links) >>>> + $parseddata = preg_replace(',\(img src=(.*)\),mU','{img src=$1}', >>>> $parseddata); >>>> + // 3) remove empty lines >>>> + $parseddata = preg_replace(",[\n]+,mU","\n", $parseddata); >>>> + // 4) remove nbsp's >>>> + $parseddata = preg_replace(", ,mU"," ", $parseddata); >>>> +} // end parse_html >>>> + >>>> // Suck another page and append to the end of current >>>> include ('lib/htmlparser/htmlparser.inc'); >>>> $suck_url = isset($_REQUEST["suck_url"]) ? $_REQUEST["suck_url"] : ''; >>>> -$parsehtml = isset ($_REQUEST["parsehtml"]) ? ($_REQUEST["parsehtml"] == >>>> 'on' ? 'y' : 'n') : 'n'; >>>> +$parsehtml = isset ($_REQUEST["parsehtml"]) ? ($_REQUEST["parsehtml"] == >>>> 'on' ? 'y' : 'n') : ($info['is_html'] ? 'n' : 'y'); >>>> +$smarty->assign('parsehtml', $parsehtml); >>>> if (isset($_REQUEST['do_suck']) && strlen($suck_url) > 0) >>>> { >>>> // \note by zaufi >>>> @@ -553,40 +599,11 @@ >>>> // Need to parse HTML? >>>> if ($parsehtml == 'y') >>>> { >>>> - // Read compiled (serialized) grammar >>>> - $grammarfile = 'lib/htmlparser/htmlgrammar.cmp'; >>>> - if (!$fp = @fopen($grammarfile,'r')) >>>> - { >>>> - $smarty->assign('msg', tra("Can't parse remote HTML page")); >>>> - $smarty->display("error.tpl"); >>>> - die; >>>> - } >>>> - $grammar = unserialize(fread($fp, filesize($grammarfile))); >>>> - fclose($fp); >>>> - // create parser object, insert html code and parse it >>>> - $htmlparser = new HtmlParser($sdta, $grammar, '', 0); >>>> - $htmlparser->Parse(); >>>> - // Should I try to convert HTML to wiki? >>>> + // note by jonnyb - replaced by >>>> $parseddata = ''; >>>> - $p = array('stack' => array(), 'listack' => array(), 'first_td' >>>> => >>>> false); >>>> - $head_url = preg_replace( ';[^/]*$;', '', $_REQUEST["suck_url"] ); >>>> - walk_and_parse( $htmlparser->content, $parseddata, $p, $head_url >>>> ); >>>> - // Is some tags still opened? (It can be if HTML not valid, but >>>> this >>>> is not reason >>>> - // to produce invalid wiki :) >>>> - while (count($p['stack'])) >>>> - { >>>> - $e = end($p['stack']); >>>> - $sdta .= $e['string']; >>>> - array_pop($p['stack']); >>>> - } >>>> - // Unclosed lists r ignored... wiki have no special start/end >>>> lists >>>> syntax.... >>>> - // OK. Things remains to do: >>>> - // 1) fix linked images >>>> - $parseddata = preg_replace(',\[(.*)\|\(img src=(.*)\)\],mU','{img >>>> src=$2 link=$1}', $parseddata); >>>> - // 2) fix remains images (not in links) >>>> - $parseddata = preg_replace(',\(img src=(.*)\),mU','{img src=$1}', >>>> $parseddata); >>>> - // 3) remove empty lines >>>> - $parseddata = preg_replace(",[\n]+,mU","\n", $parseddata); >>>> + parse_html(&$sdta, &$parseddata); >>>> + // following code moved to parse_html() >>>> + >>>> // Reassign previous data >>>> $sdta = $parseddata; >>>> } >>>> @@ -778,20 +795,55 @@ >>>> } else { >>>> $smarty->assign( 'translation_critical', 0 ); >>>> } >>>> -if ( ! isset($_REQUEST['edit']) && ! $is_html ) { >>>> - // When we get data from database (i.e. we are not in preview mode) and >>>> if >>>> we don't allow HTML, >>>> - // then we need to convert database's HTML entities into their "normal >>>> chars" equivalents >>>> - $smarty->assign('pagedata', TikiLib::htmldecode($edit_data)); >>>> -} else { >>>> - $smarty->assign('pagedata', $edit_data); >>>> + >>>> +// Parse (or not) $edit_data into $parsed >>>> +// Handles switching editor modes >>>> +if (isset($_REQUEST['mode_normal'])) { >>>> + // Parsing page data as first time seeing html page in normal editor >>>> + $smarty->assign('msg', "Parsing html to wiki"); >>>> + $parsed = ''; >>>> + parse_html($edit_data, &$parsed); >>>> + $parsed = preg_replace('/\{img src=.*?img\/smiles\/.*? >>>> alt=([\w\-]*?)\}/im','(:$1:)', $parsed); // "unfix" smilies >>>> + $parsed = preg_replace('/%%%/m',"\n", $parsed); // newlines >>>> + $is_html = false; >>>> + $info['is_html'] = false; >>>> + $info['wysiwyg'] = false; >>>> + $smarty->assign('allowhtml','n'); >>>> +} elseif (isset($_REQUEST['mode_wysiwyg'])) { >>>> + // Parsing page data as first time seeing wiki page in wysiwyg editor >>>> + $smarty->assign('msg', "Parsing wiki to html"); >>>> + $secedit = $prefs['wiki_edit_section']; >>>> + $prefs['wiki_edit_section'] = 'n'; // get rid of the section edit icons >>>> + $exticons = $prefs['feature_wiki_ext_icon']; >>>> + $prefs['feature_wiki_ext_icon'] = 'n'; // and the external link icons >>>> + $parsed = $tikilib->parse_data($edit_data,Array('absolute_links'=>true)); >>>> + $parsed = preg_replace('/<span class=\"img\">(.*?)<\/span>/im','$1', >>>> $parsed); // remove spans round img's >>>> + $parsed = >>>> preg_replace("/src=\"img\/smiles\//im","src=\"".$tikiroot."img/smiles/", >>>> $parsed); // fix smiley src's >>>> + $smarty->assign('pagedata', $parsed); >>>> + $prefs['wiki_edit_section'] = $secedit; >>>> + $prefs['feature_wiki_ext_icon'] = $exticons; >>>> + $is_html = true; >>>> + $info['is_html'] = true; >>>> + $info['wysiwyg'] = true; >>>> + $smarty->assign('allowhtml','y'); >>>> } >>>> -if ( isset($_REQUEST['edit']) && ! $is_html ) { >>>> - // When we are in preview mode (i.e. data doesn't come from database) and >>>> if we don't allow HTML, >>>> - // then we need to convert HTML special chars into their HTML entities >>>> equivalent; >>>> - $parsed = htmlspecialchars($edit_data); >>>> -} else { >>>> - $parsed = $edit_data; >>>> +if (!$parsed) { >>>> + if ( ! isset($_REQUEST['edit']) && ! $is_html ) { >>>> + // When we get data from database (i.e. we are not in preview mode) and >>>> if >>>> we don't allow HTML, >>>> + // then we need to convert database's HTML entities into their "normal >>>> chars" equivalents >>>> + $parsed = TikiLib::htmldecode($edit_data); >>>> + } else { >>>> + //if ( isset($_REQUEST['edit']) && ! $is_html ) { >>>> + // When we are in preview mode (i.e. data doesn't come from database) >>>> and >>>> if we don't allow HTML, >>>> + // then we need to convert HTML special chars into their HTML >>>> entities >>>> equivalent; >>>> + // $parsed = htmlspecialchars($edit_data); >>>> + //} else { >>>> + $parsed = $edit_data; >>>> + //} >>>> + } >>>> } >>>> +$smarty->assign('pagedata', $parsed); >>>> + >>>> // apply the optional post edit filters before preview >>>> if(isset($_REQUEST["preview"]) || ($prefs['wiki_spellcheck'] == 'y' && >>>> isset($_REQUEST["spellcheck"]) && $_REQUEST["spellcheck"] == 'on')) { >>>> $parsed = $tikilib->apply_postedit_handlers($parsed); >>>> >>>> Modified: trunk/tiki-parsemode_setup.php >>>> =================================================================== >>>> --- trunk/tiki-parsemode_setup.php 2008-08-21 17:33:01 UTC (rev 14455) >>>> +++ trunk/tiki-parsemode_setup.php 2008-08-21 17:58:04 UTC (rev 14456) >>>> @@ -7,8 +7,12 @@ >>>> $parsemode_setup = 'y'; >>>> $is_html = false; >>>> if ($prefs['feature_wysiwyg'] == 'y') { >>>> - if ((isset($_REQUEST['wysiwyg']) and $_REQUEST['wysiwyg'] == 'y' and >>>> $prefs['wysiwyg_optional'] == 'y') ) { >>>> + if (isset($_REQUEST['mode_wysiwyg']) and $prefs['wysiwyg_optional'] == >>>> 'y') >>>> { >>>> $_SESSION['wysiwyg'] = 'y'; >>>> + } elseif (isset($_REQUEST['mode_normal']) and $prefs['wysiwyg_optional'] >>>> == >>>> 'y') { >>>> + $_SESSION['wysiwyg'] = 'n'; >>>> + } elseif ((isset($_REQUEST['wysiwyg']) and $_REQUEST['wysiwyg'] == 'y' >>>> and >>>> $prefs['wysiwyg_optional'] == 'y') ) { >>>> + $_SESSION['wysiwyg'] = 'y'; >>>> } elseif ((isset($_REQUEST['wysiwyg']) and $_REQUEST['wysiwyg'] == 'n' and >>>> $prefs['wysiwyg_optional'] == 'y') ) { >>>> $_SESSION['wysiwyg'] = 'n'; >>>> } elseif ($prefs['wysiwyg_optional'] == 'n') { >>>> >>>> >>>> This was sent by the SourceForge.net collaborative development platform, >>>> the >>>> world's largest Open Source development site. >>>> >>>> ------------------------------------------------------------------------- >>>> This SF.Net email is sponsored by the Moblin Your Move Developer's >>>> challenge >>>> Build the coolest Linux based applications with Moblin SDK & win great >>>> prizes >>>> Grand prize is a trip for two to an Open Source event anywhere in the world >>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>> _______________________________________________ >>>> Tikiwiki-cvs mailing list >>>> Tik...@li... >>>> https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs >>> >>> >>> ------------------------------------------------------------------------- >>> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge >>> Build the coolest Linux based applications with Moblin SDK & win great >>> prizes >>> Grand prize is a trip for two to an Open Source event anywhere in the world >>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>> _______________________________________________ >>> Tikiwiki-cvs mailing list >>> Tik...@li... >>> https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs >> >> >> >> >> ------------------------------------------------------------------------- >> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge >> Build the coolest Linux based applications with Moblin SDK & win great prizes >> Grand prize is a trip for two to an Open Source event anywhere in the world >> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >> _______________________________________________ >> Tikiwiki-devel mailing list >> Tik...@li... >> https://lists.sourceforge.net/lists/listinfo/tikiwiki-devel > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Tikiwiki-devel mailing list > Tik...@li... > https://lists.sourceforge.net/lists/listinfo/tikiwiki-devel |
From: Louis-Philippe H. <lph...@dr...> - 2008-09-01 14:59:29
|
Hello Everyone, This commit completes the new plugin validation/security feature. The plugin validation is enabled by default, but it only affects potentially dangerous plugins. Currently, it's activated on the redirect plugin, which I imported from mods. To activate it on a function, you need to add the 'validate' attribute in the info section. For example, 'validate' => 'all'. Other possible values are 'body' and 'arguments'. Specific parameters can be removed from the validation by adding the flag 'safe' => true. When activated, a fingerprint of the plugin arguments and body is generated (basically, a hash of the body and arguments, plus size information to avoid collisions). If the fingerprint is known, execution is resumed. Otherwise, it generates an error message with controls for those allowed to perform validation operations. This feature is a stepping stone for the webservice-based plugins I will be working on soon. Initially, it was meant to be part of the webservice plugin validation, but after a discussion with sylvie and ricks, I realized it could serve a more general purpose. There are still issues to solve related to the edit preview, but it should be usable already. -- LP On September 1, 2008 10:19:38 lph...@us... wrote: > Revision: 14566 > http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=14566&view=rev > Author: lphuberdeau > Date: 2008-09-01 14:19:37 +0000 (Mon, 01 Sep 2008) > > Log Message: > ----------- > [NEW] Plugin validation > > Modified Paths: > -------------- > trunk/db/features.csv > trunk/lib/setup/prefs.php > trunk/lib/tikilib.php > trunk/lib/wiki-plugins/wikiplugin_redirect.php > trunk/templates/tiki-plugin_blocked.tpl > > Modified: trunk/db/features.csv > =================================================================== > --- trunk/db/features.csv 2008-09-01 13:53:28 UTC (rev 14565) > +++ trunk/db/features.csv 2008-09-01 14:19:37 UTC (rev 14566) > @@ -922,3 +922,4 @@ > 1028,"Wiki layout",7,,,"configurationgroup",,"tiki_p_admin",,,, > 1029,"Wiki comments",7,,,"configurationgroup",,"tiki_p_admin",,,, > 1030,"Wiki page name",7,,,"configurationgroup",,"tiki_p_admin",,,, > +1031,"Redirect",913,,"wikiplugin_redirect","flag",,"tiki_p_admin",,,, > > Modified: trunk/lib/setup/prefs.php > =================================================================== > --- trunk/lib/setup/prefs.php 2008-09-01 13:53:28 UTC (rev 14565) > +++ trunk/lib/setup/prefs.php 2008-09-01 14:19:37 UTC (rev 14566) > @@ -146,6 +146,7 @@ > 'wikiapproval_master_group' => '', > 'wiki_edit_section' => 'y', > 'wiki_edit_plugin' => 'y', > + 'wiki_validate_plugin' => 'y', > > 'wikiplugin_agentinfo' => 'n', > 'wikiplugin_alink' => 'y', > > Modified: trunk/lib/tikilib.php > =================================================================== > --- trunk/lib/tikilib.php 2008-09-01 13:53:28 UTC (rev 14565) > +++ trunk/lib/tikilib.php 2008-09-01 14:19:37 UTC (rev 14566) > @@ -5164,6 +5164,11 @@ > $preview = $tiki_p_plugin_preview == 'y' && $details; > $approve = $tiki_p_plugin_approve == 'y' && $details; > > + if( $status != 'rejected' ) { > + $smarty->assign( 'plugin_fingerprint', $status ); > + $status = 'pending'; > + } > + > $smarty->assign( 'plugin_name', $plugin_name ); > $smarty->assign( 'plugin_index', $current_index ); > > @@ -5256,12 +5261,106 @@ > } > > function plugin_can_execute( $name, $data = '', $args = array() ) { > - // TODO : Do real logic here > - //return 'pending'; > - //return 'rejected'; > - return true; > + global $prefs; > + > + // If validation is disabled, anything can execute > + if( $prefs['wiki_validate_plugin'] != 'y' ) > + return true; > + > + $meta = $this->plugin_info( $name ); > + if( ! isset( $meta['validate'] ) ) > + return true; > + > + $fingerprint = $this->plugin_fingerprint( $meta, $data, $args ); > + > + $val = $this->plugin_fingerprint_check( $fingerprint ); > + if( strpos( $val, 'accept' ) === 0 ) > + return true; > + elseif( strpos( $val, 'reject' ) === 0 ) > + return 'rejected'; > + else { > + global $tiki_p_plugin_approve, $user; > + if( $_SERVER['REQUEST_METHOD'] == 'POST' > + && $tiki_p_plugin_approve == 'y' > + && isset( $_POST['plugin_fingerprint'] ) > + && $_POST['plugin_fingerprint'] == $fingerprint ) { > + > + if( isset( $_POST['plugin_accept'] ) ) { > + $this->plugin_fingerprint_store( $fingerprint, 'accept' ); > + return true; > + } elseif( isset( $_POST['plugin_reject'] ) ) { > + $this->plugin_fingerprint_store( $fingerprint, 'reject' ); > + return 'rejected'; > + } > + } > + > + return $fingerprint; > + } > } > > + function plugin_fingerprint_check( $fp ) { > + global $prefs; > + > + if( ! isset( $prefs['plugin_fingerprints'] ) ) > + return ''; > + > + $data = unserialize( $prefs['plugin_fingerprints'] ); > + > + if( isset( $data[$fp] ) ) > + return $data[$fp]; > + else > + return ''; > + } > + > + function plugin_fingerprint_store( $fp, $type ) { > + global $prefs, $user; > + $date = date( 'Y-m-d H:i:s' ); > + > + if( ! isset( $prefs['plugin_fingerprints'] ) ) > + $data = array(); > + else > + $data = unserialize( $prefs['plugin_fingerprints'] ); > + > + if( ! is_array( $data ) ) > + $data = array(); > + > + $data[$fp] = "$type/$date/$user"; > + $this->set_preference( 'plugin_fingerprints', serialize( $data ) ); > + } > + > + function plugin_fingerprint( $meta, $data, $args ) { > + $validate = $meta['validate']; > + if( $validate == 'all' || $validate == 'body' ) > + $validateBody = $data; > + else > + $validateBody = ''; > + > + if( $validate == 'all' || $validate == 'arguments' ) { > + $validateArgs = $args; > + > + // Remove arguments marked as safe from the fingerprint > + foreach( $meta['params'] as $key => $info ) > + if( isset( $validateArgs[$key] ) > + && isset( $info['safe'] ) > + && $info['safe'] > + ) > + unset( $validateArgs[$key] ); > + > + // Parameter order needs to be stable > + ksort( $validateArgs ); > + } else > + $validateArgs = array(); > + > + $bodyLen = str_pad( strlen( $validateBody ), 6, '0', STR_PAD_RIGHT ); > + $serialized = serialize( $validateArgs ); > + $argsLen = str_pad( strlen( $serialized ), 6, '0', STR_PAD_RIGHT ); > + > + $bodyHash = md5( $validateBody ); > + $argsHash = md5( $serialized ); > + > + return "$bodyHash-$argsHash-$bodyLen-$argsLen"; > + } > + > function plugin_execute( $name, $data = '', $args = array(), $offset = 0 > ) { if( ! $this->plugin_exists( $name, true ) ) > return false; > > Modified: trunk/lib/wiki-plugins/wikiplugin_redirect.php > =================================================================== > --- trunk/lib/wiki-plugins/wikiplugin_redirect.php 2008-09-01 13:53:28 UTC > (rev 14565) +++ trunk/lib/wiki-plugins/wikiplugin_redirect.php 2008-09-01 > 14:19:37 UTC (rev 14566) @@ -14,7 +14,7 @@ > 'name' => tra('Redirect'), > 'description' => tra('Redirect the user to a wiki page or generic > URL.'), 'prefs' => array( 'wikiplugin_redirect' ), > - 'validate' => array( 'arguments' ), > + 'validate' => 'arguments', > 'params' => array( > 'page' => array( > 'required' => false, > > Modified: trunk/templates/tiki-plugin_blocked.tpl > =================================================================== > --- trunk/templates/tiki-plugin_blocked.tpl 2008-09-01 13:53:28 UTC (rev > 14565) +++ trunk/templates/tiki-plugin_blocked.tpl 2008-09-01 14:19:37 UTC > (rev 14566) @@ -49,6 +49,13 @@ > {else} > <p>{tr}This plugin's body is empty.{/tr}</p> > {/if} > + <form method="post" action="{$smarty.server.REQUEST_URI|escape}"> > + <p> > + <input type="hidden" name="plugin_fingerprint" > value="{$plugin_fingerprint|escape}"/> + <input type="submit" > name="plugin_accept" value="{tr}Approve{/tr}"/> + <input type="submit" > name="plugin_reject" value="{tr}Reject{/tr}"/> + </p> > + </form> > </div> > {/if} > {/if} > > > This was sent by the SourceForge.net collaborative development platform, > the world's largest Open Source development site. > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge Build the coolest Linux based applications with Moblin SDK & win > great prizes Grand prize is a trip for two to an Open Source event anywhere > in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Tikiwiki-cvs mailing list > Tik...@li... > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs |
From: WEBER P. <Pat...@co...> - 2008-10-27 09:29:40
|
+1 Nyloth ________________________________ From: Pascal Kustner [mailto:pas...@gm...] Sent: Monday 27 October 2008 10:16 To: CVS/SVN commits information Subject: Re: [Tikiwiki-cvs/svn] SF.net SVN: tikiwiki:[15307] trunk Hello, Please, no such commit messages.... "If it doesn't seem to work, find the underlying cause; don't hack at it until it goes." "Don't touch this unless you understand the effects of the changes you are making. It makes me angry when I have to fix things. It is not good when I am angry." "If you have to resort to data hackery; then chances are you are Doing It Wrong." What's this ? This message will be in changelog file for 3.0 :-(( A commit message has to be technical: What are you doing, what will be the changes and effects for tikiwiki users and developers. No coding lessons..... Regards, pkdille 2008/10/26 <bi...@us...> Revision: 15307 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=15307&view=rev Author: bitey Date: 2008-10-26 22:53:12 +0000 (Sun, 26 Oct 2008) Log Message: ----------- [FIX] No touchy. If it doesn't seem to work, find the underlying cause; don't hack at it until it goes. admin_bar wasn't setting values, as $feature was a non-null value; but it also wasn't the actual feature value; so its feature chain was empty; so as far as the part which was loading features was concerned, there were no features [1]. The duplicate setting of values in the main magic file seemed to work; but mostly because it was overwriting the empty values [from 1] with the actual values. Don't touch this unless you understand the effects of the changes you are making. It makes me angry when I have to fix things. It is not good when I am angry. Modified Paths: -------------- trunk/lib/admin/magiclib.php trunk/tiki-magic.php Modified: trunk/lib/admin/magiclib.php =================================================================== --- trunk/lib/admin/magiclib.php 2008-10-26 22:39:33 UTC (rev 15306) +++ trunk/lib/admin/magiclib.php 2008-10-26 22:53:12 UTC (rev 15307) @@ -112,6 +112,9 @@ function _feature_post_processing($feature) { global $prefs, $enumerations, $tikilib, $categlib, $userlib, $dbTiki; + + if ($feature == null) return null; + if ($feature['setting_name'] != '' && in_array($feature['setting_name'], $prefs)) { $feature['value'] = $prefs[$feature['setting_name']]; // Slightly odd special case. The value needs to be stored in 'language'; however the language Modified: trunk/tiki-magic.php =================================================================== --- trunk/tiki-magic.php 2008-10-26 22:39:33 UTC (rev 15306) +++ trunk/tiki-magic.php 2008-10-26 22:53:12 UTC (rev 15307) @@ -8,40 +8,6 @@ $feature = $magiclib->get_feature($featureId); $smarty->assign('feature', $feature); $smarty->assign('title', $feature['feature_name']); -if (isset($featurePage[2])) { - $topLevelId = $featurePage[2]; -} else { - $topLevelId = ''; -} -if (count($featurePage) > 3) { - $secondLevelId = $featurePage[3]; -} - -$topLevelFeatures = $magiclib->get_child_features(1, 'containers'); - -if ($topLevelId != '' && is_numeric($topLevelId)) { - $secondLevelFeatures = $magiclib->get_child_features($topLevelId, 'containers'); -} else { - $secondLevelFeatures = ''; -} - -if ($secondLevelId != '' && is_numeric($secondLevelId)) { - $thirdLevelFeatures = $magiclib->get_child_features($secondLevelId, 'containers'); -} else { - $thirdLevelFeatures = ''; -} - -$smarty->assign_by_ref('toplevelfeatures', $topLevelFeatures); -$smarty->assign_by_ref('secondlevel', $secondLevelFeatures); -$smarty->assign_by_ref('thirdlevel', $thirdLevelFeatures); - -$smarty->assign('toplevel', $topLevelId); -if (count($featurePage) > 1) { - $smarty->assign('secondlevelId', $secondLevelId); -} -if (count($featurePage) > 2) { - $smarty->assign('thirdlevelId', $thirdLevelId); -} /* * $$feature['permission'] is slightly magic. It's checking the value of the name of the variable that is in feature['permission']. * If feature['permission'] is 'tiki_p_wiki_admin', it is checking if $tiki_p_wiki_admin has the value 'y'. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------ - This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Tikiwiki-cvs mailing list Tik...@li... https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs |
From: Marc L. <ma...@ma...> - 2009-01-07 12:12:36
|
On Tue, Jan 6, 2009 at 12:48 PM, Louis-Philippe Huberdeau <lph...@lp...> wrote: > My goal was to make the change as localized as possible on this one. > Basically, only one SQL query is affected and the result is exactly the same. > This is why I used the same structure. I don't have time to redesign > everything on this one. There is a lot of code duplication all around and I > didn't want to touch any of it. > > As for group alert, marc told me the purpose was different, so it's not affected > at all by this commit. > So now, we have : 1- watches added by the user (by clicking eye) 2- watches added by the admin (in tiki-admin_notifications) 3- The new Alert feature, introduced by Gilles 4- This new group watch, introduced by LPH, which is merely extending user watch All these features are somewhat related: http://doc.tikiwiki.org/alert http://doc.tikiwiki.org/watch (user & group) http://doc.tikiwiki.org/tell+a+friend I know there was discussion on the list with Gilles about how to best add the Alert feature and be as future-proof as possible. But I didn't follow to see what was decided and implemented. What do you think? Best regards, > -- > LP > > On January 6, 2009 12:41:21 Sylvie Greverend wrote: >> I am not sure it is a good idea to use the same structure than >> tiki_user_watches. The url/title columns are painful. I think it would >> be easier to link to tiki_objects >> My 2 cents - because I do not like the tiki_objects table too. >> Also - what will happen will the feature group of alert? Will it be >> re-included? >> My 2 cents >> >> On Tue, 2009-01-06 at 17:18 +0000, lph...@us... >> >> wrote: >> > Revision: 16187 >> > >> > http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16187&view=rev Author: >> > lphuberdeau >> > Date: 2009-01-06 17:18:33 +0000 (Tue, 06 Jan 2009) >> > >> > Log Message: >> > ----------- >> > [NEW] Support for group watches, UI still to come >> > >> > Modified Paths: >> > -------------- >> > trunk/db/tiki.sql >> > trunk/lib/tikilib.php >> > >> > Added Paths: >> > ----------- >> > trunk/installer/schema/20090106_group_watch_tiki.sql >> > >> > Modified: trunk/db/tiki.sql >> > =================================================================== >> > --- trunk/db/tiki.sql 2009-01-06 16:25:45 UTC (rev 16186) >> > +++ trunk/db/tiki.sql 2009-01-06 17:18:33 UTC (rev 16187) >> > @@ -1127,6 +1127,19 @@ >> > PRIMARY KEY (groupName(30),includeGroup(30)) >> > ) ENGINE=MyISAM; >> > >> > +DROP TABLE IF EXISTS tiki_group_watches; >> > +CREATE TABLE tiki_group_watches ( >> > + watchId int(12) NOT NULL auto_increment, >> > + `group` varchar(200) NOT NULL default '', >> > + event varchar(40) NOT NULL default '', >> > + object varchar(200) NOT NULL default '', >> > + title varchar(250) default NULL, >> > + type varchar(200) default NULL, >> > + url varchar(250) default NULL, >> > + KEY watchId (watchId), >> > + PRIMARY KEY (`group`(50),event,object(100)) >> > +) ENGINE=MyISAM; >> > + >> > DROP TABLE IF EXISTS tiki_history; >> > CREATE TABLE tiki_history ( >> > historyId int(12) NOT NULL auto_increment, >> > >> > Added: trunk/installer/schema/20090106_group_watch_tiki.sql >> > =================================================================== >> > --- trunk/installer/schema/20090106_group_watch_tiki.sql >> > (rev 0) +++ >> > trunk/installer/schema/20090106_group_watch_tiki.sql 2009-01-06 17:18:33 >> > UTC (rev 16187) @@ -0,0 +1,12 @@ >> > +#2008-01-06 lphuberdeau >> > +CREATE TABLE tiki_group_watches ( >> > + watchId int(12) NOT NULL auto_increment, >> > + `group` varchar(200) NOT NULL default '', >> > + event varchar(40) NOT NULL default '', >> > + object varchar(200) NOT NULL default '', >> > + title varchar(250) default NULL, >> > + type varchar(200) default NULL, >> > + url varchar(250) default NULL, >> > + KEY watchId (watchId), >> > + PRIMARY KEY (`group`(50),event,object(100)) >> > +) ENGINE=MyISAM; >> > >> > Modified: trunk/lib/tikilib.php >> > =================================================================== >> > --- trunk/lib/tikilib.php 2009-01-06 16:25:45 UTC (rev 16186) >> > +++ trunk/lib/tikilib.php 2009-01-06 17:18:33 UTC (rev 16187) >> > @@ -326,88 +326,104 @@ >> > $bindvars[] = $page['objName']; >> > } >> > $mid .= 'and ('.implode(' or ', $mids).')'; >> > - } else if ( $prefs['feature_user_watches_translations'] == 'y' >> > - && $event == 'wiki_page_created' ) { >> > - $page_info = $this->get_page_info( $object ); >> > - $mid = "`event`='wiki_page_in_lang_created' and `object`=? and >> > `type`='lang'"; - $bindvars[] = $page_info['lang']; >> > - } else if ($event == 'forum_post_topic') { >> > - $mid = "(`event`=? or `event`=?) and `object`=?"; >> > - $bindvars[] = $event; >> > - $bindvars[] = 'forum_post_topic_and_thread'; >> > - $bindvars[] = $object; >> > - } else if ($event == 'forum_post_thread') { >> > - $mid = "(`event`=? and `object`=?) or ( `event`=? and `object`=?)"; >> > - $bindvars[] = $event; >> > - $bindvars[] = $object; >> > - $bindvars[] = 'forum_post_topic_and_thread'; >> > - $forumId = $info['forumId']; >> > - $bindvars[] = $forumId; >> > - } else { >> > - $mid = "`event`=? and `object`=?"; >> > - $bindvars[] = $event; >> > - $bindvars[] = $object; >> > - } >> > + } elseif ( $prefs['feature_user_watches_translations'] == 'y' >> > + && $event == 'wiki_page_created' ) { >> > + $page_info = $this->get_page_info( $object ); >> > + $mid = "`event`='wiki_page_in_lang_created' and `object`=? and >> > `type`='lang'"; + $bindvars[] = $page_info['lang']; >> > + } elseif ($event == 'forum_post_topic') { >> > + $mid = "(`event`=? or `event`=?) and `object`=?"; >> > + $bindvars[] = $event; >> > + $bindvars[] = 'forum_post_topic_and_thread'; >> > + $bindvars[] = $object; >> > + } elseif ($event == 'forum_post_thread') { >> > + $mid = "(`event`=? and `object`=?) or ( `event`=? and `object`=?)"; >> > + $bindvars[] = $event; >> > + $bindvars[] = $object; >> > + $bindvars[] = 'forum_post_topic_and_thread'; >> > + $forumId = $info['forumId']; >> > + $bindvars[] = $forumId; >> > + } else { >> > + $mid = "`event`=? and `object`=?"; >> > + $bindvars[] = $event; >> > + $bindvars[] = $object; >> > + } >> > + >> > + // Obtain the list of watches on event/object for user watches >> > + // Union obtains all users member of groups being watched >> > + // Distinct union insures there are no duplicates >> > $query = "select tuw.*, tup1.`value` as language, tup2.`value` as >> > mailCharset from `tiki_user_watches` tuw left join >> > `tiki_user_preferences` tup1 on (tup1.`user`=tuw.`user` and >> > tup1.`prefName`='language') left join `tiki_user_preferences` tup2 on >> > (tup2.`user`=tuw.`user` and tup2.`prefName`='mailCharset') - where >> > $mid"; >> > - $result = $this->query($query,$bindvars); >> > + where $mid >> > + UNION DISTINCT >> > + select tgw.watchId, uu.login, tgw.event, tgw.object, tgw.title, >> > tgw.type, tgw.url, uu.email, + tup1.value as language, tup2.value as >> > mailCharset >> > + 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 <> '' + left join `tiki_user_preferences` tup1 >> > on (tup1.`user`=uu.`login` and tup1.`prefName`='language') + left join >> > `tiki_user_preferences` tup2 on (tup2.`user`=uu.`login` and >> > tup2.`prefName`='mailCharset') + where $mid >> > + "; >> > >> > + $result = $this->query($query,array_merge( $bindvars, $bindvars )); >> > + >> > if ($result->numRows()) { >> > >> > while ($res = $result->fetchRow()) { >> > switch($event) { >> > - case 'wiki_page_changed': >> > - case 'wiki_page_created': >> > - $res['perm']=($this->user_has_perm_on_object($res['user'],$object, >> >'wiki page','tiki_p_view') || >> > - $this->user_has_perm_on_object($res['user'],$object,'wiki >> > page','tiki_p_admin_wiki')); - break; >> > - case 'tracker_modified': >> > - $res['perm'] = >> > $this->user_has_perm_on_object($res['user'],$object,'tracker','tiki_p_vie >> >w_trackers'); - break; >> > - case 'tracker_item_modified': >> > - $res['perm'] = >> > $this->user_has_perm_on_object($res['user'],$info['trackerId'],'tracker', >> >'tiki_p_view_trackers'); - break; >> > - case 'blog_post': >> > - $res['perm']=($this->user_has_perm_on_object($res['user'],$object, >> >'blog','tiki_p_read_blog') || >> > - $this->user_has_perm_on_object($res['user'],$object,'blog','tiki >> >_p_admin_blog')); - break; >> > - case 'map_changed': >> > - $res['perm']=$this->user_has_perm_on_object($res['user'],$object,' >> >map','tiki_p_map_view'); - break; >> > - case 'forum_post_topic': >> > - $res['perm']=($this->user_has_perm_on_object($res['user'],$object, >> >'forum','tiki_p_forum_read') || >> > - $this->user_has_perm_on_object($res['user'],$object,'forum','tik >> >i_p_admin_forum')); - break; >> > - case 'forum_post_thread': >> > - $res['perm']=($this->user_has_perm_on_object($res['user'],$forumId >> >,'forum','tiki_p_forum_read') || >> > - $this->user_has_perm_on_object($res['user'],$object,'forum','tik >> >i_p_admin_forum')); - break; >> > - case 'file_gallery_changed': >> > - $res['perm']=($this->user_has_perm_on_object($res['user'],$object, >> >'file gallery','tiki_p_view_file_gallery') || >> > - $this->user_has_perm_on_object($res['user'],$object,'file >> > gallery','tiki_p_download_files')); - break; >> > - case 'article_submitted': >> > - case 'topic_article_created': >> > - global $userlib, $topicId; >> > - $res['perm']= >> > ($userlib->user_has_permission($res['user'],'tiki_p_read_article') && >> > - (empty($topicId) || >> > $this->user_has_perm_on_object($res['user'],$topicId,'topic','tiki_p_topi >> >c_read'))); - break; >> > - case 'calendar_changed': >> > - $res['perm']= >> > $this->user_has_perm_on_object($res['user'],$object,'calendar','tiki_p_vi >> >ew_calendar'); - break; >> > - case 'image_gallery_changed': >> > - $res['perm'] = >> > $this->user_has_perm_on_object($res['user'],$object,'image >> > gallery','tiki_p_view_image_gallery'); - break; >> > - case 'category_changed': >> > - global $categlib; >> > - $res['perm']= >> > $categlib->has_view_permission($res['user'],$object); - break; >> > - default: >> > - // for security we deny all others. >> > - $res['perm']=FALSE; >> > - break; >> > + case 'wiki_page_changed': >> > + case 'wiki_page_created': >> > + $res['perm']=($this->user_has_perm_on_object($res['user'],$object,' >> >wiki page','tiki_p_view') || >> > + $this->user_has_perm_on_object($res['user'],$object,'wiki >> > page','tiki_p_admin_wiki')); + break; >> > + case 'tracker_modified': >> > + $res['perm'] = >> > $this->user_has_perm_on_object($res['user'],$object,'tracker','tiki_p_vie >> >w_trackers'); + break; >> > + case 'tracker_item_modified': >> > + $res['perm'] = >> > $this->user_has_perm_on_object($res['user'],$info['trackerId'],'tracker', >> >'tiki_p_view_trackers'); + break; >> > + case 'blog_post': >> > + $res['perm']=($this->user_has_perm_on_object($res['user'],$object,' >> >blog','tiki_p_read_blog') || >> > + $this->user_has_perm_on_object($res['user'],$object,'blog','tiki_ >> >p_admin_blog')); + break; >> > + case 'map_changed': >> > + $res['perm']=$this->user_has_perm_on_object($res['user'],$object,'m >> >ap','tiki_p_map_view'); + break; >> > + case 'forum_post_topic': >> > + $res['perm']=($this->user_has_perm_on_object($res['user'],$object,' >> >forum','tiki_p_forum_read') || >> > + $this->user_has_perm_on_object($res['user'],$object,'forum','tiki >> >_p_admin_forum')); + break; >> > + case 'forum_post_thread': >> > + $res['perm']=($this->user_has_perm_on_object($res['user'],$forumId, >> >'forum','tiki_p_forum_read') || >> > + $this->user_has_perm_on_object($res['user'],$object,'forum','tiki >> >_p_admin_forum')); + break; >> > + case 'file_gallery_changed': >> > + $res['perm']=($this->user_has_perm_on_object($res['user'],$object,' >> >file gallery','tiki_p_view_file_gallery') || >> > + $this->user_has_perm_on_object($res['user'],$object,'file >> > gallery','tiki_p_download_files')); + break; >> > + case 'article_submitted': >> > + case 'topic_article_created': >> > + global $userlib, $topicId; >> > + $res['perm']= >> > ($userlib->user_has_permission($res['user'],'tiki_p_read_article') && >> > + (empty($topicId) || >> > $this->user_has_perm_on_object($res['user'],$topicId,'topic','tiki_p_topi >> >c_read'))); + break; >> > + case 'calendar_changed': >> > + $res['perm']= >> > $this->user_has_perm_on_object($res['user'],$object,'calendar','tiki_p_vi >> >ew_calendar'); + break; >> > + case 'image_gallery_changed': >> > + $res['perm'] = >> > $this->user_has_perm_on_object($res['user'],$object,'image >> > gallery','tiki_p_view_image_gallery'); + break; >> > + case 'category_changed': >> > + global $categlib; >> > + $res['perm']= $categlib->has_view_permission($res['user'],$object); >> > + break; >> > + default: >> > + // for security we deny all others. >> > + $res['perm']=FALSE; >> > + break; >> > } >> > >> > if($res['perm']) { >> > @@ -422,17 +438,17 @@ >> > global $categlib; require_once('lib/categories/categlib.php'); >> > $objectType=""; >> > switch($event) { >> > - case 'wiki_page_changed': $objectType="wiki page"; break; >> > - case 'blog_post': $objectType="blog"; break; >> > - case 'map_changed': $objectType="map_changed"; break; >> > - case 'forum_post_topic': $objectType="forum"; break; >> > - case 'forum_post_thread': $objectType="forum"; break; >> > - case 'file_gallery_changed': $objectType="file gallery"; break; >> > - case 'article_submitted': $objectType="topic"; break; >> > - case 'image_gallery_changed': $objectType="image gallery"; break; >> > - case 'tracker_modified': $objectType="tracker"; break; >> > - case 'tracker_item_modified': $objectType="tracker"; break; >> > - case 'calendar_changed': $objectType="calendar"; break; >> > + case 'wiki_page_changed': $objectType="wiki page"; break; >> > + case 'blog_post': $objectType="blog"; break; >> > + case 'map_changed': $objectType="map_changed"; break; >> > + case 'forum_post_topic': $objectType="forum"; break; >> > + case 'forum_post_thread': $objectType="forum"; break; >> > + case 'file_gallery_changed': $objectType="file gallery"; break; >> > + case 'article_submitted': $objectType="topic"; break; >> > + case 'image_gallery_changed': $objectType="image gallery"; break; >> > + case 'tracker_modified': $objectType="tracker"; break; >> > + case 'tracker_item_modified': $objectType="tracker"; break; >> > + case 'calendar_changed': $objectType="calendar"; break; >> > } >> > if ( $objectType != "") { >> > >> > >> > >> > 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 > > > ------------------------------------------------------------------------------ > 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 > -- Marc Laporte http://MarcLaporte.com http://TikiWiki.org/MarcLaporte http://AvanTech.net http://OurWiki.net |
From: Louis-Philippe H. <lph...@dr...> - 2009-01-16 17:21:50
|
The best language flag redirects you to an equivalent page based on your preferences. If best language is always on, you won't be able to see the content in other languages, which is bad. Content is not always up to date. And no, bl cannot be part of the session because it's related to navigation. Sorry marc. -- LP On January 16, 2009 12:04:07 J Bradley wrote: > Hi Sylvie (and devels) > > Marc asked about this the other day (if that &bl could be removed from > the URL as it causes issues) and i meant to ask at the time why it was > there in the first place? When would you not want the "Best" language? > > Shouldn't this be a user preference? Or, if you want a "worse" > language maybe pass that as a parameter (like &lang=gb-en for instance?) > > Or did i miss something too? > > jonny B > > On 16 Jan 2009, at 16:25, Sylvie Greverend wrote: > > sewilco, > > Why do you need the rule with best language? > > Did I miss something? > > Thanks > > > > On Tue, 2009-01-13 at 00:15 +0000, se...@us... > > > > wrote: > >> Revision: 16257 > >> > >> http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16257&view=rev Author: > >> sewilco > >> Date: 2009-01-13 00:15:17 +0000 (Tue, 13 Jan 2009) > >> > >> Log Message: > >> ----------- > >> [ENH] add feature_sefurl_filter for Smarty SEFURL filtering (web > >> cache recommended). > >> > >> Modified Paths: > >> -------------- > >> trunk/_htaccess > >> trunk/db/features.csv > >> trunk/lib/setup/prefs.php > >> trunk/tiki-admin_include_features.php > >> trunk/tiki-setup.php > >> > >> Modified: trunk/_htaccess > >> =================================================================== > >> --- trunk/_htaccess 2009-01-12 22:40:55 UTC (rev 16256) > >> +++ trunk/_htaccess 2009-01-13 00:15:17 UTC (rev 16257) > >> @@ -18,15 +18,31 @@ > >> <IfModule mod_rewrite.c> > >> RewriteEngine On > >> > >> +# rewrite for multitiki sites, when configured as symlinks, not as > >> apache aliases > >> +RewriteCond %{SCRIPT_FILENAME}/ -d > >> +RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L] > >> + > >> +# Skip index.php and go right to tiki-index.php > >> +#RewriteRule ^$ tiki-index.php > >> [L] > >> + > >> # direct one-word access > >> RewriteRule ^calendar$ tiki- > >> calendar.php [L] > >> RewriteRule ^articles$ tiki- > >> view_articles.php [L] > >> RewriteRule ^blogs$ tiki- > >> list_blogs.php [L] > >> +# The following supports up to seven merged calendars; most to > >> least. SEWilco 2008-07-15 > >> +RewriteRule ^cal([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+), > >> ([0-9]+),([0-9]+) tiki-calendar.php?calIds[]=$1&calIds[]= > >> $2&calIds[]=$3&calIds[]=$4&calIds[]=$5&calIds[]=$6&calIds[]=$7 > >> [QSA,L] > >> +RewriteRule ^cal([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+), > >> ([0-9]+) tiki-calendar.php?calIds[]=$1&calIds[]=$2&calIds[]= > >> $3&calIds[]=$4&calIds[]=$5&calIds[]=$6 [QSA,L] > >> +RewriteRule ^cal([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+) tiki- > >> calendar.php?calIds[]=$1&calIds[]=$2&calIds[]=$3&calIds[]= > >> $4&calIds[]=$5 [QSA,L] > >> +RewriteRule ^cal([0-9]+),([0-9]+),([0-9]+),([0-9]+) tiki- > >> calendar.php?calIds[]=$1&calIds[]=$2&calIds[]=$3&calIds[]=$4 [QSA,L] > >> +RewriteRule ^cal([0-9]+),([0-9]+),([0-9]+) tiki-calendar.php? > >> calIds[]=$1&calIds[]=$2&calIds[]=$3 [QSA,L] > >> +RewriteRule ^cal([0-9]+),([0-9]+) tiki-calendar.php?calIds[]= > >> $1&calIds[]=$2 [QSA,L] > >> +RewriteRule ^cal([0-9]+) tiki-calendar.php?calIds[]= > >> $1 [QSA,L] > >> RewriteRule ^categories$ tiki- > >> browse_categories.php [L] > >> RewriteRule ^charts$ tiki- > >> list_charts.php [L] > >> RewriteRule ^chat$ tiki- > >> chat.php [L] > >> RewriteRule ^contact$ tiki- > >> contact.php [L] > >> RewriteRule ^directories$ tiki- > >> directory_browse.php [L] > >> +RewriteRule ^dirlink([0-9]+) tiki-directory_redirect.php? > >> siteId=$1 [QSA,L] > >> RewriteRule ^faqs$ tiki- > >> list_faqs.php [L] > >> RewriteRule ^files$ tiki- > >> list_file_gallery.php [L] > >> RewriteRule ^forums$ tiki- > >> forums.php [L] > >> @@ -52,14 +68,16 @@ > >> RewriteRule ^cat([0-9]+) tiki-browse_categories.php? > >> parentId=$1 [QSA,L] > >> RewriteRule ^blog([0-9]+) tiki-view_blog.php?blogId= > >> $1 [QSA,L] > >> RewriteRule ^blogpost([0-9]+) tiki-view_blog_post.php?postId= > >> $1 [QSA,L] > >> +RewriteRule ^browseimage([0-9]+) tiki-browse_image.php?imageId= > >> $1 [QSA,L] > >> RewriteRule ^chart([0-9]+) tiki-view_chart.php?chartId= > >> $1 [QSA,L] > >> RewriteRule ^directory([0-9]+) tiki-directory_browse.php?parent= > >> $1 [QSA,L] > >> RewriteRule ^faq([0-9]+) tiki-view_faq.php?faqId= > >> $1 [QSA,L] > >> RewriteRule ^file([0-9]+) tiki-list_file_gallery.php? > >> galleryId=$1 [QSA,L] > >> RewriteRule ^dl([0-9]+) tiki-download_file.php?fileId= > >> $1 [QSA,L] > >> RewriteRule ^forum([0-9]+) tiki-view_forum.php?forumId= > >> $1 [QSA,L] > >> +RewriteRule ^gallery([0-9]+) tiki-browse_gallery.php? > >> galleryId=$1 [QSA,L] > >> RewriteRule ^image([0-9]+) show_image.php?id= > >> $1 [QSA,L] > >> -RewriteRule ^gallery([0-9]+) tiki-browse_gallery.php? > >> galleryId=$1 [QSA,L] > >> +RewriteRule ^imagescale([0-9]+)/([0-9]+) show_image.php?id= > >> $1&scalesize=$2 [QSA,L] > >> RewriteRule ^newsletter([0-9]+) tiki-newsletters.php?nlId= > >> $1 [QSA,L] > >> RewriteRule ^quiz([0-9]+) tiki-take_quiz.php?quizId= > >> $1 [QSA,L] > >> RewriteRule ^survey([0-9]+) tiki-take_survey.php?surveyId= > >> $1 [QSA,L] > >> @@ -78,8 +96,10 @@ > >> # make sure this is the last rule! > >> RewriteRule ^show:(~?)([-_\+A-Za-z0-9]+)$ tiki-slideshow.php?page= > >> $1$2 [QSA,L] > >> RewriteRule ^([^/\.]+)$ tiki-index.php?page= > >> $1 [QSA,L] > >> +# Following one rule added to support &bl "Best Language". SEWilco > >> 2008-07-15 > >> +RewriteRule ^([-_\+A-Za-z0-9]+)&bl$ tiki-index.php?page= > >> $1&bl [QSA,L] > >> > >> -# how to redierct to a wiki page on a not found error: take away > >> the comment + adapt the pagename > >> +# how to redirect to a wiki page on a not found error: take away > >> the comment + adapt the pagename > >> # ErrorDocument 404 tiki-index.php?page=Page+not+found > >> > >> </IfModule> > >> > >> Modified: trunk/db/features.csv > >> =================================================================== > >> --- trunk/db/features.csv 2009-01-12 22:40:55 UTC (rev 16256) > >> +++ trunk/db/features.csv 2009-01-13 00:15:17 UTC (rev 16257) > >> @@ -952,3 +952,4 @@ > >> 1061,Show last modification, > >> 70,,feature_search_show_last_modification,flag,,tiki_p_admin,,,,,, > >> 1062,Use edit plugin icons, > >> 1025,,wiki_edit_plugin,flag,,tiki_p_admin,,,,,, > >> 1063,Group Watches, > >> 6,,feature_group_watches,feature,,tiki_p_admin,,,,,, > >> +1064,Search Friendly URLs Filter, > >> 68 > >> ,experimental > >> ,feature_sefurl_filter > >> ,feature,,tiki_p_admin,,,,,,Requires .htaccess file. Filters all > >> output; uses more CPU than non-filter version. Can be used with non- > >> filter SEF URL. > >> > >> Modified: trunk/lib/setup/prefs.php > >> =================================================================== > >> --- trunk/lib/setup/prefs.php 2009-01-12 22:40:55 UTC (rev 16256) > >> +++ trunk/lib/setup/prefs.php 2009-01-13 00:15:17 UTC (rev 16257) > >> @@ -191,6 +191,7 @@ > >> 'wikiplugin_gauge' => 'y', > >> 'wikiplugin_group' => 'y', > >> 'wikiplugin_iframe' => 'n', > >> + 'wikiplugin_image' => 'y', > >> 'wikiplugin_include' => 'y', > >> 'wikiplugin_jabber' => 'n', > >> 'wikiplugin_js' => 'n', > >> @@ -1119,6 +1120,7 @@ > >> 'wiki_3d_adjust_camera' => '', > >> 'wiki_3d_autoload' => '', > >> 'feature_sefurl' => 'n', > >> + 'feature_sefurl_filter' => 'n', > >> 'feature_mootools' => 'y', // Needed for shadowbox > >> 'javascript_enabled' => 'n', > >> 'feature_comments_post_as_anonymous' => 'n', > >> > >> Modified: trunk/tiki-admin_include_features.php > >> =================================================================== > >> --- trunk/tiki-admin_include_features.php 2009-01-12 22:40:55 UTC > >> (rev 16256) > >> +++ trunk/tiki-admin_include_features.php 2009-01-13 00:15:17 UTC > >> (rev 16257) > >> @@ -97,6 +97,7 @@ > >> "feature_swffix", > >> "layout_section", > >> "feature_sefurl", > >> + "feature_sefurl_filter", > >> "feature_tikitests", > >> "feature_magic", > >> "feature_minichat", > >> > >> Modified: trunk/tiki-setup.php > >> =================================================================== > >> --- trunk/tiki-setup.php 2009-01-12 22:40:55 UTC (rev 16256) > >> +++ trunk/tiki-setup.php 2009-01-13 00:15:17 UTC (rev 16257) > >> @@ -108,6 +108,10 @@ > >> $smarty->assign('templatename', $templatename); > >> require_once('tiki-admin_bar.php'); > >> } > >> +if ( $prefs['feature_sefurl_filter'] == 'y' ) { > >> + require_once ('tiki-sefurl.php'); > >> + $smarty->register_outputfilter('filter_out_sefurl'); > >> +} > >> > >> $smarty->assign_by_ref('phpErrors', $phpErrors); > >> $smarty->assign_by_ref('num_queries', $num_queries); > >> > >> > >> This was sent by the SourceForge.net collaborative development > >> platform, the world's largest Open Source development site. > >> > >> ------------------------------------------------------------------------ > >>------ This SF.net email is sponsored by: > >> SourcForge Community > >> SourceForge wants to tell your story. > >> http://p.sf.net/sfu/sf-spreadtheword > >> _______________________________________________ > >> Tikiwiki-cvs mailing list > >> Tik...@li... > >> https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs > > > > ------------------------------------------------------------------------- > >----- This SF.net email is sponsored by: > > SourcForge Community > > SourceForge wants to tell your story. > > http://p.sf.net/sfu/sf-spreadtheword > > _______________________________________________ > > Tikiwiki-cvs mailing list > > Tik...@li... > > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs > > --------------------------------------------------------------------------- >--- This SF.net email is sponsored by: > SourcForge Community > SourceForge wants to tell your story. > http://p.sf.net/sfu/sf-spreadtheword > _______________________________________________ > Tikiwiki-cvs mailing list > Tik...@li... > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs |
From: Nelson Ko <ne...@wo...> - 2009-01-16 18:45:47
|
What might be useful might be a switchable feature that sets the sitewide default "best language behavior" to on or off, and then for the flag in the URL bl=y or bl=n to override the default behavior. In sumo (support.mozilla), in fact the default behavior has been hacked to 'y' (Sylvie, please note when doing the merge work you are starting to do). 'bl' by itself means 'y' for backward compatibility. This reduces ugliness by allowing the best language behavior to happen without having to put &bl in. I see this as a site preference, not a user preference, because if whether best language behavior was a user preference it would cause a lot of inconsistency with the way a URL serves pages for different users beyond their language settings and cause all sorts of confusion. This best language thing is also related to having an explicit language/locale in URL (which is nevertheless a separate feature - Sylvie also note this part when merging sumo), because it should be noted that the best language feature (working in the standard way without redirecting the user to a URL with explicit lang/locale) is not compatible with external caching (a proxy might end up serving a cached a French page for someone who wants English, etc...) since the URLs are the same. If best language is to work in environments allowing external caching (for non-logged in users) it would need to be combined with an explicit redirect to lang/locale in URL. nkoth On Fri, Jan 16, 2009 at 12:21 PM, Louis-Philippe Huberdeau <lph...@dr...> wrote: > The best language flag redirects you to an equivalent page based on your > preferences. If best language is always on, you won't be able to see the > content in other languages, which is bad. Content is not always up to date. > > And no, bl cannot be part of the session because it's related to navigation. > Sorry marc. > > -- > LP > > On January 16, 2009 12:04:07 J Bradley wrote: >> Hi Sylvie (and devels) >> >> Marc asked about this the other day (if that &bl could be removed from >> the URL as it causes issues) and i meant to ask at the time why it was >> there in the first place? When would you not want the "Best" language? >> >> Shouldn't this be a user preference? Or, if you want a "worse" >> language maybe pass that as a parameter (like &lang=gb-en for instance?) >> >> Or did i miss something too? >> >> jonny B >> >> On 16 Jan 2009, at 16:25, Sylvie Greverend wrote: >> > sewilco, >> > Why do you need the rule with best language? >> > Did I miss something? >> > Thanks >> > >> > On Tue, 2009-01-13 at 00:15 +0000, se...@us... >> > >> > wrote: >> >> Revision: 16257 >> >> >> >> http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16257&view=rev Author: >> >> sewilco >> >> Date: 2009-01-13 00:15:17 +0000 (Tue, 13 Jan 2009) >> >> >> >> Log Message: >> >> ----------- >> >> [ENH] add feature_sefurl_filter for Smarty SEFURL filtering (web >> >> cache recommended). >> >> >> >> Modified Paths: >> >> -------------- >> >> trunk/_htaccess >> >> trunk/db/features.csv >> >> trunk/lib/setup/prefs.php >> >> trunk/tiki-admin_include_features.php >> >> trunk/tiki-setup.php >> >> >> >> Modified: trunk/_htaccess >> >> =================================================================== >> >> --- trunk/_htaccess 2009-01-12 22:40:55 UTC (rev 16256) >> >> +++ trunk/_htaccess 2009-01-13 00:15:17 UTC (rev 16257) >> >> @@ -18,15 +18,31 @@ >> >> <IfModule mod_rewrite.c> >> >> RewriteEngine On >> >> >> >> +# rewrite for multitiki sites, when configured as symlinks, not as >> >> apache aliases >> >> +RewriteCond %{SCRIPT_FILENAME}/ -d >> >> +RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L] >> >> + >> >> +# Skip index.php and go right to tiki-index.php >> >> +#RewriteRule ^$ tiki-index.php >> >> [L] >> >> + >> >> # direct one-word access >> >> RewriteRule ^calendar$ tiki- >> >> calendar.php [L] >> >> RewriteRule ^articles$ tiki- >> >> view_articles.php [L] >> >> RewriteRule ^blogs$ tiki- >> >> list_blogs.php [L] >> >> +# The following supports up to seven merged calendars; most to >> >> least. SEWilco 2008-07-15 >> >> +RewriteRule ^cal([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+), >> >> ([0-9]+),([0-9]+) tiki-calendar.php?calIds[]=$1&calIds[]= >> >> $2&calIds[]=$3&calIds[]=$4&calIds[]=$5&calIds[]=$6&calIds[]=$7 >> >> [QSA,L] >> >> +RewriteRule ^cal([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+), >> >> ([0-9]+) tiki-calendar.php?calIds[]=$1&calIds[]=$2&calIds[]= >> >> $3&calIds[]=$4&calIds[]=$5&calIds[]=$6 [QSA,L] >> >> +RewriteRule ^cal([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+) tiki- >> >> calendar.php?calIds[]=$1&calIds[]=$2&calIds[]=$3&calIds[]= >> >> $4&calIds[]=$5 [QSA,L] >> >> +RewriteRule ^cal([0-9]+),([0-9]+),([0-9]+),([0-9]+) tiki- >> >> calendar.php?calIds[]=$1&calIds[]=$2&calIds[]=$3&calIds[]=$4 [QSA,L] >> >> +RewriteRule ^cal([0-9]+),([0-9]+),([0-9]+) tiki-calendar.php? >> >> calIds[]=$1&calIds[]=$2&calIds[]=$3 [QSA,L] >> >> +RewriteRule ^cal([0-9]+),([0-9]+) tiki-calendar.php?calIds[]= >> >> $1&calIds[]=$2 [QSA,L] >> >> +RewriteRule ^cal([0-9]+) tiki-calendar.php?calIds[]= >> >> $1 [QSA,L] >> >> RewriteRule ^categories$ tiki- >> >> browse_categories.php [L] >> >> RewriteRule ^charts$ tiki- >> >> list_charts.php [L] >> >> RewriteRule ^chat$ tiki- >> >> chat.php [L] >> >> RewriteRule ^contact$ tiki- >> >> contact.php [L] >> >> RewriteRule ^directories$ tiki- >> >> directory_browse.php [L] >> >> +RewriteRule ^dirlink([0-9]+) tiki-directory_redirect.php? >> >> siteId=$1 [QSA,L] >> >> RewriteRule ^faqs$ tiki- >> >> list_faqs.php [L] >> >> RewriteRule ^files$ tiki- >> >> list_file_gallery.php [L] >> >> RewriteRule ^forums$ tiki- >> >> forums.php [L] >> >> @@ -52,14 +68,16 @@ >> >> RewriteRule ^cat([0-9]+) tiki-browse_categories.php? >> >> parentId=$1 [QSA,L] >> >> RewriteRule ^blog([0-9]+) tiki-view_blog.php?blogId= >> >> $1 [QSA,L] >> >> RewriteRule ^blogpost([0-9]+) tiki-view_blog_post.php?postId= >> >> $1 [QSA,L] >> >> +RewriteRule ^browseimage([0-9]+) tiki-browse_image.php?imageId= >> >> $1 [QSA,L] >> >> RewriteRule ^chart([0-9]+) tiki-view_chart.php?chartId= >> >> $1 [QSA,L] >> >> RewriteRule ^directory([0-9]+) tiki-directory_browse.php?parent= >> >> $1 [QSA,L] >> >> RewriteRule ^faq([0-9]+) tiki-view_faq.php?faqId= >> >> $1 [QSA,L] >> >> RewriteRule ^file([0-9]+) tiki-list_file_gallery.php? >> >> galleryId=$1 [QSA,L] >> >> RewriteRule ^dl([0-9]+) tiki-download_file.php?fileId= >> >> $1 [QSA,L] >> >> RewriteRule ^forum([0-9]+) tiki-view_forum.php?forumId= >> >> $1 [QSA,L] >> >> +RewriteRule ^gallery([0-9]+) tiki-browse_gallery.php? >> >> galleryId=$1 [QSA,L] >> >> RewriteRule ^image([0-9]+) show_image.php?id= >> >> $1 [QSA,L] >> >> -RewriteRule ^gallery([0-9]+) tiki-browse_gallery.php? >> >> galleryId=$1 [QSA,L] >> >> +RewriteRule ^imagescale([0-9]+)/([0-9]+) show_image.php?id= >> >> $1&scalesize=$2 [QSA,L] >> >> RewriteRule ^newsletter([0-9]+) tiki-newsletters.php?nlId= >> >> $1 [QSA,L] >> >> RewriteRule ^quiz([0-9]+) tiki-take_quiz.php?quizId= >> >> $1 [QSA,L] >> >> RewriteRule ^survey([0-9]+) tiki-take_survey.php?surveyId= >> >> $1 [QSA,L] >> >> @@ -78,8 +96,10 @@ >> >> # make sure this is the last rule! >> >> RewriteRule ^show:(~?)([-_\+A-Za-z0-9]+)$ tiki-slideshow.php?page= >> >> $1$2 [QSA,L] >> >> RewriteRule ^([^/\.]+)$ tiki-index.php?page= >> >> $1 [QSA,L] >> >> +# Following one rule added to support &bl "Best Language". SEWilco >> >> 2008-07-15 >> >> +RewriteRule ^([-_\+A-Za-z0-9]+)&bl$ tiki-index.php?page= >> >> $1&bl [QSA,L] >> >> >> >> -# how to redierct to a wiki page on a not found error: take away >> >> the comment + adapt the pagename >> >> +# how to redirect to a wiki page on a not found error: take away >> >> the comment + adapt the pagename >> >> # ErrorDocument 404 tiki-index.php?page=Page+not+found >> >> >> >> </IfModule> >> >> >> >> Modified: trunk/db/features.csv >> >> =================================================================== >> >> --- trunk/db/features.csv 2009-01-12 22:40:55 UTC (rev 16256) >> >> +++ trunk/db/features.csv 2009-01-13 00:15:17 UTC (rev 16257) >> >> @@ -952,3 +952,4 @@ >> >> 1061,Show last modification, >> >> 70,,feature_search_show_last_modification,flag,,tiki_p_admin,,,,,, >> >> 1062,Use edit plugin icons, >> >> 1025,,wiki_edit_plugin,flag,,tiki_p_admin,,,,,, >> >> 1063,Group Watches, >> >> 6,,feature_group_watches,feature,,tiki_p_admin,,,,,, >> >> +1064,Search Friendly URLs Filter, >> >> 68 >> >> ,experimental >> >> ,feature_sefurl_filter >> >> ,feature,,tiki_p_admin,,,,,,Requires .htaccess file. Filters all >> >> output; uses more CPU than non-filter version. Can be used with non- >> >> filter SEF URL. >> >> >> >> Modified: trunk/lib/setup/prefs.php >> >> =================================================================== >> >> --- trunk/lib/setup/prefs.php 2009-01-12 22:40:55 UTC (rev 16256) >> >> +++ trunk/lib/setup/prefs.php 2009-01-13 00:15:17 UTC (rev 16257) >> >> @@ -191,6 +191,7 @@ >> >> 'wikiplugin_gauge' => 'y', >> >> 'wikiplugin_group' => 'y', >> >> 'wikiplugin_iframe' => 'n', >> >> + 'wikiplugin_image' => 'y', >> >> 'wikiplugin_include' => 'y', >> >> 'wikiplugin_jabber' => 'n', >> >> 'wikiplugin_js' => 'n', >> >> @@ -1119,6 +1120,7 @@ >> >> 'wiki_3d_adjust_camera' => '', >> >> 'wiki_3d_autoload' => '', >> >> 'feature_sefurl' => 'n', >> >> + 'feature_sefurl_filter' => 'n', >> >> 'feature_mootools' => 'y', // Needed for shadowbox >> >> 'javascript_enabled' => 'n', >> >> 'feature_comments_post_as_anonymous' => 'n', >> >> >> >> Modified: trunk/tiki-admin_include_features.php >> >> =================================================================== >> >> --- trunk/tiki-admin_include_features.php 2009-01-12 22:40:55 UTC >> >> (rev 16256) >> >> +++ trunk/tiki-admin_include_features.php 2009-01-13 00:15:17 UTC >> >> (rev 16257) >> >> @@ -97,6 +97,7 @@ >> >> "feature_swffix", >> >> "layout_section", >> >> "feature_sefurl", >> >> + "feature_sefurl_filter", >> >> "feature_tikitests", >> >> "feature_magic", >> >> "feature_minichat", >> >> >> >> Modified: trunk/tiki-setup.php >> >> =================================================================== >> >> --- trunk/tiki-setup.php 2009-01-12 22:40:55 UTC (rev 16256) >> >> +++ trunk/tiki-setup.php 2009-01-13 00:15:17 UTC (rev 16257) >> >> @@ -108,6 +108,10 @@ >> >> $smarty->assign('templatename', $templatename); >> >> require_once('tiki-admin_bar.php'); >> >> } >> >> +if ( $prefs['feature_sefurl_filter'] == 'y' ) { >> >> + require_once ('tiki-sefurl.php'); >> >> + $smarty->register_outputfilter('filter_out_sefurl'); >> >> +} >> >> >> >> $smarty->assign_by_ref('phpErrors', $phpErrors); >> >> $smarty->assign_by_ref('num_queries', $num_queries); >> >> >> >> >> >> This was sent by the SourceForge.net collaborative development >> >> platform, the world's largest Open Source development site. >> >> >> >> ------------------------------------------------------------------------ >> >>------ This SF.net email is sponsored by: >> >> SourcForge Community >> >> SourceForge wants to tell your story. >> >> http://p.sf.net/sfu/sf-spreadtheword >> >> _______________________________________________ >> >> Tikiwiki-cvs mailing list >> >> Tik...@li... >> >> https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs >> > >> > ------------------------------------------------------------------------- >> >----- This SF.net email is sponsored by: >> > SourcForge Community >> > SourceForge wants to tell your story. >> > http://p.sf.net/sfu/sf-spreadtheword >> > _______________________________________________ >> > Tikiwiki-cvs mailing list >> > Tik...@li... >> > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs >> >> --------------------------------------------------------------------------- >>--- This SF.net email is sponsored by: >> SourcForge Community >> SourceForge wants to tell your story. >> http://p.sf.net/sfu/sf-spreadtheword >> _______________________________________________ >> Tikiwiki-cvs mailing list >> Tik...@li... >> https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs > > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > SourcForge Community > SourceForge wants to tell your story. > http://p.sf.net/sfu/sf-spreadtheword > _______________________________________________ > Tikiwiki-cvs mailing list > Tik...@li... > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs > |
From: Marc L. <ma...@ma...> - 2009-02-01 14:39:30
|
Hi! There are 25 (!) permissions that can be globally assigned to wiki pages. Each of these permissions was added to solve a real world problem. This is fined-grained, powerful, flexible and amazing. Now, these 25 perms are available automatically to each wiki page. Some (tiki_p_watch_structure, tiki_p_edit_structures), I question if it's even logical to show on the wiki page object permission page. Maybe they should be on the structure page and they are just here by accident because structures are so closely linked to the wiki. Now, for anybody that tried to teach users about assigning individual permissions to a wiki page has seen how difficult it is for new users. A quick fix was to restrict the possibility to assign perms for features that are off while still maintaining the possibility of deleting those assigned perms even after the feature is turned off. Now, while this helps, it's still difficult for users. In that ideal world that I dream of, it's possible to add an order to the permissions. So we could put the most important ones at the top. view, edit and history and hide stuff like tiki_p_watch_structure and tiki_p_edit_dynvar at the bottom. This doesn't have to be an admin setting. If you just tell me where to fix this in the code, I can set a better ordering. Even more wonderful would be to have basic vs advanced perms and have this configurable in the admin panel and thus, distributable as profiles. The "basicness" [ hey, I think I invented a word! :-) ] or not of perm really depends on the use case. Best regards, M ;-) On Wed, Jan 28, 2009 at 10:00 AM, Stephane Casset <se...@lo...> wrote: > Le Tue, Jan 27, 2009 at 05:17:53PM -0500, Louis-Philippe Huberdeau écrivait : >> Rolling back a 4 months old commit? I think it's a little too late. Feel free >> to fix it, but this improvement was a feature request and reducing the length >> of the permission list is very valuable to those assigning permissions on >> objects. > > Ok, maybe we can have an option/checkbox to show all the perms, which is > very usefull for admins... > What do you think ? > >> >> On January 27, 2009 15:33:07 Sylvie Greverend wrote: >> > Louis Philippe, >> > not sure it is a good idea to cache only the perms for activated >> > features >> > The cache allperms is not clean when you activate the feature >> > So for instance admin has no perms to the feature >> > I propose to rollback userslib - because it will be time consuming to >> > clear the cache each time a preferences is changed (no idea with feature >> > has an impact on perms other than doing another query) >> > >> > Rolllback or ? >> > >> > On Fri, 2008-10-10 at 20:12 +0000, lph...@us... >> > >> > wrote: >> > > Revision: 15091 >> > > >> > > http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=15091&view=rev Author: >> > > lphuberdeau >> > > Date: 2008-10-10 20:12:49 +0000 (Fri, 10 Oct 2008) >> > > >> > > Log Message: >> > > ----------- >> > > [NEW]?\194?\160Filter permissions for which underlying feature is not >> > > enabled >> > > >> > > Modified Paths: >> > > -------------- >> > > trunk/db/tiki.sql >> > > trunk/lib/userslib.php >> > > trunk/tiki-objectpermissions.php >> > > >> > > Added Paths: >> > > ----------- >> > > trunk/installer/schema/20081010_filter_perms_tiki.sql >> > > >> > > Modified: trunk/db/tiki.sql >> > > =================================================================== >> > > --- trunk/db/tiki.sql 2008-10-10 18:42:14 UTC (rev 15090) >> > > +++ trunk/db/tiki.sql 2008-10-10 20:12:49 UTC (rev 15091) >> > > @@ -2734,6 +2734,7 @@ >> > > level varchar(80) default NULL, >> > > type varchar(20) default NULL, >> > > admin varchar(1) default NULL, >> > > + feature_check VARCHAR(50) NULL, >> > > PRIMARY KEY (permName), >> > > KEY type (type) >> > > ) ENGINE=MyISAM; >> > > @@ -3005,6 +3006,33 @@ >> > > INSERT INTO users_permissions (permName, permDesc, level, type) VALUES >> > > ('tiki_p_plugin_preview', 'Can execute unapproved plugin', 'registered', >> > > 'wiki'); INSERT INTO users_permissions (permName, permDesc, level, type) >> > > VALUES ('tiki_p_plugin_approve', 'Can approve plugin execution', >> > > 'editors', 'wiki'); >> > > >> > > +UPDATE users_permissions SET feature_check = 'feature_wiki' WHERE >> > > permName IN( + 'tiki_p_admin_wiki', >> > > + 'tiki_p_assign_perm_wiki_page', >> > > + 'tiki_p_edit', >> > > + 'tiki_p_export_wiki', >> > > + 'tiki_p_lock', >> > > + 'tiki_p_minor', >> > > + 'tiki_p_remove', >> > > + 'tiki_p_rename', >> > > + 'tiki_p_rollback', >> > > + 'tiki_p_view', >> > > + 'tiki_p_view_history', >> > > + 'tiki_p_view_source' >> > > +); >> > > +UPDATE users_permissions SET feature_check = 'wiki_feature_copyrights' >> > > WHERE permName = 'tiki_p_edit_copyrights'; +UPDATE users_permissions SET >> > > feature_check = 'feature_wiki_structure' WHERE permName = >> > > 'tiki_p_edit_structures'; +UPDATE users_permissions SET feature_check = >> > > 'feature_wiki_structure' WHERE permName = 'tiki_p_watch_structure'; >> > > +UPDATE users_permissions SET feature_check = 'feature_wiki_pictures' >> > > WHERE permName = 'tiki_p_upload_picture'; +UPDATE users_permissions SET >> > > feature_check = 'feature_wiki_templates' WHERE permName = >> > > 'tiki_p_use_as_template'; +UPDATE users_permissions SET feature_check = >> > > 'feature_wiki_attachments' WHERE permName = 'tiki_p_admin_attachments'; >> > > +UPDATE users_permissions SET feature_check = 'feature_wiki_attachments' >> > > WHERE permName = 'tiki_p_attach_files'; +UPDATE users_permissions SET >> > > feature_check = 'feature_wiki_attachments' WHERE permName = >> > > 'tiki_p_wiki_view_attachments'; +UPDATE users_permissions SET >> > > feature_check = 'feature_wiki_ratings' WHERE permName = >> > > 'tiki_p_admin_ratings'; +UPDATE users_permissions SET feature_check = >> > > 'feature_wiki_ratings' WHERE permName = 'tiki_p_wiki_view_ratings'; >> > > +UPDATE users_permissions SET feature_check = 'feature_wiki_ratings' >> > > WHERE permName = 'tiki_p_wiki_vote_ratings'; +UPDATE users_permissions >> > > SET feature_check = 'feature_wiki_comments' WHERE permName = >> > > 'tiki_p_wiki_view_comments'; + >> > > DROP TABLE IF EXISTS users_usergroups; >> > > CREATE TABLE users_usergroups ( >> > > userId int(8) NOT NULL default '0', >> > > >> > > Added: trunk/installer/schema/20081010_filter_perms_tiki.sql >> > > =================================================================== >> > > --- trunk/installer/schema/20081010_filter_perms_tiki.sql >> > > (rev 0) +++ >> > > trunk/installer/schema/20081010_filter_perms_tiki.sql 2008-10-10 20:12:49 >> > > UTC (rev 15091) @@ -0,0 +1,30 @@ >> > > +# 2008-10-10 lphuberdeau >> > > +ALTER TABLE users_permissions ADD COLUMN feature_check VARCHAR(50) NULL; >> > > + >> > > +UPDATE users_permissions SET feature_check = 'feature_wiki' WHERE >> > > permName IN( + 'tiki_p_admin_wiki', >> > > + 'tiki_p_assign_perm_wiki_page', >> > > + 'tiki_p_edit', >> > > + 'tiki_p_export_wiki', >> > > + 'tiki_p_lock', >> > > + 'tiki_p_minor', >> > > + 'tiki_p_remove', >> > > + 'tiki_p_rename', >> > > + 'tiki_p_rollback', >> > > + 'tiki_p_view', >> > > + 'tiki_p_view_history', >> > > + 'tiki_p_view_source' >> > > +); >> > > +UPDATE users_permissions SET feature_check = 'wiki_feature_copyrights' >> > > WHERE permName = 'tiki_p_edit_copyrights'; +UPDATE users_permissions SET >> > > feature_check = 'feature_wiki_structure' WHERE permName = >> > > 'tiki_p_edit_structures'; +UPDATE users_permissions SET feature_check = >> > > 'feature_wiki_structure' WHERE permName = 'tiki_p_watch_structure'; >> > > +UPDATE users_permissions SET feature_check = 'feature_wiki_pictures' >> > > WHERE permName = 'tiki_p_upload_picture'; +UPDATE users_permissions SET >> > > feature_check = 'feature_wiki_templates' WHERE permName = >> > > 'tiki_p_use_as_template'; +UPDATE users_permissions SET feature_check = >> > > 'feature_wiki_attachments' WHERE permName = 'tiki_p_admin_attachments'; >> > > +UPDATE users_permissions SET feature_check = 'feature_wiki_attachments' >> > > WHERE permName = 'tiki_p_attach_files'; +UPDATE users_permissions SET >> > > feature_check = 'feature_wiki_attachments' WHERE permName = >> > > 'tiki_p_wiki_view_attachments'; +UPDATE users_permissions SET >> > > feature_check = 'feature_wiki_ratings' WHERE permName = >> > > 'tiki_p_admin_ratings'; +UPDATE users_permissions SET feature_check = >> > > 'feature_wiki_ratings' WHERE permName = 'tiki_p_wiki_view_ratings'; >> > > +UPDATE users_permissions SET feature_check = 'feature_wiki_ratings' >> > > WHERE permName = 'tiki_p_wiki_vote_ratings'; +UPDATE users_permissions >> > > SET feature_check = 'feature_wiki_comments' WHERE permName = >> > > 'tiki_p_wiki_view_comments'; + >> > > >> > > Modified: trunk/lib/userslib.php >> > > =================================================================== >> > > --- trunk/lib/userslib.php 2008-10-10 18:42:14 UTC (rev 15090) >> > > +++ trunk/lib/userslib.php 2008-10-10 20:12:49 UTC (rev 15091) >> > > @@ -1673,7 +1673,9 @@ >> > > return $utr; >> > > } >> > > >> > > - function get_permissions($offset = 0, $maxRecords = -1, $sort_mode = >> > > 'permName_asc', $find = '', $type = '', $group = '') { + function >> > > get_permissions($offset = 0, $maxRecords = -1, $sort_mode = >> > > 'permName_asc', $find = '', $type = '', $group = '', $enabledOnly = >> > > false) { + global $prefs; >> > > + >> > > $values = array(); >> > > $sort_mode = $this->convert_sortmode($sort_mode); >> > > $mid = ''; >> > > @@ -1706,6 +1708,9 @@ >> > > $ret = array(); >> > > >> > > while ($res = $result->fetchRow()) { >> > > + if( $res['feature_check'] && $prefs[ $res['feature_check'] ] != 'y' ) >> > > + continue; >> > > + >> > > $cant++; >> > > if ($group && $this->group_has_permission($group, >> > > $res['permName'])) { $res['hasPerm'] = 'y'; >> > > >> > > Modified: trunk/tiki-objectpermissions.php >> > > =================================================================== >> > > --- trunk/tiki-objectpermissions.php 2008-10-10 18:42:14 UTC (rev 15090) >> > > +++ trunk/tiki-objectpermissions.php 2008-10-10 20:12:49 UTC (rev 15091) >> > > @@ -127,7 +127,7 @@ >> > > $smarty->assign_by_ref('groups', $groups["data"]); >> > > >> > > // Get a list of permissions >> > > -$perms = $userlib->get_permissions(0, -1, 'permName_asc', '', >> > > $_REQUEST["permType"]); +$perms = $userlib->get_permissions(0, -1, >> > > 'permName_asc', '', $_REQUEST["permType"], '', true); if >> > > ($tiki_p_admin_objects != 'y') { >> > > $userPerms = array(); >> > > foreach ($perms['data'] as $perm) { >> > > >> > > > > A+ > -- > Stéphane Casset LOGIDÉE sàrl Se faire plaisir d'apprendre > 1a, rue Pasteur Tel : +33 388 23 69 77 ca...@lo... > F-67540 OSTWALD Fax : +33 388 23 69 77 http://logidee.com > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > SourcForge Community > SourceForge wants to tell your story. > http://p.sf.net/sfu/sf-spreadtheword > _______________________________________________ > Tikiwiki-cvs mailing list > Tik...@li... > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs > -- Marc Laporte http://MarcLaporte.com http://TikiWiki.org/MarcLaporte http://AvanTech.net http://OurWiki.net |
From: Jonny B. <tw...@no...> - 2009-08-18 11:03:22
|
On 18 Aug 2009, at 11:02, Sylvie Greverend wrote: > Hard to follow after one week of vacation Hi Sylvie - hope you had a good one - we've been busy again! :D > -1 for this one. What can we do if there is a lot of groups? > I prefered the tpl before at least it was working - not efficiently - > but it was working with more than 10 groups Agreed - but i still have to do a "group-picker" for this, so you can show/hide group columns easily. Then if you want to admin just one group at a time, like before, you can, but usually i guess you would pick half a dozen or so. I'm currently looking for a good (hopefully jquery ui) widget to help do this elegantly... Then i am going to change the global "tiki-assignpermissions" over to use this too (reducing code - woo!) - it's mostly done but needs a bit of fixing. One big question unanswered so far (imho) is what to do about the levels (a.k.a. 'advanced') editor on assignperms. Marc is of the view that the whole "level" concept should be replaced by profiles, because no one set of levels (some say roles) will fit each type of instal (intranet, community, publishing etc), however, now there is the "quick perms" interface this way seems to make some sense to me now (i was always confused by how some of the levels "seemed to be" groups, but not all - turns out some of them were just named the same as groups - bad move imho; -should have been: "guest, member, leader, controller" or something like that) Anyway - suggestions welcome... While on this subject; there's a strange bug on objectperms on demo.tw.o - somehow it selects and disabled columns vertically, not horizontally, but i cannot reproduce it on my servers - does anyone else get that? (it's supposed to select and disable all groups that inherit - e.g. you click registered and "editors" automatically gets selected) There will be a little gap in my work on this for a day or three while travelling - so time to discuss... jonny > On Wed, 2009-08-05 at 14:50 +0000, jon...@us... > wrote: >> Revision: 20584 >> http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=20584&view=rev >> Author: jonnybradley >> Date: 2009-08-05 14:50:01 +0000 (Wed, 05 Aug 2009) >> >> Log Message: >> ----------- >> [ENH] Object permissions admin mini-revamp >> Groups now displayed on each perm (in a grid) and set/unset by >> checking/unchecking >> Perms grouped by type with collapsible headings (using treetable) >> Filter by text in perm rows including description (using listfilter) >> >> TODO >> Figure out what to do when there are dozens of groups (probably >> using perspectives to set a new "visible groups" pref). >> Fix for when list is filtered opening a type section looses filter >> on that part. >> Maybe move descriptions to a tooltip? >> Test more! >> >> Modified Paths: >> -------------- >> trunk/lib/smarty_tiki/function.listfilter.php >> trunk/lib/smarty_tiki/function.treetable.php >> trunk/lib/userslib.php >> trunk/templates/tiki-objectpermissions.tpl >> trunk/tiki-objectpermissions.php >> >> Modified: trunk/lib/smarty_tiki/function.listfilter.php >> =================================================================== >> --- trunk/lib/smarty_tiki/function.listfilter.php 2009-08-05 >> 12:47:13 UTC (rev 20583) >> +++ trunk/lib/smarty_tiki/function.listfilter.php 2009-08-05 >> 14:50:01 UTC (rev 20584) >> @@ -17,6 +17,8 @@ >> * @maxlength max length of the input field in characters >> * @prefix prefix text to be put before the input field >> * @selectors CSS (jQuery) selector(s) for what to filter >> + * @exclude selector(s) for what to exclude from the text filter >> + * (but still hide when parent is empty) >> * >> * Mainly for treetable lists... >> * @parentSelector CSS (jQuery) selector(s) for parent nodes of >> what to filter >> @@ -65,7 +67,7 @@ >> for( i = 0; criterias.length > i; ++i ) { >> word = criterias[i]; >> if( word.length > 0 && text.indexOf( word ) == -1 ) { >> - \$jq(this).hide(); >> + \$jq(this).not('$exclude').hide(); // don't search within >> excluded elements >> return; >> } >> } >> @@ -76,8 +78,9 @@ >> $content .= " >> \$jq('$parentSelector').show().each( function() { >> var cl = '.$childPrefix' + \$jq(this).attr('id'); >> - if (\$jq(cl + ':visible').length == 0) { >> + if (\$jq(cl + ':visible:not(\"$exclude\")').length == 0) { // >> excluded things don't count >> \$jq(this).hide(); >> + \$jq(cl + '$exclude').hide(); // but need hiding if the >> parent is 'empty' >> } >> }); >> "; >> >> Modified: trunk/lib/smarty_tiki/function.treetable.php >> =================================================================== >> --- trunk/lib/smarty_tiki/function.treetable.php 2009-08-05 >> 12:47:13 UTC (rev 20583) >> +++ trunk/lib/smarty_tiki/function.treetable.php 2009-08-05 >> 14:50:01 UTC (rev 20584) >> @@ -24,24 +24,31 @@ >> * or a string like: '"permName"="Permission Name", >> "permDesc"="Description", etc' >> * if undefined it tries to guess (?) >> * >> - * _valueColumnIndex = 0 : index of the col in the array above to >> use as the unique index >> + * _valueColumnIndex = 0 : index of the col in the _data array >> above to use as the unique index >> * >> - * _sortColumn = '' : column to organise tree by (actually row key >> = e.g. 'type') >> + * _sortColumn = '' : column to organise tree by (actually row >> key = e.g. 'type') >> * >> - * _checkbox = '' : name of checkbox (auto-incrementing) - no >> checkboxes if not set >> + * _checkbox = '' : name of checkbox (auto-incrementing) - no >> checkboxes if not set >> + * if comma delimted list then makes multiple checkboxes >> * >> - * _listFilter = 'y' : include dynamic text filter >> + * _checkboxColumnIndex = 0 : index of the col in the _data array >> above to use as the checkbox value >> + * comma delimeted list (of ints) for multiple checkboxes >> as set above >> + * if set needs to match number of checkboxes defines in >> _checkbox (or if not set uses 0,1,2 etc) >> * >> - * _filterMinRows = 12 : don't show filter box if less than this >> number of rows >> + * _checkboxTitles = '' : Comma delimited list of header titles >> for checkboxes (optional, but needs to match number of checkboxes >> above) >> * >> - * class = 'treeTable' : class of the table - will add 'sortable' >> if feature_jquery_sortable = y >> - * id = 'treetable1' : id of the table (auto-incrementing) >> + * _listFilter = 'y' : include dynamic text filter >> * >> + * _filterMinRows = 12 : don't show filter box if less than this >> number of rows >> + * >> + * class = 'treeTable' : class of the table - will add 'sortable' >> if feature_jquery_sortable = y >> + * id = 'treetable1' : id of the table (auto-incrementing) >> + * >> * _rowClasses = array('odd','even') : classes to cycle through for >> rows (tr's and td's) >> * can be a string for same class on each row >> * or empty string for not >> * >> - * _emptyDataMessage = tra('No rows found') : message if there are >> no rows >> + * _emptyDataMessage = {treetable}: '.tra('No rows found') : >> message if there are no rows >> * >> */ >> >> @@ -56,11 +63,41 @@ >> >> extract($params); >> >> - $_emptyDataMessage = empty($_emptyDataMessage) ? tra('No rows >> found') : $_emptyDataMessage; >> + $_emptyDataMessage = empty($_emptyDataMessage) ? '{treetable}: >> ' . tra('No rows found') : $_emptyDataMessage; >> if (empty($_data)) { >> return $_emptyDataMessage; >> } >> >> + $_checkbox = empty($_checkbox) ? '' : $_checkbox; >> + $_checkboxTitles = empty($_checkboxTitles) ? '' : $_checkboxTitles; >> + >> + if (strpos($_checkbox, ',') !== false) { >> + $_checkbox = split(',', trim($_checkbox)); >> + if (isset($_checkboxColumnIndex)) { >> + if (strpos($_checkboxColumnIndex, ',') !== false) { >> + $_checkboxColumnIndex = split(',', trim($_checkboxColumnIndex)); >> + } >> + if (count($_checkbox) != count($_checkboxColumnIndex)) { >> + return tra('{treetable}: Number of items in >> _checkboxColumnIndex doesn not match items in _checkbox'); >> + } >> + } >> + if (!empty($_checkboxTitles)) { >> + if (strpos($_checkboxTitles, ',') !== false) { >> + $_checkboxTitles = split(',', trim($_checkboxTitles)); >> + } >> + if (count($_checkbox) != count($_checkboxTitles)) { >> + return tra('{treetable}: Number of items in _checkboxTitles >> doesn not match items in _checkbox'); >> + } >> + } >> + } >> + $_checkboxColumnIndex = empty($_checkboxColumnIndex) ? 0 : >> $_checkboxColumnIndex; >> + $_valueColumnIndex = empty($_valueColumnIndex) ? 0 : >> $_valueColumnIndex; >> + >> + if (!empty($_checkbox) && !is_array($_checkbox)) { >> + $_checkbox = array($_checkbox); >> + $_checkboxColumnIndex = array($_checkboxColumnIndex); >> + } >> + >> $html = ''; >> $nl = "\n"; >> >> @@ -106,13 +143,12 @@ >> unset($ar, $ar2); >> } >> >> - $_valueColumnIndex = empty($_valueColumnIndex) ? 0 : >> $_valueColumnIndex; >> $_sortColumn = empty($_sortColumn) ? '' : $_sortColumn; >> >> if ($_sortColumn) { >> sort2d($_data, $_sortColumn); >> $headerlib->add_jq_onready('$jq("#'. >> $id.'").treeTable({clickableNodeNames:true});'); >> - // TODO refilter when .parent is opened >> + // TODO refilter when .parent is opened - seems to prevent the >> click propagating >> // $headerlib- >> >add_jq_onready('$jq("tr.parent").click(function(event) { >> //if ($jq("#'.$id.'_filter").val()) { >> // $jq("#'.$id.'_filter").trigger("keyup"); >> @@ -133,8 +169,10 @@ >> include_once('lib/smarty_tiki/function.listfilter.php'); >> $html .= smarty_function_listfilter( >> array('id' => $id.'_filter', >> - 'selectors' => "#$id tbody tr:not(.parent)", >> - 'parentSelector' => "#$id tbody .parent"), $smarty); >> + 'selectors' => "#$id tbody tr:not(.parent)", >> + 'parentSelector' => "#$id tbody .parent", >> + 'exclude' => ".subHeader", >> + $smarty)); >> } >> >> // start writing the table >> @@ -143,10 +181,14 @@ >> // write the table header >> $html .= '<thead><tr>'; >> if (!empty($_checkbox)) { >> - $html .= '<th>'; >> include_once('lib/smarty_tiki/function.select_all.php'); >> - $html .= smarty_function_select_all(array('checkbox_names'=> >> $_checkbox.'[]'), $smarty); >> - $html .= '</th>'; >> + for ($i = 0; $i < count($_checkbox); $i++) { >> + $html .= '<th class="checkBoxHeader">'; >> + $html .= smarty_function_select_all( >> + array('checkbox_names'=>$_checkbox[$i].'[]', >> + 'label' => empty($_checkboxTitles) ? '' : >> $_checkboxTitles[$i]), $smarty); >> + $html .= '</th>'; >> + } >> } >> >> foreach ($_columns as $column => $columnName) { >> @@ -165,12 +207,29 @@ >> if ($_sortColumn) { >> $treeType = htmlentities($row[$_sortColumn]); >> $treeTypeId = preg_replace('/\s+/', '_', $treeType); >> + $childRowClass = ' child-of-'.$id.'_'.$treeTypeId; >> + >> if (!in_array($treeTypeId, $treeColumnsAdded)) { >> - $html .= '<tr id="'.$id.'_'.$treeTypeId.'"><td colspan="'. >> (count($_columns) + (!empty($_checkbox) ? 1 : 0)).'">'; >> + $html .= '<tr id="'.$id.'_'.$treeTypeId.'"><td colspan="'. >> (count($_columns) + count($_checkbox)).'">'; >> $html .= $treeType.'</td></tr>'.$nl; >> $treeColumnsAdded[] = $treeTypeId; >> + >> + // write a sub-header >> + $html .= '<tr class="subHeader'.$childRowClass.'">'; >> + if (!empty($_checkbox)) { >> + for ($i = 0; $i < count($_checkbox); $i++) { >> + $html .= '<td class="checkBoxHeader">'; >> + $html .= empty($_checkboxTitles) ? '' : $_checkboxTitles[$i]; >> + $html .= '</td>'; >> + } >> + } >> + foreach ($_columns as $column => $columnName) { >> + $html .= '<td>'; >> + $html .= htmlentities($columnName); >> + $html .= '</td>'; >> + } >> + $html .= '</tr>'.$nl; >> } >> - $childRowClass = ' child-of-'.$id.'_'.$treeTypeId; >> } else { >> $rowId = ''; >> $childRowClass = ''; >> @@ -178,21 +237,27 @@ >> >> // work out row class (odd/even etc) >> if ($rowCounter > -1) { >> - $rowClass = ' class="'.$_rowClasses[$rowCounter]. >> $childRowClass.'"'; >> + $rowClass = $_rowClasses[$rowCounter].$childRowClass; >> $rowCounter++; >> if ($rowCounter >= count($_rowClasses)) { $rowCounter = 0; } >> } else { >> - $rowClass = ' class="'.$childRowClass.'"'; >> + $rowClass = $childRowClass; >> } >> - // get row's "value" >> - $rowVal = htmlentities($row[$_valueColumnIndex]); >> >> - $html .= '<tr'.$rowClass.'>'; >> + $html .= '<tr class="'.$rowClass.'">'; >> // add the checkbox >> if (!empty($_checkbox)) { >> - $html .= '<td'.$rowClass.'>'; >> - $html .= '<input type="checkbox" name="'.$_checkbox.'[]" >> value="'.$rowVal.'" title="'.$rowVal.'"/>'; >> - $html .= '</td>'; >> + for ($i = 0; $i < count($_checkbox); $i++) { >> + // get checkbox's "value" >> + $cbxVal = htmlentities($row[$_checkboxColumnIndex[$i]]); >> + $rowVal = htmlentities($row[$_valueColumnIndex]); >> + $html .= '<td class="checkBoxCell">'; >> + $html .= '<input type="checkbox" name="'.$_checkbox[$i].'[]" >> value="'.$rowVal.'"'.($cbxVal=='y' ? ' checked=checked' : '').' >> title="'.$_checkbox[$i].'" />'; >> + if ($cbxVal == 'y') { >> + $html .= '<input type="hidden" name="old_'. >> $_checkbox[$i].'[]" value="'.$rowVal.'" />'; >> + } >> + $html .= '</td>'; >> + } >> } >> >> foreach ($_columns as $column => $columnName) { >> >> Modified: trunk/lib/userslib.php >> =================================================================== >> --- trunk/lib/userslib.php 2009-08-05 12:47:13 UTC (rev 20583) >> +++ trunk/lib/userslib.php 2009-08-05 14:50:01 UTC (rev 20584) >> @@ -1862,7 +1862,7 @@ >> return $utr; >> } >> >> - function get_permissions($offset = 0, $maxRecords = -1, >> $sort_mode = 'permName_asc', $find = '', $type = '', $group = '', >> $enabledOnly = false) { >> + function get_permissions($offset = 0, $maxRecords = -1, >> $sort_mode = 'permName_asc', $find = '', $type = '', $group = '', >> $enabledOnly = false) { // TODO enabledOnly doesn't seem to do >> anything - KIL? >> global $prefs; >> >> $values = array(); >> @@ -1898,10 +1898,26 @@ >> continue; >> >> $cant++; >> - if ($group && $this->group_has_permission($group, >> $res['permName'])) { >> - $res['hasPerm'] = 'y'; >> - } else { >> - $res['hasPerm'] = 'n'; >> + if ($group) { >> + if (is_string($group)) { >> + if ($this->group_has_permission($group, $res['permName'])) { >> + $res['hasPerm'] = 'y'; >> + $res[count($res)/2] = 'y'; // keep indexed key too >> + } else { >> + $res['hasPerm'] = 'n'; >> + $res[count($res)/2] = 'n'; >> + } >> + } else if (is_array($group)) { >> + foreach( $group as $groupName) { >> + if ($this->group_has_permission($groupName, >> $res['permName'])) { >> + $res[$groupName.'_hasPerm'] = 'y'; >> + $res[count($res)/2] = 'y'; >> + } else { >> + $res[$groupName.'_hasPerm'] = 'n'; >> + $res[count($res)/2] = 'n'; >> + } >> + } >> + } >> } >> >> $ret[] = $res; >> >> Modified: trunk/templates/tiki-objectpermissions.tpl >> =================================================================== >> --- trunk/templates/tiki-objectpermissions.tpl 2009-08-05 12:47:13 >> UTC (rev 20583) >> +++ trunk/templates/tiki-objectpermissions.tpl 2009-08-05 14:50:01 >> UTC (rev 20584) >> @@ -22,58 +22,66 @@ >> >> <h2>{tr}Current permissions for this object{/tr}</h2> >> >> - <table class="normal"> >> - <tr> >> - <th> >> + <form method="post" action="tiki-objectpermissions.php"> >> + <input type="hidden" name="referer" value="{$referer|escape}" /> >> + <input type="hidden" name="objectName" value="{$objectName| >> escape}" /> >> + <input type="hidden" name="objectType" value="{$objectType| >> escape}" /> >> + <input type="hidden" name="objectId" value="{$objectId|escape}" /> >> + <input type="hidden" name="permType" value="{$permType|escape}" /> >> + <table class="normal"> >> + <tr> >> + <th> >> + {if $page_perms} >> + {select_all checkbox_names='checked[]'} >> + {/if} >> + </th> >> + <th>{tr}Permissions{/tr}</th> >> + <th>{tr}Groups{/tr}</th> >> + <th style="width: 20px">{tr}Action{/tr}</th> >> + </tr> >> + >> + {cycle values="odd,even" print=false} >> + {section name=pg loop=$page_perms} >> + <tr> >> + <td class="{cycle advance=false}"> >> + <input type="checkbox" name="checked[]" >> value="{$page_perms[pg].permName|cat:' '|cat: >> $page_perms[pg].groupName|escape}" /> >> + </td> >> + <td class="{cycle advance=false}"> >> + {$page_perms[pg].permName|escape}<br /><em>{tr} >> {$page_perms[pg].permDesc|escape}{/tr}</em> >> + </td> >> + <td class="{cycle advance=false}"> >> + {if $page_perms[pg].groupName eq >> $prefs.trackerCreatorGroupName}<i>{tr}Creator Group{/tr}</i>{else} >> {$page_perms[pg].groupName|escape}{/if} >> + </td> >> + <td class="{cycle advance=true}"> >> + <a class="link" href="tiki-objectpermissions.php? >> referer={$referer| >> escape >> :"url >> "}& >> ;action >> = >> remove >> & >> ;objectName >> = >> {$ >> objectName >> }& >> ;objectId >> = >> {$ >> objectId >> }& >> ;objectType >> = >> {$ >> objectType >> }& >> ;permType >> = >> {$ >> permType >> }& >> ;perm >> ={$page_perms[pg].permName}&group={$page_perms[pg].groupName} >> {if ! >> empty($filegals_manager)}&filegals_manager={$filegals_manager| >> escape}{/if}" title="{tr}Delete{/tr}">{icon _id='cross' >> alt="{tr}Delete{/tr}"}</a> >> + </td> >> + </tr> >> + {sectionelse} >> + <tr> >> + <td colspan="4" class="odd"> >> + {if !empty($categ_perms)}<strong>{tr}No individual >> permissions but category permissions apply{/tr}</strong> >> + {else}{tr}There are no individual permissions and no category >> permissions applied{/tr} >> + {/if} >> + </td> >> + </tr> >> + {/section} >> + </table> >> + >> {if $page_perms} >> - {select_all checkbox_names='checked[]'} >> - {/if} >> - </th> >> - <th>{tr}Permissions{/tr}</th> >> - <th>{tr}Groups{/tr}</th> >> - <th style="width: 20px">{tr}Action{/tr}</th> >> - </tr> >> - >> - {cycle values="odd,even" print=false} >> - {section name=pg loop=$page_perms} >> - <tr> >> - <td class="{cycle advance=false}"> >> - <input type="checkbox" name="checked[]" >> value="{$page_perms[pg].permName|cat:' '|cat: >> $page_perms[pg].groupName|escape}" /> >> - </td> >> - <td class="{cycle advance=false}"> >> - {$page_perms[pg].permName|escape}<br /><em>{tr} >> {$page_perms[pg].permDesc|escape}{/tr}</em> >> - </td> >> - <td class="{cycle advance=false}"> >> - {if $page_perms[pg].groupName eq >> $prefs.trackerCreatorGroupName}<i>{tr}Creator Group{/tr}</i>{else} >> {$page_perms[pg].groupName|escape}{/if} >> - </td> >> - <td class="{cycle advance=true}"> >> - <a class="link" href="tiki-objectpermissions.php? >> referer={$referer| >> escape >> :"url >> "}& >> ;action >> = >> remove >> & >> ;objectName >> = >> {$ >> objectName >> }& >> ;objectId >> = >> {$ >> objectId >> }& >> ;objectType >> = >> {$ >> objectType >> }& >> ;permType >> = >> {$ >> permType >> }& >> ;perm >> ={$page_perms[pg].permName}&group={$page_perms[pg].groupName} >> {if ! >> empty($filegals_manager)}&filegals_manager={$filegals_manager| >> escape}{/if}" title="{tr}Delete{/tr}">{icon _id='cross' >> alt="{tr}Delete{/tr}"}</a> >> - </td> >> - </tr> >> - {sectionelse} >> - <tr> >> - <td colspan="4" class="odd"> >> - {if !empty($categ_perms)}<strong>{tr}No individual permissions >> but category permissions apply{/tr}</strong> >> - {else}{tr}There are no individual permissions and no category >> permissions applied{/tr} >> + <div> >> + {tr}Perform action with checked:{/tr} >> + <input type="image" name="delsel" src='pics/icons/cross.png' >> alt='{tr}Delete{/tr}' title='{tr}Delete{/tr}' /> >> + {if isset($inStructure)} >> + {tr}and also to all pages of the sub-structure:{/tr} >> + <input name="removestructure" type="checkbox" /> >> {/if} >> - </td> >> - </tr> >> - {/section} >> - </table> >> - >> - {if $page_perms} >> - <div> >> - {tr}Perform action with checked:{/tr} >> - <input type="image" name="delsel" src='pics/icons/cross.png' >> alt='{tr}Delete{/tr}' title='{tr}Delete{/tr}' /> >> - {if isset($inStructure)} >> - {tr}and also to all pages of the sub-structure:{/tr} <input >> name="removestructure" type="checkbox" /> >> - {/if} >> - </div> >> + </div> >> {/if} >> + </form> >> >> - {if isset($commentCreatorGroup) && $commentCreatorGroup eq 'y'} >> - {remarksbox type="warning" title="{tr}Warning{/tr}"}{tr}Creator >> group perms apply only if no tiki_p_view_trackers{/tr}{/remarksbox} >> - {/if} >> + {if isset($commentCreatorGroup) && $commentCreatorGroup eq 'y'} >> + {remarksbox type="warning" title="{tr}Warning{/tr}"}{tr}Creator >> group perms apply only if no tiki_p_view_trackers{/tr}{/remarksbox} >> + {/if} >> >> <hr /> >> >> @@ -90,7 +98,7 @@ >> {cycle print=false values="even,odd"} >> {section name=x loop=$categ_perms} >> {section name=y loop=$categ_perms[x]} >> - <tr class="{cycle advance=true}">qwerty >> + <tr class="{cycle advance=true}"> >> <td class="{cycle advance=false}">{$categ_perms[x][y].permName| >> escape}<br />{if isset($categ_perms[x] >> [y].permDesc)}<i>{$categ_perms[x][y].permDesc}</i>{/if}</td> >> <td class="{cycle advance=false}">{$categ_perms[x][y].groupName| >> escape}</td> >> <td class="{cycle advance=false}">{$categ_perms[x][0].catpath}</ >> td> >> @@ -111,9 +119,15 @@ >> {/if} >> <form method="post" action="tiki-objectpermissions.php{if ! >> empty($filegals_manager)}?filegals_manager={$filegals_manager| >> escape}{/if}"> >> {if empty($filegals_manager)} >> - {remarksbox type="warning" title="{tr}Warning{/tr}"}{tr}These >> permissions override any global permissions or category permissions >> affecting this object.{/tr}<br /> >> - {if $tiki_p_admin eq 'y'}{tr}To edit global permissions <a >> class="rbox-link" href="tiki-admingroups.php">click here</a>.{/tr}{/ >> if} >> - {/remarksbox} >> + {if !empty($page_perms) or !empty($categ_perms)} >> + {remarksbox type="warning" title="{tr}Warning{/tr}"}{tr}These >> permissions override any global permissions or category permissions >> affecting this object.{/tr}<br /> >> + {if $tiki_p_admin eq 'y'}{tr}To edit global permissions <a >> class="rbox-link" href="tiki-admingroups.php">click here</a>.{/tr}{/ >> if} >> + {/remarksbox} >> + {else} >> + {remarksbox type="note" title="{tr}Note{/tr}"} >> + {tr}No permissions yet applied to this object. Global >> permissions currently set below.{/tr} >> + {/remarksbox} >> + {/if} >> {/if} >> >> <hr /> >> @@ -129,23 +143,10 @@ >> <div class="input_submit_container" style="text-align: center"> >> <input type="submit" name="assign" value="{tr}Assign{/tr}" /> >> </div> >> - >> - <h3>{tr}Groups{/tr}</h3> >> - >> - {treetable _data=$groups _columns='"groupName"="Group Name", >> "groupDesc"="Description"' _checkbox='group' _valueColumnIndex=1} >> - >> - {if isset($group_tracker) and $group_tracker eq 'y'} >> - <hr class="{cycle advance=true}" /> >> >> - <div class="{cycle advance=true}"> >> - <input type="checkbox" name="group[]" >> value="{$prefs.trackerCreatorGroupName}"{if isset($groupName) and >> $grouName eq $prefs.trackerCreatorGroupName} checked="checked"{/ >> if} /> <em>{tr}Creator Group{/tr}</em></div> >> - </div> >> - {/if} >> - >> - <h3>{tr}Permissions{/tr}</h3> >> - >> - {treetable _data=$perms _columns='"permName"="Permission >> Name", "permDesc"="Description"' _sortColumn='type' _checkbox='perm'} >> - >> + <h3>{tr}Permissions{/tr}</h3> >> + {treetable _data=$perms _checkbox=$permGroups _checkboxTitles= >> $groupNames _checkboxColumnIndex=$permGroupCols >> _columns='"permName"="Permission Name", "permDesc"="Description"' >> _sortColumn='type'} >> + >> <div class="input_submit_container" style="text-align: center"> >> <input type="submit" name="assign" value="{tr}Assign{/tr}" /> >> </div> >> >> Modified: trunk/tiki-objectpermissions.php >> =================================================================== >> --- trunk/tiki-objectpermissions.php 2009-08-05 12:47:13 UTC (rev >> 20583) >> +++ trunk/tiki-objectpermissions.php 2009-08-05 14:50:01 UTC (rev >> 20584) >> @@ -17,6 +17,7 @@ >> 'objectType', >> 'permType', >> 'objectId', >> + 'filegals_manager', >> ); >> $perm = 'tiki_p_assign_perm_' . str_replace(' ', '_', >> $_REQUEST['objectType']); >> if ($_REQUEST['objectType'] == 'wiki page') { >> @@ -165,30 +166,48 @@ >> //Quickperm END >> >> // Process the form to assign a new permission to this page >> -elseif (isset($_REQUEST['assign']) && isset($_REQUEST['group']) && >> isset($_REQUEST['perm'])) { >> +elseif (isset($_REQUEST['assign'])) { >> check_ticket('object-perms'); >> - foreach($_REQUEST['perm'] as $perm) { >> - if ($tiki_p_admin_objects != 'y' && !$userlib- >> >user_has_permission($user, $perm)) { >> - $smarty->assign('errortype', 401); >> - $smarty->assign('msg', tra('Permission denied')); >> - $smarty->display('error.tpl'); >> - die; >> + foreach($_REQUEST['perm'] as $group => $perms) { >> + foreach($perms as $perm) { >> + if ($tiki_p_admin_objects != 'y' && !$userlib- >> >user_has_permission($user, $perm)) { >> + $smarty->assign('errortype', 401); >> + $smarty->assign('msg', tra('Permission denied')); >> + $smarty->display('error.tpl'); >> + die; >> + } >> } >> } >> if (!empty($_REQUEST['assignstructure']) && >> $_REQUEST['assignstructure'] == 'on' && !empty($pageInfoTree)) { >> foreach($pageInfoTree as $subPage) { >> - foreach($_REQUEST['perm'] as $perm) { >> - foreach($_REQUEST['group'] as $group) { >> + foreach($_REQUEST['perm'] as $group => $perms) { >> + foreach($perms as $perm) { >> $userlib->assign_object_permission($group, >> $subPage["pageName"], 'wiki page', $perm); >> } >> } >> } >> } else { >> - foreach($_REQUEST['perm'] as $perm) { >> - foreach($_REQUEST['group'] as $group) { >> + // set new perms >> + foreach($_REQUEST['perm'] as $group => $perms) { >> + foreach($perms as $perm) { >> $userlib->assign_object_permission($group, >> $_REQUEST["objectId"], $_REQUEST["objectType"], $perm); >> } >> } >> + // remove unchecked ones >> + foreach($_REQUEST['old_perm'] as $group => $perms) { >> + foreach($perms as $perm) { >> + $stillChecked = false; >> + foreach ($_REQUEST['perm'][$group] as $new_perm) { >> + if ($new_perm == $perm) { // still checked >> + $stillChecked = true; >> + continue; >> + } >> + } >> + if (!$stillChecked) { >> + $userlib->remove_object_permission($group, >> $_REQUEST["objectId"], $_REQUEST["objectType"], $perm); >> + } >> + } >> + } >> } >> $smarty->assign('groupName', $_REQUEST["group"]); >> } >> @@ -247,22 +266,39 @@ >> //Quickperm END >> >> $smarty->assign_by_ref('groups', $groups["data"]); >> + >> +// get groupNames etc >> +$permGroups = array(); >> +$groupNames = array(); >> +$groupIndices = array(); >> +$groupIndex = 6; // yuk! >> +foreach($groups['data'] as $row) { >> + $groupNames[] = $row['groupName']; >> + $permGroups[] = 'perm['.$row['groupName'].']'; >> + $groupIndices[] = $groupIndex; >> + $groupIndex++; >> +} >> + >> // Get a list of permissions >> -$perms = $userlib->get_permissions(0, -1, 'permName_asc', '', >> $_REQUEST["permType"], '', true); >> +$perms = $userlib->get_permissions(0, -1, 'permName_asc', '', >> $_REQUEST["permType"], $groupNames, true); // TODO enabledOnly >> doesn't seem to do anything - KIL >> +$perms = $perms['data']; >> >> +$smarty->assign('permGroups', implode(',', $permGroups)); >> +$smarty->assign('permGroupCols', $groupIndices); >> +$smarty->assign('groupNames', implode(',', $groupNames)); >> + >> if ($tiki_p_admin_objects != 'y') { >> $userPerms = array(); >> - foreach($perms['data'] as $perm) { >> + foreach($perms as $perm) { >> if ($userlib->user_has_permission($user, $perm['permName'])) { >> $userPerms[] = $perm; >> } >> } >> - $smarty->assign_by_ref('perms', $userPerms); >> -} else { >> - $smarty->assign_by_ref('perms', $perms['data']); >> + $perms = $userPerms; >> } >> + >> foreach($page_perms as $i => $pp) { >> - foreach($perms['data'] as $p) { >> + foreach($perms as $p) { >> if ($pp['permName'] == $p['permName']) { >> $page_perms[$i]['permDesc'] = $p['permDesc']; >> break; >> @@ -276,7 +312,7 @@ >> // Get the permissions of the categories that this object belongs >> to, >> $categ_perms = array(); >> $parents = $categlib- >> >get_object_categories($_REQUEST['objectType'], >> $_REQUEST['objectId']); >> - $perms_categ = $userlib->get_permissions(0, -1, 'permName_asc', >> '', 'category'); >> + $perms_categ = $userlib->get_permissions(0, -1, 'permName_asc', >> '', 'category', $groupNames); >> foreach($parents as $categId) { >> if ($userlib->object_has_one_permission($categId, 'category')) { >> $categ_perm = $userlib->get_object_permissions($categId, >> 'category'); >> @@ -308,6 +344,25 @@ >> } >> $smarty->assign_by_ref('categ_perms', $categ_perms); >> } >> +// blend the perms from object onto the big perm list >> + >> +foreach ($page_perms as $page_perm) { >> + foreach ($perms as &$perm) { >> + if ($perm['permName'] == $page_perm['permName']) { >> + break; >> + } >> + } >> + for( $i = 0; $i < count($groupNames); $i++) { >> + if ($page_perm['groupName'] == $groupNames[$i]) { >> + $perm[$groupNames[$i] . '_hasPerm'] = 'y'; >> + $perm[$groupIndices[$i]] = 'y'; >> + } >> + } >> +} >> + >> + >> +$smarty->assign_by_ref('perms', $perms); >> + >> ask_ticket('object-perms'); >> // Display the template >> $smarty->assign('mid', 'tiki-objectpermissions.tpl'); >> >> >> This was sent by the SourceForge.net collaborative development >> platform, the world's largest Open Source development site. >> >> ------------------------------------------------------------------------------ >> Let Crystal Reports handle the reporting - Free Crystal Reports >> 2008 30-Day >> trial. Simplify your report design, integration and deployment - >> and focus on >> what you do best, core application coding. Discover what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> _______________________________________________ >> Tikiwiki-cvs mailing list >> Tik...@li... >> https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 > 30-Day > trial. Simplify your report design, integration and deployment - and > focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Tikiwiki-cvs mailing list > Tik...@li... > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs |
From: Marc L. <ma...@ma...> - 2010-07-31 20:20:33
|
Hi! Let's move the discussion here: http://dev.tikiwiki.org/Share Thanks! On Fri, Jul 30, 2010 at 6:09 PM, Marc Laporte <ma...@ma...> wrote: > So let's remove it then and all focus on the new tiki-share.php > (assuminbg it's renamed from tiki-promote.php) by cdrwhite :-) > > >>> >>> I think Alert should also be merged. >>> http://doc.tikiwiki.org/Alert >> Not sure about this one - and it is so badly implement (redundancy) >>> > -- Marc Laporte http://MarcLaporte.com http://TikiWiki.org/MarcLaporte http://AvanTech.net http://OurWiki.net |
From: Marc L. <ma...@ma...> - 2010-09-08 11:01:20
|
Hi! Some prefs need a cache clearing to take effect. log_tpl comes to mind but there are surely others. This causes support issues because the admin changed something but it doesn't take effect. How could we have something like clearcache=y in lib/prefs/* Thanks! On 2010-09-08 6:21 AM, <jon...@us...> wrote: Revision: 29017 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=29017&view=rev Author: jonnybradley Date: 2010-09-08 10:20:19 +0000 (Wed, 08 Sep 2010) Log Message: ----------- [REF] cachelib: Move cache emptying logic from admin system into $cachelib->empty_cache(). Also rename the mysterious "du" function to count_cache_files as that's what it does (and improve file counting). Modified Paths: -------------- trunk/lib/cache/cachelib.php trunk/tiki-admin_system.php Modified: trunk/lib/cache/cachelib.php =================================================================== --- trunk/lib/cache/cachelib.php 2010-09-08 05:40:50 UTC (rev 29016) +++ trunk/lib/cache/cachelib.php 2010-09-08 10:20:19 UTC (rev 29017) @@ -64,20 +64,74 @@ $logslib->add_log('system','erased full cache'); } } + + /** + * Empty one or more caches + * + * @param mixed $dir_names all|templates_c|temp_cache|temp_public|modules_cache|prefs (default all) + * @param string $log_section Type of log message. Default 'system' + */ + function empty_cache( $dir_names = array('all'), $log_section = 'system' ) { + global $tikidomain, $logslib, $tikilib; + + if (!is_array($dir_names)) { + $dir_names = array($dir_names); + } + if (in_array( 'all', $dir_names )) { + $this->erase_dir_content("templates_c/$tikidomain"); + $this->erase_dir_content("temp/public/$tikidomain"); + $this->erase_dir_content("temp/cache/$tikidomain"); + $this->erase_dir_content("modules/cache/$tikidomain"); + $this->flush_opcode_cache(); + $tikilib->set_lastUpdatePrefs(); + $logslib->add_log( $log_section, 'erased all cache content'); + } + if (in_array( 'templates_c', $dir_names )) { + $this->erase_dir_content("templates_c/$tikidomain"); + $this->flush_opcode_cache(); + $logslib->add_log( $log_section, 'erased templates_c content' ); + } + if (in_array( 'temp_cache', $dir_names)) { + $this->erase_dir_content("temp/cache/$tikidomain"); + $logslib->add_log( $log_section, 'erased temp/cache content' ); + } + if (in_array( 'temp_public', $dir_names)) { + $this->erase_dir_content("temp/public/$tikidomain"); + $logslib->add_log( $log_section, 'erased temp/public content' ); + } + if (in_array( 'modules_cache', $dir_names)) { + $this->erase_dir_content("modules/cache/$tikidomain"); + $logslib->add_log( $log_section, 'erased modules/cache content' ); + } + if (in_array( 'prefs', $dir_names)) { + $tikilib->set_lastUpdatePrefs(); + } + } function empty_type_cache($type) { return $this->implementation->empty_type_cache( $type ); } - function du($path, $begin=null) { + function count_cache_files($path, $begin=null) { + global $tikidomain; + if (!$path or !is_dir($path)) return (array('total' => 0,'cant' =>0)); $total = 0; $cant = 0; $back = array(); $all = opendir($path); + + // If using multiple Tikis but flushing cache on default install... + if (empty($tikidomain) && is_file('db/virtuals.inc')) { + $virtuals = array_map('trim', file('db/virtuals.inc')); + } else { + $virtuals = false; + } + while ($file = readdir($all)) { + if (substr($file,0,1) == "." or $file == 'CVS' or $file == '.svn' or $file == "index.php" or $file == "README" or $file == "web.config" or ($virtuals && in_array($file, $virtuals)) ) continue; if (is_dir($path.'/'.$file) and $file <> ".." and $file <> "." and $file <> "CVS" and $file <> ".svn" ) { - $du = $this->du($path.'/'.$file); + $du = $this->count_cache_files($path.'/'.$file); $total+= $du['total']; $cant+= $du['cant']; unset($file); Modified: trunk/tiki-admin_system.php =================================================================== --- trunk/tiki-admin_system.php 2010-09-08 05:40:50 UTC (rev 29016) +++ trunk/tiki-admin_system.php 2010-09-08 10:20:19 UTC (rev 29017) @@ -14,30 +14,7 @@ global $cachelib; include_once ('lib/cache/cachelib.php'); if (isset($_GET['do'])) { - if ($_GET['do'] == 'all') { - $cachelib->erase_dir_content("templates_c/$tikidomain"); - $cachelib->erase_dir_content("temp/public/$tikidomain"); - $cachelib->erase_dir_content("temp/cache/$tikidomain"); - $cachelib->erase_dir_content("modules/cache/$tikidomain"); - $cachelib->flush_opcode_cache(); - $tikilib->set_lastUpdatePrefs(); - $logslib->add_log('system', 'erased all Tiki cache content'); - } elseif ($_GET['do'] == 'templates_c') { - $cachelib->erase_dir_content("templates_c/$tikidomain"); - $cachelib->flush_opcode_cache(); - $logslib->add_log('system', 'erased templates_c content'); - } elseif ($_GET['do'] == 'temp_cache') { - $cachelib->erase_dir_content("temp/cache/$tikidomain"); - $logslib->add_log('system', 'erased temp/cache content'); - } elseif ($_GET['do'] == 'temp_public') { - $cachelib->erase_dir_content("temp/public/$tikidomain"); - $logslib->add_log('system', 'erased temp/public content'); - } elseif ($_GET['do'] == 'modules_cache') { - $cachelib->erase_dir_content("modules/cache/$tikidomain"); - $logslib->add_log('system', 'erased modules/cache content'); - } elseif ($_GET['do'] == 'prefs') { - $tikilib->set_lastUpdatePrefs(); - } + $cachelib->empty_cache($_GET['do']); } if (isset($_GET['compiletemplates'])) { $ctempl = 'templates'; @@ -50,20 +27,20 @@ } $languages = array(); $languages = $tikilib->list_languages(); -$templates_c = $cachelib->du("templates_c/$tikidomain"); +$templates_c = $cachelib->count_cache_files("templates_c/$tikidomain"); $smarty->assign('templates_c', $templates_c); -$tempcache = $cachelib->du("temp/cache/$tikidomain"); +$tempcache = $cachelib->count_cache_files("temp/cache/$tikidomain"); $smarty->assign('tempcache', $tempcache); -$temppublic = $cachelib->du("temp/public/$tikidomain"); +$temppublic = $cachelib->count_cache_files("temp/public/$tikidomain"); $smarty->assign('temppublic', $temppublic); -$modules = $cachelib->du("modules/cache/$tikidomain"); +$modules = $cachelib->count_cache_files("modules/cache/$tikidomain"); $smarty->assign('modules', $modules); $templates = array(); foreach($languages as $clang) { if ($smarty->use_sub_dirs) { // was if(is_dir("templates_c/$tikidomain/")) ppl with tikidomains should test. redflo - $templates[$clang["value"]] = $cachelib->du("templates_c/$tikidomain/" . $clang["value"] . "/"); + $templates[$clang["value"]] = $cachelib->count_cache_files("templates_c/$tikidomain/" . $clang["value"] . "/"); } else { - $templates[$clang["value"]] = $cachelib->du("templates_c/", $tikidomain . $clang["value"]); + $templates[$clang["value"]] = $cachelib->count_cache_files("templates_c/", $tikidomain . $clang["value"]); } } $smarty->assign_by_ref('templates', $templates); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ This SF.net Dev2Dev email is sponsored by: Show off your parallel programming skills. Enter the Intel(R) Threading Challenge 2010. http://p.sf.net/sfu/intel-thread-sfd _______________________________________________ Tikiwiki-cvs mailing list Tik...@li... https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs |
From: Jonny B. <Jo...@ti...> - 2010-09-08 11:26:43
|
On 8 Sep 2010, at 12:01, Marc Laporte wrote: > Hi! > > Some prefs need a cache clearing to take effect. > > log_tpl comes to mind but there are surely others. > > This causes support issues because the admin changed something but it doesn't take effect. > > How could we have something like clearcache=y in lib/prefs/* > > Thanks! Better would be clearcache=all or clearcache=temp_cache,prefs etc for finer tuning (the main thing with minify on is to avoid clearing the public cache). Also, many features need the admin page to be reloaded, for instance turning ajax off is always messy. Maybe we just reload always in admin? jb >> On 2010-09-08 6:21 AM, <jon...@us...> wrote: >> >> Revision: 29017 >> http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=29017&view=rev >> Author: jonnybradley >> Date: 2010-09-08 10:20:19 +0000 (Wed, 08 Sep 2010) >> >> Log Message: >> ----------- >> [REF] cachelib: Move cache emptying logic from admin system into $cachelib->empty_cache(). Also rename the mysterious "du" function to count_cache_files as that's what it does (and improve file counting). >> >> Modified Paths: >> -------------- >> trunk/lib/cache/cachelib.php >> trunk/tiki-admin_system.php >> >> Modified: trunk/lib/cache/cachelib.php >> =================================================================== >> --- trunk/lib/cache/cachelib.php 2010-09-08 05:40:50 UTC (rev 29016) >> +++ trunk/lib/cache/cachelib.php 2010-09-08 10:20:19 UTC (rev 29017) >> @@ -64,20 +64,74 @@ >> $logslib->add_log('system','erased full cache'); >> } >> } >> + >> + /** >> + * Empty one or more caches >> + * >> + * @param mixed $dir_names all|templates_c|temp_cache|temp_public|modules_cache|prefs (default all) >> + * @param string $log_section Type of log message. Default 'system' >> + */ >> + function empty_cache( $dir_names = array('all'), $log_section = 'system' ) { >> + global $tikidomain, $logslib, $tikilib; >> + >> + if (!is_array($dir_names)) { >> + $dir_names = array($dir_names); >> + } >> + if (in_array( 'all', $dir_names )) { >> + $this->erase_dir_content("templates_c/$tikidomain"); >> + $this->erase_dir_content("temp/public/$tikidomain"); >> + $this->erase_dir_content("temp/cache/$tikidomain"); >> + $this->erase_dir_content("modules/cache/$tikidomain"); >> + $this->flush_opcode_cache(); >> + $tikilib->set_lastUpdatePrefs(); >> + $logslib->add_log( $log_section, 'erased all cache content'); >> + } >> + if (in_array( 'templates_c', $dir_names )) { >> + $this->erase_dir_content("templates_c/$tikidomain"); >> + $this->flush_opcode_cache(); >> + $logslib->add_log( $log_section, 'erased templates_c content' ); >> + } >> + if (in_array( 'temp_cache', $dir_names)) { >> + $this->erase_dir_content("temp/cache/$tikidomain"); >> + $logslib->add_log( $log_section, 'erased temp/cache content' ); >> + } >> + if (in_array( 'temp_public', $dir_names)) { >> + $this->erase_dir_content("temp/public/$tikidomain"); >> + $logslib->add_log( $log_section, 'erased temp/public content' ); >> + } >> + if (in_array( 'modules_cache', $dir_names)) { >> + $this->erase_dir_content("modules/cache/$tikidomain"); >> + $logslib->add_log( $log_section, 'erased modules/cache content' ); >> + } >> + if (in_array( 'prefs', $dir_names)) { >> + $tikilib->set_lastUpdatePrefs(); >> + } >> + } >> >> function empty_type_cache($type) { >> return $this->implementation->empty_type_cache( $type ); >> } >> >> - function du($path, $begin=null) { >> + function count_cache_files($path, $begin=null) { >> + global $tikidomain; >> + >> if (!$path or !is_dir($path)) return (array('total' => 0,'cant' =>0)); >> $total = 0; >> $cant = 0; >> $back = array(); >> $all = opendir($path); >> + >> + // If using multiple Tikis but flushing cache on default install... >> + if (empty($tikidomain) && is_file('db/virtuals.inc')) { >> + $virtuals = array_map('trim', file('db/virtuals.inc')); >> + } else { >> + $virtuals = false; >> + } >> + >> while ($file = readdir($all)) { >> + if (substr($file,0,1) == "." or $file == 'CVS' or $file == '.svn' or $file == "index.php" or $file == "README" or $file == "web.config" or ($virtuals && in_array($file, $virtuals)) ) continue; >> if (is_dir($path.'/'.$file) and $file <> ".." and $file <> "." and $file <> "CVS" and $file <> ".svn" ) { >> - $du = $this->du($path.'/'.$file); >> + $du = $this->count_cache_files($path.'/'.$file); >> $total+= $du['total']; >> $cant+= $du['cant']; >> unset($file); >> >> Modified: trunk/tiki-admin_system.php >> =================================================================== >> --- trunk/tiki-admin_system.php 2010-09-08 05:40:50 UTC (rev 29016) >> +++ trunk/tiki-admin_system.php 2010-09-08 10:20:19 UTC (rev 29017) >> @@ -14,30 +14,7 @@ >> global $cachelib; >> include_once ('lib/cache/cachelib.php'); >> if (isset($_GET['do'])) { >> - if ($_GET['do'] == 'all') { >> - $cachelib->erase_dir_content("templates_c/$tikidomain"); >> - $cachelib->erase_dir_content("temp/public/$tikidomain"); >> - $cachelib->erase_dir_content("temp/cache/$tikidomain"); >> - $cachelib->erase_dir_content("modules/cache/$tikidomain"); >> - $cachelib->flush_opcode_cache(); >> - $tikilib->set_lastUpdatePrefs(); >> - $logslib->add_log('system', 'erased all Tiki cache content'); >> - } elseif ($_GET['do'] == 'templates_c') { >> - $cachelib->erase_dir_content("templates_c/$tikidomain"); >> - $cachelib->flush_opcode_cache(); >> - $logslib->add_log('system', 'erased templates_c content'); >> - } elseif ($_GET['do'] == 'temp_cache') { >> - $cachelib->erase_dir_content("temp/cache/$tikidomain"); >> - $logslib->add_log('system', 'erased temp/cache content'); >> - } elseif ($_GET['do'] == 'temp_public') { >> - $cachelib->erase_dir_content("temp/public/$tikidomain"); >> - $logslib->add_log('system', 'erased temp/public content'); >> - } elseif ($_GET['do'] == 'modules_cache') { >> - $cachelib->erase_dir_content("modules/cache/$tikidomain"); >> - $logslib->add_log('system', 'erased modules/cache content'); >> - } elseif ($_GET['do'] == 'prefs') { >> - $tikilib->set_lastUpdatePrefs(); >> - } >> + $cachelib->empty_cache($_GET['do']); >> } >> if (isset($_GET['compiletemplates'])) { >> $ctempl = 'templates'; >> @@ -50,20 +27,20 @@ >> } >> $languages = array(); >> $languages = $tikilib->list_languages(); >> -$templates_c = $cachelib->du("templates_c/$tikidomain"); >> +$templates_c = $cachelib->count_cache_files("templates_c/$tikidomain"); >> $smarty->assign('templates_c', $templates_c); >> -$tempcache = $cachelib->du("temp/cache/$tikidomain"); >> +$tempcache = $cachelib->count_cache_files("temp/cache/$tikidomain"); >> $smarty->assign('tempcache', $tempcache); >> -$temppublic = $cachelib->du("temp/public/$tikidomain"); >> +$temppublic = $cachelib->count_cache_files("temp/public/$tikidomain"); >> $smarty->assign('temppublic', $temppublic); >> -$modules = $cachelib->du("modules/cache/$tikidomain"); >> +$modules = $cachelib->count_cache_files("modules/cache/$tikidomain"); >> $smarty->assign('modules', $modules); >> $templates = array(); >> foreach($languages as $clang) { >> if ($smarty->use_sub_dirs) { // was if(is_dir("templates_c/$tikidomain/")) ppl with tikidomains should test. redflo >> - $templates[$clang["value"]] = $cachelib->du("templates_c/$tikidomain/" . $clang["value"] . "/"); >> + $templates[$clang["value"]] = $cachelib->count_cache_files("templates_c/$tikidomain/" . $clang["value"] . "/"); >> } else { >> - $templates[$clang["value"]] = $cachelib->du("templates_c/", $tikidomain . $clang["value"]); >> + $templates[$clang["value"]] = $cachelib->count_cache_files("templates_c/", $tikidomain . $clang["value"]); >> } >> } >> $smarty->assign_by_ref('templates', $templates); >> >> >> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. >> >> ------------------------------------------------------------------------------ >> This SF.net Dev2Dev email is sponsored by: >> >> Show off your parallel programming skills. >> Enter the Intel(R) Threading Challenge 2010. >> http://p.sf.net/sfu/intel-thread-sfd >> _______________________________________________ >> Tikiwiki-cvs mailing list >> Tik...@li... >> https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs > > ------------------------------------------------------------------------------ > This SF.net Dev2Dev email is sponsored by: > > Show off your parallel programming skills. > Enter the Intel(R) Threading Challenge 2010. > http://p.sf.net/sfu/intel-thread-sfd_______________________________________________ > Tikiwiki-cvs mailing list > Tik...@li... > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs |
From: Nyloth <ny...@ti...> - 2008-07-20 12:32:19
|
Hi Marc, On Sunday 20 July 2008 14:19:59 Marc Laporte wrote: > 1- Since this is in trunk (and will be part of 3.0), shouldn't > trunk/db/tiki_2.0to3.0.sql be modified instead of > trunk/db/tiki_1.9to2.0.sql? Yes, I agree, we have to switch on tiki_2.0to3.0.sql for trunk. > 2- Is trunk/db/profiles/default-inserts.sql still useful with the recent > changes (now that we have lib/setup/prefs.php)? inserts on tiki_preferences in default-inserts.sql should be removed, but there is also inserts in users_permissions that are done and I think we will have to keep default-inserts.sql for this reason until we find another way to handle those default permissions and groups. Cheers, Nyloth. |
From: <ste...@ct...> - 2008-07-20 12:46:20
|
hi, On Sun, Jul 20, 2008 at 02:32:26PM +0200, Nyloth wrote 1.2K: > Hi Marc, > > On Sunday 20 July 2008 14:19:59 Marc Laporte wrote: > > 1- Since this is in trunk (and will be part of 3.0), shouldn't > > trunk/db/tiki_2.0to3.0.sql be modified instead of > > trunk/db/tiki_1.9to2.0.sql? > > Yes, I agree, we have to switch on tiki_2.0to3.0.sql for trunk. ok, should i copy over tiki_1.9to2.0.sql with the new name and clear out everything? > > 2- Is trunk/db/profiles/default-inserts.sql still useful with the recent > > changes (now that we have lib/setup/prefs.php)? thanks for the subtle hint. i will correct this. |