";
- ob_start();
+ if ($non_ajax) { // div for non-ajax elements
+ array_push($ajax_divs, array($id, null));
+ echo "
";
+ } else { // ajax ready div
+ array_push($ajax_divs, array($id, $trigger===null ? $id : $trigger));
+ echo "
";
+ ob_start();
+ }
}
function div_end()
@@ -208,8 +316,148 @@ function div_end()
if (count($ajax_divs))
{
$div = array_pop($ajax_divs);
- $Ajax->addUpdate($div[1], $div[0], ob_get_flush());
+ if ($div[1] !== null)
+ $Ajax->addUpdate($div[1], $div[0], ob_get_flush());
echo "
";
}
}
+
+/* Table editor interfaces. Key is editor type
+ 0 => url of editor page
+ 1 => hotkey code
+ 2 => context help
+*/
+$popup_editors = array(
+ 'customer' => array('/sales/manage/customers.php?debtor_no=',
+ 113, _("Customers")),
+ 'branch' => array('/sales/manage/customer_branches.php?SelectedBranch=',
+ 114, _("Branches")),
+ 'supplier' => array('/purchasing/manage/suppliers.php?supplier_id=',
+ 113, _("Suppliers")),
+ 'item' => array('/inventory/manage/items.php?stock_id=',
+ 115, _("Items"))
+);
+/*
+ Bind editors for various selectors.
+ $type - type of editor
+ $input - name of related input field
+ $caller - optional function key code (available values F1-F12: 112-123,
+ true: default)
+*/
+function set_editor($type, $input, $caller=true)
+{
+ global $path_to_root, $Editors, $popup_editors, $Pagehelp;
+
+ $key = $caller===true ? $popup_editors[$type][1] : $caller;
+
+ $Editors[$key] = array( $path_to_root . $popup_editors[$type][0], $input);
+
+ $help = 'F' . ($key - 111) . ' - ';
+ $help .= $popup_editors[$type][2];
+ $Pagehelp[] = $help;
+}
+//------------------------------------------------------------------------------
+// Procedures below are now obsolete. Preserved for eventual future use.
+
+/*
+ External page call with saving current context.
+ $call - url of external page
+ $ctx - optional. name of SESSION context object or array of names of POST
+ variables saved on call
+*/
+function context_call($call, $ctx='')
+{
+ if (is_array($ctx))
+ {
+ foreach($ctx as $postname)
+ {
+ $context[$postname] = get_post($postname);
+ }
+ } else
+ $context = isset($_SESSION[$ctx]) ? $_SESSION[$ctx] : null;
+
+ array_unshift($_SESSION['Context'], array('name' => $ctx,
+ 'ctx' => $context,
+ 'caller' => $_SERVER['PHP_SELF'],
+ 'ret' => array()));
+ meta_forward($call);
+}
+/*
+ Restores context after external page call and
+ returns array of data passed by external page.
+*/
+function context_restore()
+{
+ if ( count($_SESSION['Context'])) {
+ if ($_SERVER['PHP_SELF'] == $_SESSION['Context'][0]['caller']) {
+ $ctx = array_shift($_SESSION['Context']);
+ if ($ctx) {
+ if (is_array($ctx['ctx'])) {
+ foreach($ctx['ctx'] as $name => $val)
+ {
+ $_POST[$name] = $val;
+ }
+ } else
+ if ($ctx['name']!='')
+ $_SESSION[$ctx['name']] = $ctx['ctx'];
+ return $ctx['ret'];
+ }
+ }
+ }
+ return false;
+}
+
+/*
+ Return to caller page if the page was called from external context.
+*/
+function context_return($ret)
+{
+ if ( count($_SESSION['Context'])) {
+ $ctx = &$_SESSION['Context'][0];
+ $ctx['ret'] = $ret;
+ meta_forward( $ctx['caller'] );
+ }
+}
+/*
+ Clearing context stack after page cancel.
+*/
+function context_reset()
+{
+ $_SESSION['Context'] = array();
+}
+/*
+ Context stack initialization
+*/
+if (!isset($_SESSION['Context'])) {
+ context_reset();
+}
+/*
+ Redirector for selector F4 calls.
+ $sel_editors is array of selname=>editor_page
+*/
+function editor_redirect($sel_editors, $save_fun='') {
+ foreach ($sel_editors as $selname=>$editor)
+ if (isset($_POST['_'.$selname.'_editor'])) {
+ if (function_exists($save_fun))
+ $save_fun();
+ unset($_POST['_'.$selname.'_editor']);
+ context_call($editor, array_keys($_POST));
+ }
+}
+/*
+ Return procedure for selector F4 calls
+*/
+function editor_return($vars, $restore_fun='') {
+ if (function_exists($restore_fun))
+ $restore_fun();
+
+ if ($ret = context_restore()) {
+ foreach ($vars as $postname=>$retname)
+ if (isset($ret[$retname])) {
+ $_POST[$postname] = $ret[$retname];
+ set_focus($postname);
+ }
+ }
+}
+
?>
\ No newline at end of file