PDA

View Full Version : pre_save()?


dwh
08-15-2005, 09:45 AM
What does pre_save() do?
I tried to read through the code but didn't understand it.

Andreas
08-15-2005, 09:51 AM
It does necessary Actions before a Record is being saved.

dwh
08-15-2005, 09:57 AM
Sorry to bug you, but if you can elaborate it would be most helpful. I can't understand lines like

pre_save($doquery = true)
It was called as pre_save() so what is the value of $doquery?

if ($this->presave_called !== null)
{
return $this->presave_called;
}
if (!parent::pre_save($doquery))
{
$this->presave_called = false;
return false;
}
if (!$this->pre_save_post($doquery))
{
$this->presave_called = false;
return false;
}

Totally lost on this?

if (!$this->condition)
{
$this->set('lastpost', $this->fetch_field('dateline'));
$this->set('lastposter', $this->fetch_field('username', 'post'));
$this->set('replycount', 0);
$this->set('hiddencount', 0);
}


dateline? username? post? Where are they getting all this from?

if (!$this->condition AND $this->fetch_field('open') === null)
{

fetch_field? From where? The database? The existing arrays?


No clue in the slightest what's going on here.

Andreas
08-15-2005, 10:30 AM
Hmm, it's documented - you just have to look :)


/**
* This variable prevents the pre_save() method from being called more than once.
* In some classes, it is helpful to explicitly call pre_save() before
* calling save as additional checks are done. This variable is used to prevent
* pre_save() from being executed when save() is called. If null, pre_save()
* has yet to be called; else, it is the return value of pre_save().
*
* @var null|bool
*/
var $presave_called = null;

/**
* Any checks to run immediately before saving. If returning false, the save will not take place.
*
* @param boolean Do the query?
*
* @return boolean True on success; false if an error occurred
*/
function pre_save($doquery = true)




if ($this->presave_called !== null)
{
return $this->presave_called;
}


Check if it was called already, if this is the Case return the previous result.



if (!parent::pre_save($doquery))
{
$this->presave_called = false;
return false;
}


If pre_save() fails in the Parent-Class it's failed.



if (!$this->pre_save_post($doquery))
{
$this->presave_called = false;
return false;
}


If pre_save() for the Post failed, pre_save() for the Thread failed.


dateline? username? post? Where are they getting all this from?

These are required Fields, so they must be present upon saving, eg. can be loaded with fetch_field():


/**
* Fetches info about the current data object - if a new value is set, it returns this, otherwise it will return the existing data
*
* @param string Fieldname
*
* @return mixed The requested data
*/
function &fetch_field($fieldname, $table = null)
{
if ($table === null)
{
$table =& $this->table;
}

if (isset($this->{$table}["$fieldname"]))
{
return $this->{$table}["$fieldname"];
}
else if (isset($this->existing["$fieldname"]))
{
return $this->existing["$fieldname"];
}
else
{
return null;
}
}

dwh
08-15-2005, 10:51 AM
Thanks.
There's an awful lot to learn.