Monday, September 15, 2008

Action runs twice, for no good reason.

Greetings everyone!

I have a strange problem with my cake (cake_1.2.0.7296-rc2).
My start()-action runs twice, under certain circumstances, even though
only one request is made.

The triggers seem to be :
- loading an object like: $this->Questionnaire->read(null,
$questionnaire_id);
- accessing $this-data

If I disable the call to loadAvertisement() from the start()-action,
this does not happen.
If I disable the two calls inside loadAdvertisement():
$questionnaire = $this->Questionnaire->read(null,
$questionnaire_id);
$question = $this->Questionnaire->Question->read(null,
$question_id);
... then it doesn't happen either.

Why?


See my code below, the Controller is "questionnaires_controller".

[CODE]
function checkValidQuestionnaire($id)
{
$this->layout = 'questionnaire_frontend_layout';

if (!$id)
{
$id = $this->Session->read('Questionnaire.id');
}

if ($id)
{
$this->data = $this->Questionnaire->read(null, $id);

//echo "from ".$questionnaire['Questionnaire']
['validFrom']." ".date("y.m.d");
//echo " - to ".$questionnaire['Questionnaire']
['validTo']." ".date("y.m.d");


if ($this->data['Questionnaire']['isPublished'] != 1
//|| $this->data['Questionnaire']['validTo'] <
date("y.m.d")
//|| $this->data['Questionnaire']['validTo'] <
date("y.m.d")
)
{
$id = 0;
$this->flash(__('Ungültiges Quiz. Weiter zum
Archiv...', true), array('action'=>'archive'));
}
}
else
{
$this->flash(__('Invalid Questionnaire', true),
array('action'=>'intro'));
}

return $id;
}
[/CODE]


[CODE]
function start($id = null) {
$this->log("start
");

$id = $this->checkValidQuestionnaire($id);

//$questionnaire = $this->Questionnaire->read(null, $id);
$this->set('questionnaire', $this->data);

// reset flow-controlling session vars
$this->Session->write('Questionnaire',array('id' => $id));
$this->Session->write('Questionnaire'.$id.'currQuestion',
null);
$this->Session->write('Questionnaire'.
$id.'lastAnsweredQuestion', null);
$this->Session->write('Questionnaire'.$id.'correctAnswersNum',
null);

$this->loadAdvertisement($id, 0);

$this->Session->write('Questionnaire'.$id.'previewMode', $this-
>params['named']['preview_mode']);

if (!$this->Session->read('Questionnaire'.$id.'previewMode'))
{
$questionnaire['Questionnaire']['participiantStartCount']+
+;
$this->Questionnaire->save($questionnaire);
}

}
[/CODE]


[CODE]
function loadAdvertisement($questionnaire_id, $question_id)
{

//$questionnaire = array();
$questionnaire = $this->Questionnaire->read(null,
$questionnaire_id);

//$question = array();
$question = $this->Questionnaire->Question->read(null,
$question_id);

if (isset($question['Question']['advertisement_id']) &&
$question['Question']['advertisement_id'] > 0)
{
$this->set('advertisement', $this->Questionnaire->Question-
>Advertisement->read(null, $question['Question']
['advertisement_id']));
}
else if (isset($questionnaire['Questionnaire']
['advertisement_id']) && $questionnaire['Questionnaire']
['advertisement_id'] > 0)
{
$this->set('advertisement', $this->Questionnaire->Question-
>Advertisement->read(null, $questionnaire['Questionnaire']
['advertisement_id']));
}

}
[/CODE]


I really don't understand this... it don't think it's meant to be this
way.
Any help would be greatly appreciated! :)

Regards,
Stu

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to cake-php+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

No comments: