Я хожу по кругу, пытаясь понять, как лучше это сделать, я не думаю, что это должно быть слишком сложно, но я делаю это так!На моем сайте, каждый раз, когда участник предоставляет какие-либо данные, я сохраняю их в записи для этого участника.Идея состоит в том, что участники, которые представляют данные последовательно из месяца в месяц, будут вознаграждены на каком-то этапе.Однако есть некоторые параметры: участник, который возвращается на сайт в течение 21 дня после своего последнего посещения, не будет засчитываться как новая заявка, а будет просто еще одной отправкой за тот же период, что и предыдущая.Аналогично, если участник возвращается на сайт более чем через 49 дней после последней даты въезда, тогда номер вхождения не будет последовательным, а будет увеличен на два, показывая разрыв между записями.Это то, что я придумал, чтобы позволить проводить различия между теми участниками, которые заполняют данные в правильные сроки - надеюсь, все это имеет смысл!
А что касается моей проблемы с кодом / дизайном, может кто-нибудьпомогите мне улучшить мой код здесь и как лучше всего добавить проверку на таймфреймах?Это моя модель, которую я пытаюсь получить, чтобы управлять записями, чтобы она возвращала правильную запись (то есть новую - увеличенную на последнюю на одну или две, или уже существующую за текущий период).
Буду очень признателен за любые указатели!
//example call from a controller after successful form submission - $this->entry is then passed around for use within that session
$this->entry = $this->pet->update_entry('pet/profile/2');
public function update_entry($stage = NULL)
{
//get last number entered for this pet
$last_entry = $this->last_entry();
//if part one, pet profile is calling the update (passing the next stage as a param)
if ($stage === 'pet/profile/2')
{
//only at this stage do we ever create a new entry
$entry = ORM::factory('data_entry');
//if no previous sessions, start from 1
if ($last_entry === FALSE)
$num = 1;
//here we need to check the time period elapsed since the last submission, still to be ironed out
//for now just increment each time, but this may change
else
$num = $last_entry->number + 1;
//save the rest of the data for a new entry
$entry->number = $num;
$entry->initiated = time();
$entry->updated = time();
$entry->last_category_reached = $stage;
$entry->pet_id = $this->id;
$entry->save();
}
elseif ($stage !== NULL)
{
//echo $stage; correctly prints out stage
//this must be a continuation of a form, not the beginning of a new one
//timeframe checks to be added here
//just update the stage reached and save
$last_entry->last_category_reached = $stage;
$last_entry->updated = time();
$last_entry->save();
//assign to $entry for return
$entry = $last_entry;
}
return $entry;
}
/**
*
* Returns the the last data entry session
*/
public function last_entry()
{
return $this
->limit(1)
->data_entries
->current();
}**