session->app_session used now for the sessiondata (not longer hidden vars)

the content of the form is now the first param. to the callback (no longer in HTTP_POST_VARS)
This commit is contained in:
Ralf Becker 2002-02-17 19:09:15 +00:00
parent 46a635b73c
commit 50c595ff8b
4 changed files with 129 additions and 76 deletions

View File

@ -160,4 +160,39 @@
} }
return $Ok; return $Ok;
} }
/*!
@function save_appsession()
@abstract saves content,readonlys,template-keys, ... via the appsession function
@discussion As a user may open several windows with the same content/template wie generate a location-id from microtime
@discussion which is used as location for appsession to descriminate between the different windows. This location-id
@discussion is then saved as a hidden-var in the form. The above mentions session-id has nothing to do / is different
@discussion from the session-id which is constant for all windows opened in one session.
@returns the location-id
*/
function save_appsession($data)
{
list($msec,$sec) = explode(' ',microtime());
$id = $GLOBALS['phpgw_info']['flags']['currentapp'] . (intval(1000000 * $msec) + 1000000 * ($sec % 100000));
//echo "<p>microtime()=".microtime().", sec=$sec, msec=$msec, id=$id</p>\n";
$GLOBALS['phpgw']->session->appsession($id,'etemplate',$data);
return $id;
}
/*!
@function get_appsession()
@abstract gets content,readonlys,template-keys, ... back from the appsession function
@param $id the location-id
@returns the session-data
*/
function get_appsession($id)
{
$data = $GLOBALS['phpgw']->session->appsession($id,'etemplate');
//echo "<p>get_appsession('$id') data="; _debug_array($data);
return $data;
}
}; };

View File

@ -32,7 +32,7 @@
'not_found' => 'Not found !!!', 'not_found' => 'Not found !!!',
'select_one' => 'Select one ...', 'select_one' => 'Select one ...',
'writen' => 'File writen', 'writen' => 'File writen',
'error_writing' => 'Error: writing file !!!', 'error_writing' => 'Error: writing file (no write-permission for the webserver) !!!',
'give_table_name' => 'Please enter table-name first !!!', 'give_table_name' => 'Please enter table-name first !!!',
'new_table' => 'New table created', 'new_table' => 'New table created',
'select_app' => 'Select an app first !!!' 'select_app' => 'Select an app first !!!'
@ -79,31 +79,30 @@
} }
/*! /*!
@function edit() @function edit($content='',$msg='')
@abstract this is the table editor (and the callback/submit-method too) @abstract this is the table editor (and the callback/submit-method too)
*/ */
function edit($msg = '') function edit($content='',$msg = '')
{ {
if (isset($GLOBALS['HTTP_GET_VARS']['app'])) if (isset($GLOBALS['HTTP_GET_VARS']['app']))
{ {
$this->app = $GLOBALS['HTTP_GET_VARS']['app']; $this->app = $GLOBALS['HTTP_GET_VARS']['app'];
} }
if (isset($GLOBALS['HTTP_POST_VARS']['cont'])) if (is_array($content))
{ {
$content = $GLOBALS['HTTP_POST_VARS']['cont'];
if ($this->debug) if ($this->debug)
{ {
echo "HTTP_POST_VARS ="; _debug_array($GLOBALS['HTTP_POST_VARS']); echo "content ="; _debug_array($content);
} }
$this->app = $content['app']; // this is what the user selected $this->app = $content['app']; // this is what the user selected
$this->table = $content['table_name']; $this->table = $content['table_name'];
$posted_app = $GLOBALS['HTTP_POST_VARS']['posted_app']; // this is the old selection $posted_app = $content['posted_app']; // this is the old selection
$posted_table = $GLOBALS['HTTP_POST_VARS']['posted_table']; $posted_table = $content['posted_table'];
} }
if ($posted_app && $posted_table && // user changed app or table if ($posted_app && $posted_table && // user changed app or table
($posted_app != $this->app || $posted_table != $this->table)) ($posted_app != $this->app || $posted_table != $this->table))
{ {
if ($this->needs_save($posted_app,$posted_table,$this->content2table($content))) if ($this->needs_save('',$posted_app,$posted_table,$this->content2table($content)))
{ {
return; return;
} }
@ -201,10 +200,10 @@
{ {
$table_names[$this->table] = $this->table; $table_names[$this->table] = $this->table;
} }
$sel_options = array( $sel_options = array(
'table_name' => $table_names, 'table_name' => $table_names,
'type' => $this->types, 'type' => $this->types,
'app' => array('' => lang($this->messages['select_one'])) + $this->apps 'app' => array('' => $this->messages['select_one']) + $this->apps
); );
if ($this->table != '' && isset($this->data[$this->table])) if ($this->table != '' && isset($this->data[$this->table]))
{ {
@ -224,39 +223,35 @@
} }
/*! /*!
@function needs_save($posted_app,$posted_table,$edited_table) @function needs_save($cont='',$posted_app='',$posted_table='',$edited_table='')
@abstract checks if table was changed and if so offers user to save changes @abstract checks if table was changed and if so offers user to save changes
@param $cont the content of the form (if called by process_exec)
@param $posted_app the app the table is from @param $posted_app the app the table is from
@param $posted_table the table-name @param $posted_table the table-name
@param $edited_table the edited table-definitions @param $edited_table the edited table-definitions
@returns only if no changes @returns only if no changes
*/ */
function needs_save($posted_app='',$posted_table='',$edited_table='') function needs_save($cont='',$posted_app='',$posted_table='',$edited_table='')
{ {
if (!$posted_app && isset($GLOBALS['HTTP_POST_VARS']['cont'])) if (!$posted_app && is_array($cont))
{ {
$cont = $GLOBALS['HTTP_POST_VARS']['cont'];
$preserv = unserialize(stripslashes($GLOBALS['HTTP_POST_VARS']['preserv']));
if (isset($cont['yes'])) if (isset($cont['yes']))
{ {
$this->app = $preserv['app']; $this->app = $cont['app'];
$this->table = $preserv['table']; $this->table = $cont['table'];
$this->read($this->app,$this->data); $this->read($this->app,$this->data);
$this->data[$this->table] = $preserv['edited_table']; $this->data[$this->table] = $cont['edited_table'];
$this->write($this->app,$this->data); $this->write($this->app,$this->data);
$msg .= $this->messages[$this->write($this->app,$this->data) ? $msg .= $this->messages[$this->write($this->app,$this->data) ?
'writen' : 'error_writing']; 'writen' : 'error_writing'];
} }
// return to edit with everything set, so the user gets the table he asked for // return to edit with everything set, so the user gets the table he asked for
$GLOBALS['HTTP_POST_VARS'] = array( $this->edit(array(
'cont' => array( 'app' => $cont['new_app'],
'app' => $preserv['new_app'], 'table_name' => $cont['app']==$cont['new_app'] ? $cont['new_table'] : '',
'table_name' => $preserv['app']==$preserv['new_app'] ? $preserv['new_table']:'' 'posted_app' => $cont['new_app']
), ),$msg);
'posted_app' => $preserv['new_app'],
);
$this->edit($msg);
return True; return True;
} }
$new_app = $this->app; // these are the ones, the users whiches to change too $new_app = $this->app; // these are the ones, the users whiches to change too
@ -284,8 +279,7 @@
); );
$tmpl = new etemplate('etemplate.db-tools.ask_save'); $tmpl = new etemplate('etemplate.db-tools.ask_save');
$tmpl->exec('etemplate.db_tools.needs_save',$content,array(),array(), $tmpl->exec('etemplate.db_tools.needs_save',$content,array(),array(),$preserv);
array('preserv' => $preserv));
return True; // dont continue in edit return True; // dont continue in edit
} }
@ -478,8 +472,10 @@
$header = substr($header,0,strpos($header,'$phpgw_baseline')); $header = substr($header,0,strpos($header,'$phpgw_baseline'));
fclose($f); fclose($f);
rename($file,PHPGW_SERVER_ROOT."/$app/setup/tables_current.old.inc.php"); if (is_writable(PHPGW_SERVER_ROOT."/$app/setup"))
{
rename($file,PHPGW_SERVER_ROOT."/$app/setup/tables_current.old.inc.php");
}
while ($header[strlen($header)-1] == "\t") while ($header[strlen($header)-1] == "\t")
{ {
$header = substr($header,0,strlen($header)-1); $header = substr($header,0,strlen($header)-1);
@ -489,7 +485,7 @@
{ {
$header = "<?php\n\n"; $header = "<?php\n\n";
} }
if (!($f = fopen($file,'w'))) if (!is_writeable($file) || !($f = fopen($file,'w')))
{ {
return False; return False;
} }
@ -556,7 +552,7 @@
function writeLangFile() function writeLangFile()
{ {
$m = new db_tools(False); // no lang on messages $m = new db_tools(False); // no lang on messages
$this->tmpl->writeLangFile('etemplate','en',$m->messages); $this->editor->writeLangFile('etemplate','en',$m->messages);
} }
}; };

View File

@ -93,7 +93,7 @@
{ {
while(list($k,$v) = each($cell)) // so spanned (not shown) cells got while(list($k,$v) = each($cell)) // so spanned (not shown) cells got
{ // reported back like regular one { // reported back like regular one
$cols_spanned["cont[$col$row][$k]"] = $v; $cols_spanned[$col.$row][$k] = $v;
} }
} }
else else
@ -134,9 +134,9 @@
$t = $a; $a = $b; $b = $t; $t = $a; $a = $b; $b = $t;
} }
function process_edit() function process_edit($content)
{ {
$content = $GLOBALS['HTTP_POST_VARS']['cont']; //$content = $GLOBALS['HTTP_POST_VARS']['cont'];
if ($this->debug) if ($this->debug)
{ {
@ -318,13 +318,17 @@
$this->edit($msg); $this->edit($msg);
} }
function delete($back = 'edit') function delete($post_vars='',$back = 'edit')
{ {
if (isset($GLOBALS['HTTP_POST_VARS']['name'])) if (!$post_vars)
{ {
$read_ok = $this->etemplate->read($GLOBALS['HTTP_POST_VARS']); $post_vars = array();
} }
if (isset($GLOBALS['HTTP_POST_VARS']['yes'])) // Delete if (isset($post_vars['name']))
{
$read_ok = $this->etemplate->read($post_vars);
}
if (isset($post_vars['yes'])) // Delete
{ {
if ($read_ok) if ($read_ok)
{ {
@ -333,9 +337,9 @@
$this->edit($this->messages[$read_ok ? 'deleted' : 'not_found']); $this->edit($this->messages[$read_ok ? 'deleted' : 'not_found']);
return; return;
} }
if (isset($GLOBALS['HTTP_POST_VARS']['no'])) // Back to ... if (isset($post_vars['no'])) // Back to ...
{ {
if (($back = $GLOBALS['HTTP_POST_VARS']['back']) != 'show') if (($back = $post_vars['back']) != 'show')
{ {
$back = 'edit'; $back = 'edit';
} }
@ -354,10 +358,12 @@
$delete->exec('etemplate.editor.delete',$content,array(),array(),$content,''); $delete->exec('etemplate.editor.delete',$content,array(),array(),$content,'');
} }
function show() function show($post_vars='')
{ {
$post_vars = $GLOBALS['HTTP_POST_VARS']; if (!$post_vars)
{
$post_vars = array();
}
if (isset($GLOBALS['HTTP_GET_VARS']['name']) && !$this->etemplate->read($GLOBALS['HTTP_GET_VARS']) || if (isset($GLOBALS['HTTP_GET_VARS']['name']) && !$this->etemplate->read($GLOBALS['HTTP_GET_VARS']) ||
isset($post_vars['name']) && !$this->etemplate->read($post_vars)) isset($post_vars['name']) && !$this->etemplate->read($post_vars))
{ {
@ -365,7 +371,7 @@
} }
if (!$msg && isset($post_vars['delete'])) if (!$msg && isset($post_vars['delete']))
{ {
$this->delete('show'); $this->delete(array(),'show');
return; return;
} }
if (isset($post_vars['edit'])) if (isset($post_vars['edit']))
@ -376,12 +382,17 @@
$content = $this->etemplate->as_array() + array('msg' => $msg); $content = $this->etemplate->as_array() + array('msg' => $msg);
$show = new etemplate('etemplate.editor.show'); $show = new etemplate('etemplate.editor.show');
$no_buttons = array('save' => True,'show' => True,'dump' => True,'langfile' => True,'size' => True); $no_buttons = array(
'save' => True,
if (!$msg && isset($post_vars['values']) && !isset($GLOBALS['HTTP_POST_VARS']['vals'])) 'show' => True,
'dump' => True,
'langfile' => True,
'size' => True
);
if (!$msg && isset($post_vars['values']) && !isset($post_vars['vals']))
{ {
$cont = $this->etemplate->process_show($GLOBALS['HTTP_POST_VARS']); $cont = $this->etemplate->process_show($post_vars);
for ($r = 1; list($key,$val) = each($cont); ++$r) for ($r = 1; list($key,$val) = @each($cont); ++$r)
{ {
$vals["A$r"] = $key; $vals["A$r"] = $key;
$vals["B$r"] = $val; $vals["B$r"] = $val;
@ -393,8 +404,8 @@
else else
{ {
$show->data[$show->rows]['A']['name'] = $this->etemplate; $show->data[$show->rows]['A']['name'] = $this->etemplate;
$vals = $GLOBALS['HTTP_POST_VARS']['vals']; $vals = $post_vars['vals'];
$olds = unserialize(stripslashes($GLOBALS['HTTP_POST_VARS']['olds'])); $olds = unserialize(stripslashes($post_vars['olds']));
for ($r = 1; isset($vals["B$r"]); ++$r) for ($r = 1; isset($vals["B$r"]); ++$r)
{ {

View File

@ -75,10 +75,9 @@
@param $readonlys Array with field-names as keys for fields with should be readonly @param $readonlys Array with field-names as keys for fields with should be readonly
@param (eg. to implement ACL grants on field-level or to remove buttons not applicable) @param (eg. to implement ACL grants on field-level or to remove buttons not applicable)
@param $preserv Array with vars which should be transported to the $method-call (eg. an id) array('id' => $id) sets $HTTP_POST_VARS['id'] for the $method-call @param $preserv Array with vars which should be transported to the $method-call (eg. an id) array('id' => $id) sets $HTTP_POST_VARS['id'] for the $method-call
@param $cname Basename for the submitted content in $HTTP_POST_VARS (default = 'cont')
@returns nothing @returns nothing
*/ */
function exec($method,$content,$sel_options='',$readonlys='',$preserv='',$cname='cont') function exec($method,$content,$sel_options='',$readonlys='',$preserv='')
{ {
if (!$sel_options) if (!$sel_options)
{ {
@ -95,16 +94,21 @@
$GLOBALS['phpgw']->common->phpgw_header(); $GLOBALS['phpgw']->common->phpgw_header();
echo parse_navbar(); echo parse_navbar();
$id = $this->save_appsession(array(
'name' => $this->name,
'template' => $this->template,
'lang' => $this->lang,
'group' => $this->group,
'readonlys' => $readonlys,
'content' => $content,
'sel_options' => $sel_options,
'preserv' => $preserv,
'method' => $method
));
echo $this->html->nextMatchStyles($this->style)."\n\n". // so they get included once echo $this->html->nextMatchStyles($this->style)."\n\n". // so they get included once
$this->html->form($this->show($content,$sel_options,$readonlys,$cname),array( $this->html->form($this->show($content,$sel_options,$readonlys,'exec'),
'etemplate_exec[name]' => $this->name, array('etemplate_exec_id' => $id),'/index.php?menuaction=etemplate.etemplate.process_exec');
'etemplate_exec[template]' => $this->template,
'etemplate_exec[lang]' => $this->lang,
'etemplate_exec[group]' => $this->group,
'etemplate_exec[readonlys]' => $readonlys,
'etemplate_exec[cname]' => $cname,
'etemplate_exec[method]' => $method
)+$preserv,'/index.php?menuaction=etemplate.etemplate.process_exec');
} }
/*! /*!
@ -114,23 +118,25 @@
@discussion All eTemplates / forms executed with exec are submited to this function @discussion All eTemplates / forms executed with exec are submited to this function
@discussion (via the global index.php and menuaction). It then calls process_show @discussion (via the global index.php and menuaction). It then calls process_show
@discussion for the eTemplate (to adjust the content of the HTTP_POST_VARS) and @discussion for the eTemplate (to adjust the content of the HTTP_POST_VARS) and
@discussion ExecMethod's the given callback from the app. @discussion ExecMethod's the given callback from the app with the content of the form as first argument.
*/ */
function process_exec() function process_exec()
{ {
$exec = $GLOBALS['HTTP_POST_VARS']['etemplate_exec']; $session_data = $this->get_appsession($GLOBALS['HTTP_POST_VARS']['etemplate_exec_id']);
//echo "<p>uietemplate.process_exec('${exec['name']}'): exec = "; _debug_array($exec);
$this->read($exec); $content = $GLOBALS['HTTP_POST_VARS']['exec'];
$readonlys = unserialize(stripslashes($exec['readonlys'])); if (!is_array($content))
//echo "<p>uietemplate.process_exec: process_show(cname=${exec['cname']}): readonlys ="; _debug_array($readonlys); {
$this->process_show($GLOBALS['HTTP_POST_VARS'][$exec['cname']],$readonlys); $content = array();
}
$this->read($session_data);
$this->process_show($content,$session_data['readonlys']);
// set application name so that lang, etc. works // set application name so that lang, etc. works
list($GLOBALS['phpgw_info']['flags']['currentapp']) = explode('.',$exec['method']); list($GLOBALS['phpgw_info']['flags']['currentapp']) = explode('.',$session_data['method']);
//echo "<p>uietemplate.process_exec: ExecMethod('${exec['method']}')</p>\n"; //echo "<p>uietemplate.process_exec: ExecMethod('${exec['method']}')</p>\n";
ExecMethod($exec['method']); ExecMethod($session_data['method'],array_merge($content,$session_data['preserv']));
} }
/*! /*!
@ -588,11 +594,16 @@
if ($idx_cname == '' && $cell['type'] == 'template') // only templates if ($idx_cname == '' && $cell['type'] == 'template') // only templates
{ {
if ($readonly) // can't unset whole content!!! if ($readonly && !isset($readonlys['__ALL__'])) // can't unset whole content!!!
{ {
$readonlys['__ALL__'] = True; $readonlys['__ALL__'] = True;
$this->process_show_cell($cell,$name,$c,$r,$readonlys,$content);
unset($readonlys['__ALL__']); // unset it after or everything gets set readonly
}
else
{
$this->process_show_cell($cell,$name,$c,$r,$readonlys,$content);
} }
$this->process_show_cell($cell,$name,$c,$r,$readonlys,$content);
} }
elseif (ereg('^([^[]*)\\[(.*)\\]$',$idx_cname,$regs)) // name contains array-index elseif (ereg('^([^[]*)\\[(.*)\\]$',$idx_cname,$regs)) // name contains array-index
{ {