\$args "; print_r($args); echo ""; //DEBUG
$EditSource = (isset($args['source'])) ? $args['source'] : $pagename;
$target = (isset($args['target'])) ? $args['target'] : $EditSource;
$prefix = (isset($args['prefix']) ? $args['prefix'] : '');
$section = (isset($args['section']) ? urldecode($args['section']) : '');
//open targetpage, get section, set InputValues for 'text' control
$fulltarget = $target.$section;
$EditTarget = MakePagename($pagename, $target);
$page = RetrieveAuthPage($EditTarget, $FoxAuth, true);
if (!$page) Abort( "?cannot read $page");
$text = $page['text'];
//check if we got fullpage edit
if ($section=='') {
$mode = 'section';
if (PageExists($FoxEditPageSectionForm))
$formpage = $FoxEditPageSectionForm; //default can open whole page for editing
}
//check if we got anchored section, else section is ptv
else {
if (strstr($section,'#')) {
$mode = 'section';
$fts = FoxTextSection($page['text'], $fulltarget);
if ($fts['pos']==0) FoxAbort($pagename,"$[Error: cannot find section] '$EditSection'");
$text = $fts['text'];
$formpage = $FoxEditPageSectionForm;
} else {
$mode = 'ptv';
$QualifyPatterns = NULL; //prevent substitutions by Qualify function
$text = PageTextVar($EditSource, $section);
$formpage = $FoxEditPTVSectionForm;
}
}
//check if we should use a specified form
if (isset($args['form'])) {
$formpage = $args['form'];
if ($section=='') $mode = ''; //no $mode since it could be whole page edit or ptv edit
}
//get text for insertion in editform textarea
if ($InputValues['text'])
$EditText = $InputValues['text'];
else
$EditText = $InputValues['text'] = str_replace('$','$',htmlspecialchars($text,ENT_NOQUOTES));
//set global $EditSection
$EditSection = $prefix.$section;
//retrieve edit form from page or page section
if ($formpage) {
$formname = MakePagename($pagename,$formpage);
if (PageExists($formname)) {
$epage = RetrieveAuthPage($formname, 'read', true);
if (!$epage) Abort( "?cannot read $formname");
$eform = $epage['text'];
if ($eform=='') FoxAbort($pagename,"$[Error: cannot find edit form] $formpage");
if (strstr($formpage,'#')) {
$sect = FoxTextSection($epage['text'], $formpage);
if ($sect['pos']==0) FoxAbort($pagename,"$[Error: cannot find edit template] $formpage");
$eform = $sect['text'];
}
if (IsEnabled($EnableFoxEditFormCheck, 1)) {
//check if edit form is the right type
if (preg_match("/\\(:input\\s+([^\\)]+)\\s*name\\=\\$:/",$eform)) {
if ($mode=='section')
Abort( "Error: wrong PTV name in foxedit link or edit form not suitable for PTV editing!");
#FoxAbort($pagename, "Error: wrong PTV name in foxedit link or edit form not suitable for PTV editing!");
}
else if ($mode=='ptv')
Abort("Error: wrong section name in foxedit link or edit form not suitable for section editing!");
#FoxAbort($pagename, "Error: wrong section name in foxedit link or edit form not suitable for section editing!");
}
}
}
//we got no form page, so use hardcoded basic form, either for ptv or section edit
else {
if ($mode=='ptv') $eform = "(:fox eform ptvtarget=$target template=0 redirect=1:)";
else $eform = "(:fox eform foxaction=replace put=overwrite target=$fulltarget :)"
."\n(:foxtemplate \"{\$\$text}\":)";
$eform .= "\n(:input hidden csum 'Section edited':)"
."\n'''Editing $target section $section'''"
."(:input defaults source={$EditSource}:)";
if ($mode=='ptv') $eform .= Keep("
");
else $eform .= Keep("
");
$eform .= "\n(:input submit post '$[Save]':) (:input submit cancel '$[Cancel]':)"
."\n(:foxend eform:)";
}
$FmtV['$FoxEditFrm'] = MarkupToHTML($pagename, $eform);
$FoxPageEditFmt = '$FoxEditFrm';
$HandleEditFmt = array(&$PageStartFmt, &$FoxPageEditFmt, &$PageEndFmt);
PrintFmt($pagename, $HandleEditFmt);
exit;
} //}}}
Markup('foxeditlink','directives','/\\{\\[foxedit\\s*(.*?)\\s*\\]\\}/', "FoxEditLinkMarkup");
// make {[foxedit...]} link HTML
function FoxEditLinkMarkup ($m) {
extract($GLOBALS['MarkupToHTML']);
$PageUrl = PageVar($pagename, '$PageUrl');
$args = ParseArgs($m[1]);
$args[''] = (array)@$args[''];
$section = (isset($args['section'])) ? $args['section'] : array_shift($args['']);
$section = urlencode($section);
$form = isset($args['form']) ? urlencode($args['form']) : '';
$label = (isset($args['label'])) ? $args['label'] : array_shift($args['']);
$target = (isset($args['target'])) ? MakePageName($pagename,$args['target']) : '';
$source = (isset($args['source'])) ? MakePageName($pagename,$args['source']) : '';
if(!$label) $label = XL('Edit');
$url = "{$PageUrl}?action=foxedit".
($source ? "&source={$source}" : "").
($target ? "&target={$target}" : "").
($form ? "&form={$form}" : "").
(isset($args['prefix']) ? "&prefix={$args['prefix']}" : "").
($section ? "§ion={$section}" : "");
$out = "{$label}";
return Keep($out);
} //}}}
//make argument array out of url parameters
function FoxURLArgs($pn) {
@session_start();
$_SESSION['foxedit'][$pn] = array();
//get url
if ($_SERVER["HTTPS"] == "on") $pageURL .= "https://";
else $pageURL .= "http://";
if ($_SERVER["SERVER_PORT"] != "80")
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
else $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
//use only argument string (form first ?), process it
$args = strstr(strip_tags(urldecode($pageURL)),'?');
$args = str_replace('?',' ',$args);
$args = str_replace('&',' ',$args);
$args = htmlentities($args); //just to be safe...
//make into array
$args = ParseArgs($args);
unset($args['#']);
//save as SESSION var
$_SESSION['foxedit'][$pn] = $args;
return $args;
} //}}}