never storing rows in Etemplate\Request and by that keeping apps from storing it as state into the session

This commit is contained in:
Ralf Becker 2017-04-04 15:04:44 +02:00
parent 4aafcf7e2b
commit 095a95ab9a
4 changed files with 29 additions and 3 deletions

View File

@ -242,6 +242,7 @@ class Request
*/
public function &id()
{
$this->cleanup();
$data = serialize($this->data);
// compress the data if available
@ -266,6 +267,24 @@ class Request
return $id;
}
/**
* Clean up data before storing it: currently only removes "real" nextmatch rows
*/
protected function cleanup()
{
if (isset($this->data['content']['nm']) && is_array($this->data['content']['nm']['rows']))
{
foreach(array_keys($this->data['content']['nm']['rows']) as $n)
{
if (is_int($n))
{
unset($this->data['content']['nm']['rows'][$n]);
}
}
//error_log(__METHOD__."() content[nm][rows]=".array2string($this->data['content']['nm']['rows']));
}
}
/**
* Register a form-variable to be processed
*

View File

@ -135,6 +135,7 @@ class Cache extends Etemplate\Request
isset($this->data['last_saved']) && (time()-$this->data['last_saved']) > self::EXPIRATION/2))
{
//error_log(__METHOD__."() saving $this->id".($this->data_modified?'':' data NOT modified, just keeping session alife'));
$this->cleanup();
$this->data['last_saved'] = time();
if (!Api\Cache::setTree($GLOBALS['egw_info']['server']['install_id'].'_etemplate', $this->id, $this->data,
// use bigger one of our own self::EXPIRATION=4h and session lifetime (session.gc_maxlifetime) as expiration time

View File

@ -151,10 +151,14 @@ class Files extends Etemplate\Request
//error_log(__METHOD__."() destroying $this->id");
@unlink(self::$directory.'/'.$this->id);
}
elseif (!$this->destroyed && $this->data_modified &&
!file_put_contents($filename = self::$directory.'/'.$this->id,serialize($this->data)))
elseif (!$this->destroyed && $this->data_modified)
{
error_log("Error opening '$filename' to store the etemplate request data!");
$this->cleanup();
if (!file_put_contents($filename = self::$directory.'/'.$this->id,serialize($this->data)))
{
error_log("Error opening '$filename' to store the etemplate request data!");
}
}
}
}

View File

@ -121,6 +121,8 @@ class Session extends Etemplate\Request
}
elseif (!$this->destroyed && $this->data_modified)
{
$this->cleanup();
Api\Cache::setSession('etemplate', $this->id, $this->data);
}
if (!$this->garbage_collection_done)