: :) Display via markup expression {(hiddenptvs )} Include powertools.php to generate csv pagelist. Example: {(hiddenptvs (plist Main.*))} display hidden PTVs in Main group. Convert via Fox form using foxfilter 'ptvconvert' Example forms for display and conversion of PTVs: (:table width=100%:) (:cell:) !!!Display hidden PTVs (:fox test foxaction=display foxtemplate="{$$(hiddenptvs (plist {$$group}.{$$name}))}":)(:input default source=1:) Pages (:input text name *:) Group (:input text group Main:) ->(:input submit post 'Display hidden PTVs':) (:foxend test:) (:cell:) !!!Convert hidden PTVs (:fox convert foxaction=display foxtemplate="{$$(hiddenptvs {$$plist})}":) (:input hidden plist "{$$(plist {$$group}.{$$name})}":) (:input hidden foxfilter ptvconvert:)(:input default source=1:) Pages (:input text name *:) Group (:input text group Main:) replace (:input text old size=8:) with (:input text new size=8:) (:input submit post "Convert hidden PTVs":) Test run (:input checkbox testrun:) (:foxend convert:) (:tableend:) (:foxmessages:)(:foxdisplay:) */ $RecipeInfo['FoxPTVConvert']['Version'] = '2015-09-28'; # show hidden ptvs as name: value; input argument: PageName or list of page names $MarkupExpr['hiddenptvs'] = 'MXDisplayHiddenPTVs($pagename, $args[0], $argp["type"])'; function MXDisplayHiddenPTVs($pagename, $list, $type) { global $PCache, $PageTextVarPatterns; $pgout = array(); $out = array(); echo $type; $plist = (isset($list)) ? explode(',',$list) : array($pagename); foreach($plist as $pn) { $pn = MakePageName($pagename, $pn); PageTextVar($pn, ''); foreach($PCache[$pn] as $key => $val) { if (substr($key,0,3)!="=p_") continue; else $ptvpages[] = $pn; } } $ptvpages = (is_array($ptvpages)) ? array_unique($ptvpages) : array(); //show($ptvpages); foreach($ptvpages as $pn) { $pgout[$pn][0] = "!!!!!![[$pn]]\n"; $page = RetrieveAuthPage($pn, 'edit', false, READPAGE_CURRENT); $text = $page['text']; $pat = $PageTextVarPatterns['(:var:...:)']; //hidden PTVs // ['var:']; //Text PTVs if ($type=='text') $pat = $PageTextVarPatterns['var:']; if (!preg_match_all($pat, $text, $match, PREG_SET_ORDER)) continue; //$m[0]=all, $m[1]=beforevalue, $m[2]=name, $m[3]=value, $m[4]=aftervalue foreach ($match as $m) { $k = $m[2]; $v = $m[3]; $pgout[$pn][] = "'''".$k."''': ".$v; } sort($pgout[$pn]); $out[] = implode("\n",$pgout[$pn]); } return implode("\n",$out); } # convert hidden ptvs by replacing old with new string; $FoxFilterFunctions['ptvconvert'] = FoxConvertHiddenPTVs; function FoxConvertHiddenPTVs($pagename, $fx) { global $PCache, $PageTextVarPatterns, $EditFunctions, $FoxMsgFmt; $fx['plist'] = FoxVarReplace($pagename,$fx,'',$fx['plist']); //show($fx,"fx"); $plist = explode(',',$fx['plist']); foreach($plist as $pn) { $pn = MakePageName($pagename, $pn); PageTextVar($pn, ''); foreach($PCache[$pn] as $k => $v) { if (substr($k,0,3)!="=p_") continue; else $ptvpages[] = $pn; } } $pt = $fx['old']; $rp = $fx['new']; if(!is_array($ptvpages) || $fx['old']="") FoxAbort($pagename, "%red%Input Error!%%"); else $ptvpages = array_values(array_unique($ptvpages)); //show($ptvpages,"all ptv pages"); foreach($ptvpages as $pn) { Lock(2); $page = RetrieveAuthPage($pn, 'admin', true); $text = $told = $page['text']; $pat = $PageTextVarPatterns['(:var:...:)']; //hidden PTVs // ['var:']; //Text PTVs if ($type=='text') $pat = $PageTextVarPatterns['var:']; if (!preg_match_all($pat, $text, $match, PREG_SET_ORDER)) { Lock(0); continue; //page has no hidden PTV, so load next page } //$m[0]=all, $m[1]=beforevalue, $m[2]=name, $m[3]=value, $m[4]=aftervalue foreach ($match as $m) { $ptv =$m[0]; $k = $m[2]; $v = $m[3]; $vn = str_replace($pt,$rp,$v); $ptvn = str_replace($v,$vn,$ptv); $text = str_replace($ptv,$ptvn,$text); } if ($text==$told) $FoxMsgFmt[] = "%red%no change: [[".$pn."]]%%"; else { $mod[] = $pn; $pnew = $page; $pnew['text'] = $text; if ($fx['testrun']) { echo "test updating: ".$pn." => ".$text."
"; } else { $FoxMsgFmt[] = "%green%update: [[".$pn."]]%%"; UpdatePage($pn, $page, $pnew, $EditFunctions); //silent update!!! //no summary written// } } Lock(0); } if($mod) $fx['modified-pages'] = implode(',',$mod); return $fx; //HandleDispatch($pagename,'browse','End of Update'); //exit; }