PHP / OOP Help - проблема логики и дизайна - PullRequest
2 голосов
/ 23 июня 2010

Я хожу по кругу, пытаясь понять, как лучше это сделать, я не думаю, что это должно быть слишком сложно, но я делаю это так!На моем сайте, каждый раз, когда участник предоставляет какие-либо данные, я сохраняю их в записи для этого участника.Идея состоит в том, что участники, которые представляют данные последовательно из месяца в месяц, будут вознаграждены на каком-то этапе.Однако есть некоторые параметры: участник, который возвращается на сайт в течение 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();

}**

1 Ответ

2 голосов
/ 29 октября 2011

Почему бы вам не написать функцию, которая вычисляет разницу во времени, используя временные метки.

Затем вы просто сравните разницу и соответственно выполните нужные функции.

Итак ...

 <?php
        class time_checker{
         function difference($last_entry){

        $now = time();
        $difference = $now - $last_entry;

        return difference;

        }

    }

    //Let's use the class just before the entry is stored

    $day = 24 * 60 * 60; //Number of seconds in a day because we are using timestamps
    $last_entry = get_last_entry($user_id);// Have a function that gets the last entry
    $time_check = new time_checker;
    $time_since_last_entry = $time_check->difference($last_entry);

    $period_1 = 21 * $day; //21 day period
    $period_2 = 49 * $day; //49 day period
    if($time_since_last_entry < $period_1 ){

    //This is what we'll do if there have been less than 21 days since last entry


    }

    if($time_since_last_entry > $period_2 ){

    //This is what we'll do if there have been more than 49 days since last entry


    }


    ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...