protected function buildCondition(Watch $watch) { $not_dead = new PFC_Not(new UFC_Dead()); $select_date = new PFC_OR(new UFC_Birthday('=', time()), new PFC_And(new UFC_Birthday('<=', time() + self::WATCH_LIMIT), new UFC_Birthday('>', $watch->date() + self::WATCH_LIMIT))); $profile = $watch->profile(); $cond = $watch->contactCondition(); if ($profile) { $cond = new PFC_Or($cond, new PFC_And($watch->promoCondition(), new UFC_Promo('>=', $profile->mainGrade(), $profile->yearpromo() - 1), new UFC_Promo('<=', $profile->mainGrade(), $profile->yearpromo() + 1)), $watch->groupCondition()); } return new PFC_And($not_dead, $select_date, $cond); }