private static function getScheduleBirthMember(array $months, $day = null, $is_setKeydate = true) { $memberId = self::getMyId(); if (is_null(self::$birth_prof_id)) { $profile = Doctrine::getTable('Profile')->createQuery()->select('id')->where('name = ?', 'op_preset_birthday')->fetchOne(array(), Doctrine::HYDRATE_NONE); if (!$profile) { return array(); } self::$birth_prof_id = $profile[0]; } if (is_null(self::$friendIds)) { self::$friendIds = Doctrine::getTable('MemberRelationship')->getFriendMemberIds($memberId); self::$friendIds[] = $memberId; } $q = Doctrine::getTable('MemberProfile')->createQuery()->select('member_id, value_datetime, public_flag')->where('profile_id = ?', self::$birth_prof_id)->andWhereIn('member_id', self::$friendIds); $driverName = Doctrine::getConnectionByTableName('MemberProfile')->getDriverName(); foreach ($months as $month) { $targetDate = $day ? sprintf('%02d-%02d', (int) $month, (int) $day) : sprintf('%02d', (int) $month); if ($driverName === 'Sqlite') { $targetValue = array($day ? '%m-%d' : '%m', $targetDate); $q->andWhere('strftime(?, value_datetime) = ?', $targetValue); } else { if ($driverName === 'Pgsql') { $targetValue = array($day ? 'MM-DD' : 'MM', $targetDate); $q->andWhere('to_char(value_datetime, ?) = ?', $targetValue); } else { $targetValue = array($day ? '%m-%d' : '%m', $targetDate); $q->andWhere('DATE_FORMAT(value_datetime, ?) = ?', $targetValue); } } } $birthResults = $q->execute(array(), Doctrine::HYDRATE_NONE); if (!count($birthResults)) { return array(); } $results = array(); foreach ($birthResults as $birthResult) { if ($memberId != $birthResult[0] && ProfileTable::PUBLIC_FLAG_PRIVATE == $birthResult[2]) { continue; } $member = Doctrine::getTable('Member')->find($birthResult[0]); if ($is_setKeydate) { $results[substr($birthResult[1], 5, 5)][] = $member; } else { $results[] = $member; } } return $results; }