DjangoBB

Django based forum engine

  • You are not logged in.

#1 May 1, 2012 19:53:58

loarf
Registered: 2011-04-29
Posts: 5
Reputation: +  0  -
Profile   Send e-mail  

Time zones

Could someone explain to me how the time zones users' set in their profiles are supposed to work. Times are always displayed in the time zone specified in the TIME_ZONE setting in the projects settings.py regardless of the time zone users specify. Is there any way around this?

Offline

#2 May 3, 2012 13:30:53

slav0nic
DjangoBB Developer
From: Ukraine
Registered: 2009-10-25
Posts: 382
Reputation: +  5  -
Profile   Send e-mail  

Time zones

time_zone in profile was reserved time ago, now django 1.4 officially support it (http://djangobb.org/ticket/74).

maybe it will be fixed after migration to bootstrap2 and other major changes

Offline

#3 Aug. 31, 2012 15:40:40

jedie
From: germany
Registered: 2012-07-12
Posts: 160
Reputation: +  1  -
Profile   Send e-mail  

Time zones

related to this: https://github.com/jedie/DjangoBB/compare/master…timezone




Some of my Projects:
* Migrate phpBB to DjangoBB with django-phpBB3
* DjangoBB github repro and information about my changes
* PyLucid CMS written in Django: http://www.pylucid.org/

Offline

#4 Aug. 31, 2012 19:23:31

jedie
From: germany
Registered: 2012-07-12
Posts: 160
Reputation: +  1  -
Profile   Send e-mail  

Time zones

btw. about selecting the time zone:

I search the internet for a better list for:

TZ_CHOICES = [(float(x[0]), x[1]) for x in (
    (-12, '-12'), (-11, '-11'), (-10, '-10'), (-9.5, '-09.5'), (-9, '-09'),
    (-8.5, '-08.5'), (-8, '-08 PST'), (-7, '-07 MST'), (-6, '-06 CST'),
    (-5, '-05 EST'), (-4, '-04 AST'), (-3.5, '-03.5'), (-3, '-03 ADT'),
    (-2, '-02'), (-1, '-01'), (0, '00 GMT'), (1, '+01 CET'), (2, '+02'),
    (3, '+03'), (3.5, '+03.5'), (4, '+04'), (4.5, '+04.5'), (5, '+05'),
    (5.5, '+05.5'), (6, '+06'), (6.5, '+06.5'), (7, '+07'), (8, '+08'),
    (9, '+09'), (9.5, '+09.5'), (10, '+10'), (10.5, '+10.5'), (11, '+11'),
    (11.5, '+11.5'), (12, '+12'), (13, '+13'), (14, '+14'),
)]

…and found many links, but the most are unusable (because contains too many cities). Best hits are:
http://msdn.microsoft.com/en-us/library/ms912391%28v=winembedded.11%29.aspx
http://www.davidsemporium.co.uk/worldclock.html

Then i played with pytz. You can get a list of all timezones. But there are too many region/cities, too:
import collections
from datetime import datetime
import pytz
def get_shortest(l, max=3):
    """
    >>> get_shortest(["aa","bbb","c","dd"])
    ['c', 'aa', 'dd']
    >>> get_shortest(["aa","b","cc","d"], 2)
    ['b', 'd']
    """
    l = sorted(l, key=lambda x: len(x))
    return l[:max]
def get_human_timezones(max_cities=3, max_countries=4):
    human_timezones = {}
    utc = pytz.timezone('UTC')
    utc_now = datetime.now()#.replace(tzinfo=utc)
    timezone_data = {}#collections.defaultdict(list)
    for zone_name in pytz.common_timezones:
        tz = pytz.timezone(zone_name)
        dt = tz.localize(utc_now)
        offset = dt.strftime("%z")
        #~ utcoffset = tz._utcoffset # timedelta object
        #~ offset = utcoffset.total_seconds() / 60
        if offset not in timezone_data:
            timezone_data[offset] = [dt.strftime("%Z")]
        timezone_data[offset].append(zone_name)
    for utc_offset, data in timezone_data.items():
        tz_acronym = data[0]
        places = data[1:]
        places_dict = collections.defaultdict(list)
        for place in places:
            if "/" in place:
                country, cities = place.split("/",1)
                places_dict[country].append(cities)
        human_places = []
        for country, cities in sorted(places_dict.items()):
            cities = get_shortest(cities, max=max_cities)
            human_places.append(
                "%s:%s" % (country, ",".join(cities))
            )
        human_places = "%s - %s" % (
            tz_acronym, " - ".join(human_places)
        )
        human_timezones[utc_offset] = human_places
    return human_timezones
if __name__ == "__main__":
    human_timezones = get_human_timezones(max_cities=3, max_countries=4)
    for utc_offset, human_places in sorted(human_timezones.items(), key=lambda x: int(x[0])):
        print utc_offset, human_places

Will produced this:
-1100 SST - Pacific:Niue,Midway,Pago_Pago
-1000 HST - Pacific:Tahiti,Honolulu,Johnston - US:Hawaii
-0930 MART - Pacific:Marquesas
-0900 HADT - America:Adak - Pacific:Gambier
-0800 AKDT - America:Nome,Sitka,Juneau - Pacific:Pitcairn - US:Alaska
-0700 PDT - America:Dawson,Phoenix,Tijuana - Canada:Pacific - US:Arizona,Pacific
-0600 CST - America:Boise,Belize,Denver - Canada:Mountain - Pacific:Easter,Galapagos - US:Mountain
-0500 EST - America:Lima,Bogota,Cancun - Canada:Central - US:Central
-0430 VET - America:Caracas
-0400 AST - America:Aruba,Cuiaba,Guyana - Antarctica:Palmer - Canada:Eastern - US:Eastern
-0300 BRT - America:Bahia,Belem,Thule - Antarctica:Rothera - Atlantic:Bermuda,Stanley - Canada:Atlantic
-0230 NDT - America:St_Johns - Canada:Newfoundland
-0200 WGST - America:Godthab,Noronha,Miquelon - Atlantic:South_Georgia
-0100 CVT - Atlantic:Cape_Verde
+0000 GMT - Africa:Lome,Accra,Dakar - America:Danmarkshavn,Scoresbysund - Atlantic:Azores,Reykjavik,St_Helena
+0100 CET - Africa:Lagos,Tunis,Bangui - Atlantic:Faroe,Canary,Madeira - Europe:Dublin,Jersey,Lisbon
+0200 CAT - Africa:Cairo,Ceuta,Harare - Arctic:Longyearbyen - Europe:Oslo,Rome,Malta
+0300 EAT - Africa:Asmara,Kampala,Nairobi - Antarctica:Syowa - Asia:Aden,Gaza,Amman - Europe:Kiev,Riga,Minsk - Indian:Comoro,Mayotte,Antananarivo
+0400 GST - Asia:Dubai,Muscat,Tbilisi - Europe:Moscow,Samara,Volgograd - Indian:Mahe,Reunion,Mauritius
+0430 AFT - Asia:Kabul,Tehran
+0500 MAWT - Antarctica:Mawson - Asia:Baku,Oral,Aqtau - Indian:Maldives,Kerguelen
+0530 IST - Asia:Colombo,Kolkata
+0545 NPT - Asia:Kathmandu
+0600 VOST - Antarctica:Vostok - Asia:Dhaka,Almaty,Bishkek - Indian:Chagos
+0630 MMT - Asia:Rangoon - Indian:Cocos
+0700 DAVT - Antarctica:Davis - Asia:Hovd,Omsk,Bangkok - Indian:Christmas
+0800 WST - Antarctica:Casey - Asia:Macau,Brunei,Harbin - Australia:Perth
+0845 CWST - Australia:Eucla
+0900 TLT - Asia:Dili,Seoul,Tokyo - Pacific:Palau
+0930 CST - Australia:Darwin,Adelaide,Broken_Hill
+1000 DDUT - Antarctica:DumontDUrville - Asia:Yakutsk - Australia:Currie,Hobart,Sydney - Pacific:Guam,Chuuk,Saipan
+1030 LHST - Australia:Lord_Howe
+1100 MIST - Antarctica:Macquarie - Asia:Sakhalin,Vladivostok - Pacific:Efate,Kosrae,Noumea
+1130 NFT - Pacific:Norfolk
+1200 NZST - Antarctica:McMurdo,South_Pole - Asia:Anadyr,Magadan,Kamchatka - Pacific:Fiji,Wake,Nauru
+1245 CHAST - Pacific:Chatham
+1300 WST - Pacific:Apia,Fakaofo,Enderbury
+1400 LINT - Pacific:Kiritimati

Not really needfull…

So i search for a way to sort by population and found a simple text file database here: https://www.maxmind.com/app/worldcities
It has 3173959 items and 43183 cities with population count. Looks like:
Country,City,AccentCity,Region,Population,Latitude,Longitude
ad,aixas,AixĂ s,06,,42.4833333,1.4666667
ad,aixirivali,Aixirivali,06,,42.4666667,1.5
ad,aixirivall,Aixirivall,06,,42.4666667,1.5
ad,aixirvall,Aixirvall,06,,42.4666667,1.5
...

So i played with it and build this:
# coding:utf-8
import time
import collections
from datetime import datetime
import pytz
def get_shortest(l, max=3):
    """
    >>> get_shortest(["aa","bbb","c","dd"])
    ['c', 'aa', 'dd']
    >>> get_shortest(["aa","b","cc","d"], 2)
    ['b', 'd']
    """
    l = sorted(l, key=lambda x: len(x))
    return l[:max]
def get_biggest(cities, population_data, max=2):
    """
    >>> get_biggest(["A", "B", "C"], {"b":1, "c":2})
    ['C', 'B']
    """
    cities = sorted(cities, key=lambda x: population_data.get(x.lower(), 0), reverse=True)
    return cities[:max]
def build_human_places(places_dict, population_data, max_chars):
    """
    >>> build_human_places(
    ...     {"r1": ["c1", "c2", "c3"], "r2": ["C1", "C2"], "r3": ["x1"]},
    ...     {"c2":10, "x1":2, "c3": 20},
    ...     max_chars=12)
    'c3,C2,x1,c2'
    """
    # places_dict: {"r1": ["c1", "c2"], "r2": ["C1", "C2"]}
    city_data = []
    for cities in places_dict.values():
        cities = sorted(cities, key=lambda x: population_data.get(x.lower(), 0), reverse=True)
        city_data.append(cities)
    human_places = []
    has_cities = True
    for index in xrange(20):
        has_cities = False
        for cities in city_data:
            #~ print index, cities
            try:
                city = cities[index]
            except IndexError:
                pass
            else:
                if (len(",".join(human_places)) + len(city)) >= max_chars:
                    #return ",".join(human_places)
                    break
                human_places.append(city)
                has_cities = True
        if not has_cities:
            break
    return ",".join(human_places)
def get_human_timezones(population_data, max_chars):
    human_timezones = {}
    utc = pytz.timezone('UTC')
    utc_now = datetime.now()#.replace(tzinfo=utc)
    timezone_data = {}#collections.defaultdict(list)
    for zone_name in pytz.common_timezones:
        tz = pytz.timezone(zone_name)
        dt = tz.localize(utc_now)
        offset = dt.strftime("%z")
        #~ utcoffset = tz._utcoffset # timedelta object
        #~ offset = utcoffset.total_seconds() / 60
        if offset not in timezone_data:
            timezone_data[offset] = [dt.strftime("%Z")]
        timezone_data[offset].append(zone_name)
    for utc_offset, data in timezone_data.items():
        tz_acronym = data[0]
        places = data[1:]
        places_dict = collections.defaultdict(list)
        for place in places:
            if "/" in place:
                country, cities = place.split("/",1)
                places_dict[country].append(cities)
        human_places = build_human_places(places_dict, population_data, max_chars)
        human_timezones[utc_offset] = (tz_acronym, human_places)
    return human_timezones
def city_data(filepath, min_population=10000000):
    """
    Data file from: https://www.maxmind.com/app/worldcities
    """
    start_time = time.time()
    next_status = start_time + 0.25
    population_data = {}
    with file(filepath, "r") as f:
        skip_count = 0
        for line in f:
            country,city,accentcity,region,population,latitude,longitude = line.split(",")
            if not population:
                continue
            try:
                population = int(population)
            except ValueError:
                continue
            if time.time() > next_status:
                next_status = time.time() + 1
                print "Adds %i cities and %i cities are too small" % (len(population_data), skip_count)
            if population<min_population:
                skip_count += 1
                continue
            population_data[city.lower()] = population
    print "Adds %i cities and %i cities are too small" % (len(population_data), skip_count)
    return population_data
if __name__ == "__main__":
    import doctest
    print doctest.testmod()
    #~ sys.exit()
    population_data = city_data("worldcitiespop.txt", min_population=1)
    #~ population_data = {}
    human_timezones = get_human_timezones(population_data, max_chars=70)
    for utc_offset, human_places in sorted(human_timezones.items(), key=lambda x: int(x[0])):
        print utc_offset, human_places

result is:
-1100 ('SST', 'Midway,Niue,Pago_Pago')
-1000 ('HST', 'Hawaii,Honolulu,Johnston,Rarotonga,Tahiti')
-0930 ('MART', 'Marquesas')
-0900 ('HADT', 'Adak,Gambier')
-0800 ('AKDT', 'Anchorage,Alaska,Pitcairn,Juneau,Sitka,Nome,Metlakatla,Yakutat')
-0700 ('PDT', 'Pacific,Phoenix,Arizona,Tijuana,Pacific,Hermosillo,Vancouver')
-0600 ('CST', 'Mountain,Managua,Mountain,Easter,Guatemala,Galapagos,Tegucigalpa')
-0500 ('EST', 'Central,Bogota,Central,Chicago,Guayaquil,Monterrey,Winnipeg,Cancun')
-0430 ('VET', 'Caracas')
-0400 ('AST', 'Eastern,Palmer,Toronto,Eastern,Montreal,Manaus,Port-au-Prince,Detroit')
-0300 ('BRT', 'Atlantic,Rothera,Fortaleza,Stanley,Recife,Bermuda,Montevideo,Maceio')
-0230 ('NDT', 'Newfoundland,St_Johns')
-0200 ('WGST', 'Miquelon,South_Georgia,Godthab,Noronha')
-0100 ('CVT', 'Cape_Verde')
+0000 ('GMT', 'Reykjavik,Danmarkshavn,Abidjan,Azores,Scoresbysund,Dakar,St_Helena')
+0100 ('CET', 'London,Canary,Kinshasa,Dublin,Faroe,Casablanca,Lisbon,Madeira,Algiers')
+0200 ('CAT', 'Budapest,Longyearbyen,Harare,Stockholm,Johannesburg,Prague,Lubumbashi')
+0300 ('EAT', 'Istanbul,Syowa,Antananarivo,Nairobi,Baghdad,Kiev,Comoro,Mogadishu')
+0400 ('GST', 'Samara,Mahe,Dubai,Volgograd,Mauritius,Yerevan,Moscow,Reunion,Tbilisi')
+0430 ('AFT', 'Kabul,Tehran')
+0500 ('MAWT', 'Mawson,Kerguelen,Karachi,Maldives,Tashkent,Baku,Dushanbe,Samarkand')
+0530 ('IST', 'Colombo,Kolkata')
+0545 ('NPT', 'Kathmandu')
+0600 ('VOST', 'Vostok,Chagos,Yekaterinburg,Almaty,Dhaka,Bishkek,Qyzylorda,Thimphu')
+0630 ('MMT', 'Cocos,Rangoon')
+0700 ('DAVT', 'Davis,Christmas,Jakarta,Bangkok,Novosibirsk,Omsk,Novokuznetsk')
+0800 ('WST', 'Casey,Perth,Shanghai,Manila,Chongqing,Singapore,Harbin,Taipei,Urumqi')
+0845 ('CWST', 'Eucla')
+0900 ('TLT', 'Palau,Tokyo,Seoul,Irkutsk,Dili,Jayapura,Pyongyang')
+0930 ('CST', 'Darwin,Adelaide,Broken_Hill')
+1000 ('DDUT', 'DumontDUrville,Brisbane,Chuuk,Yakutsk,Melbourne,Guam,Sydney,Hobart')
+1030 ('LHST', 'Lord_Howe')
+1100 ('MIST', 'Macquarie,Noumea,Vladivostok,Efate,Sakhalin,Guadalcanal,Kosrae,Pohnpei')
+1130 ('NFT', 'Norfolk')
+1200 ('NZST', 'McMurdo,Auckland,Magadan,South_Pole,Fiji,Anadyr,Funafuti,Kamchatka')
+1245 ('CHAST', 'Chatham')
+1300 ('WST', 'Apia,Enderbury,Fakaofo,Tongatapu')
+1400 ('LINT', 'Kiritimati')

I put the biggest cities, but from every region.

IMHO i can enhanced it like:
* use the biggest cities, but at least one from a region…




Some of my Projects:
* Migrate phpBB to DjangoBB with django-phpBB3
* DjangoBB github repro and information about my changes
* PyLucid CMS written in Django: http://www.pylucid.org/

Offline

#5 Aug. 31, 2012 21:06:59

jedie
From: germany
Registered: 2012-07-12
Posts: 160
Reputation: +  1  -
Profile   Send e-mail  

Time zones

Beside “how to select own timezone”: What should be done with these information?

How should times be handled in DjangoBB generally?

Think that is no easy question. Maybe it makes at most sence to store everything in UTC and display them as UTC and use JavaScript to add a title with a calculated local time and maybe a “how old information” (This post was created since 5 days)




Some of my Projects:
* Migrate phpBB to DjangoBB with django-phpBB3
* DjangoBB github repro and information about my changes
* PyLucid CMS written in Django: http://www.pylucid.org/

Offline

#6 Aug. 31, 2012 23:48:20

jedie
From: germany
Registered: 2012-07-12
Posts: 160
Reputation: +  1  -
Profile   Send e-mail  

Time zones

I have found a better solution:

Why not remove completely the timezone from profile and send the current user timezone in every post form by inserting the current UTC offset via JavaScript in a hidden field.

Get this information is easy:

    var now = new Date();
    var time_zone_offset = -now.getTimezoneOffset() / 60;
Put it into a hidden field is also easy.

What i don't know: Does every browser generate this in the same way?




Some of my Projects:
* Migrate phpBB to DjangoBB with django-phpBB3
* DjangoBB github repro and information about my changes
* PyLucid CMS written in Django: http://www.pylucid.org/

Edited jedie (Aug. 31, 2012 23:49:16)

Offline

#7 Sept. 5, 2012 13:17:47

jedie
From: germany
Registered: 2012-07-12
Posts: 160
Reputation: +  1  -
Profile   Send e-mail  

Time zones

Other, maybe simpler solution: Store everything in UTC (without any timezone info). Render every times in UTC. On the client a JavaScript convert the UTC times into local times. Here, we also need no timezone info in the user profile.

Also interesting: Convert absolute UTC times into relative times by JavaScript, like timesince it does, but on the client. The benefit is, that the page content can be cacheable a very long time, without to update the timesince values.
Maybe display e.g. post time like:

<span title="Aug. 31, 2012 23:45:21">4 days, 6 hours</span>




Some of my Projects:
* Migrate phpBB to DjangoBB with django-phpBB3
* DjangoBB github repro and information about my changes
* PyLucid CMS written in Django: http://www.pylucid.org/

Edited jedie (Sept. 5, 2012 13:22:03)

Offline

#8 Feb. 14, 2017 04:11:47

chenjinyan
Registered: 2017-02-14
Posts: 280
Reputation: +  0  -
Profile   Send e-mail  

Time zones

cheap jordan shoes
pandora charms
roshe run 3
louis vuitton outlet
adidas yeezy 350 boost
nba jerseys
louis vuitton outlet stores
cheap ugg boots
gucci belts
patriots jerseys
oakley store
michael kors handbags
toms outlet
louis vuitton purse
ray ban glasses
christian louboutin shoes
ugg boots
retro jordans
canada goose outlet
coach outlet online
coach outlet store online clearances
giuseppe zanotti shoes
kate spade outlet
cheap jordan shoes
michael kors outlet online
oakley sunglasses
sac louis vuitton
nike roshe run shoes
nike roshe run femme
louis vuitton outlet online
louis vuitton borse
cheap snapback hat
ugg outlet
gucci belts
nike tn
michael kors outlet
nike basketball shoes
louboutin pas cher
ray ban sunglasses outlet
true religion outlet
cheap jordans
nike air max 2016
coach outlet online
hollister outlet
timberland outlet
ray ban glasses
true religion outlet store
michael kors outlet online
michael kors outlet online
adidas nmd
toms sale
polo ralph lauren outlet
adidas yeezy 350 boost
fitflops sale
hollister jeans
celtics jerseys
michael kors bags
tory burch sale
michael kors handbags
uggs outlet
chaussures ugg
polo ralph lauren outlet
louis vuitton purses
ed hardy shirts
tory burch shoes
adidas nmd runner
nike air max 90
cheap oakley sunglasses
stivali ugg
montblanc pen
ugg outlet
timberland shoes
true religion outlet
kate spade outlet
hollister clothing store
ugg boots
louboutin uk
timberland outlet online
moncler soldes
air force 1 shoes
coach outlet store online
ugg boots
michael kors outlet online
michael kors outlet online
air max uk
cheap jordan retro
gucci outlet
coach handbags new
louis vuitton handbags clearance
louis vuitton uk
fitflops sale clearance
prada handbags
louis vuitton outlet online
nba jerseys cheap
tiffany jewelry
ugg slippers
seahawks jerseys
warriors jerseys
ugg outlet store
oakley sunglasses outlet
jordan pas cher
air max 90
michael kors outlet clearance
oakley sunglasses outlet
coach factory outlet
supra shoes
ray ban wayfarer sunglasses
gucci handbags
cheap nfl jerseys
pandora rings
christian louboutin
michael kors handbags
nhl jerseys
nike store
ugg boots
adidas superstar trainers
michael kors
louis vuitton outlet
nike shoes
adidas yeezy uk
omega seamaster
canada goose sale
adidas trainers uk
mbt shoes women
montblanc pens
cheap jordan shoes
vikings jerseys
ugg pas cher
spurs jerseys
cheap rolex watches
michael kors outlet online
moncler jacket
ralph lauren polo shirts
ralph lauren polo
ugg boots
abercrombie outlet
adidas originals superstar
mbt shoes men
oakleys sunglasses
nike air max 90
canada goose jackets
polo ralph lauren
clippers jerseys
coach factory outlet
adidas ultra boost uncaged
christian louboutin sale
canada goose jackets
cheap mlb jerseys
nike free run 5.0
coach outlet online
christian louboutin shoes
christian louboutin sale
chaussures jordan
mlb jerseys wholesale
coach factory outlet
adidas outlet
nike sb dunks
adidas yeezy
coach factory outlet
retro jordan shoes
nike roshe run
louis vuitton handbags
coach outlet online
ray ban outlet
abercrombie and fitch clothing
air max 2016
wizards jerseys
michael kors handbags
ralph lauren outlet
chaussures ugg
oakley sunglasses outlet
michael kors outlet
toms shoes outlet
polo ralph lauren uk
thunder jerseys
instyler curling iron
ray bans uk
oakley vault
cheap ray ban sunglasses
adidas zx 700
coach outlet store online clearances
polo shirts
louis vuitton outlet
ray ban sunglasses outlet
hollister outlet
hermes bags
michael kors outlet online
timberland shoes
oakley vault
ray ban glasses
seahawks jerseys
michael kors outlet store
michael kors outlet clearance
coach factory outlet
true religion jeans
cavaliers jerseys
louis vuitton handbags
true religion outlet
air max 95
toms outlet
michael kors outlet clearance
louboutin outlet
louboutin shoes
louboutin outlet
longchamp handbags
mcm handbags
celine outlet
ugg boots outlet
tod's shoes online
polo ralph lauren shirts
coach outlet
true religion
ugg canada
michael kors outlet
moncler jackets
nike blazer high
burberry handbags outlet
bengals jerseys
nike cortez classic
louis vuitton outlet
michael kors handbags
chanel bags
moncler outlet uk
north face jackets
kate spade
ice jerseys
red bottom heels
michael kors outlet online
cheap louis vuitton bags
mcm backpack
canada goose jackets
michael kors outlet clearance
louis vuitton handbags
louis vuitton handbags
jordan shoes
louis vuitton usa
abercrombie and fitch
bulls jerseys
cheap oakley sunglasses
knicks jerseys
pandora uk
sac longchamp
fitflops shoes
replica watches
mlb jerseys cheap
coach outlet online
ray ban clubmaster
coach outlet
canada goose jackets
adidas outlet
louis vuitton
longchamp le pliage
ray ban sunglasses outlet
broncos jerseys
nike trainers uk
ray ban outlet
canada goose outlet
fitflop sandals
canada goose jackets
polo outlet
oakley outlet
oakley sunglasses outlet
ugg outlet online
cheap jordans
coach outlet store online
prada bags
montblanc pen
ralph lauren outlet
coach factory outlet
pandora bracelet
pandora charms
ralph lauren polo shirts
ray bans uk
louis vuitton handbags
prada handbags
the north face outlet
gucci bags
toms outlet
louis vuitton outlet online
coach outlet online
cheap uggs
stivali ugg
beats headphones
cheap oakley sunglasses
louis vuitton handbags
louis vuitton outlet
rolex watches clearance
michael kors handbags uk
replica rolex
mavericks jerseys
calvin klein jeans
hogan sito ufficiale
cheap louis vuitton handbags
coach bags
replica rolex watches
coach factory outlet
coach outlet online
coach outlet store online clearances
ray ban sunglasses
chaussures christian louboutin
rolex watches
mont blanc ballpoint pen
louis vuitton outlet
true religion jeans
true religion outlet
cheap rolex watches
polo shirts
ed hardy clothing
ray ban sunglasses outlet
lunettes ray ban
kate spade handbags
cheap ray ban sunglasses
chanel handbags
louis vuitton belt
ray ban sunglasses outlet
ralph lauren outlet online
cheap rolex watches
louboutin pas cher
michael kors
cheap nhl jerseys
michael kors bags
tory burch
burberry handbags
canada goose coats
adidas yeezy boost
fitflops sale clearance
ralph lauren outlet
ray ban sunglasses cheap
christian louboutin shoes
true religion outlet
tommy hilfiger clothing
louis vuitton
hollister outlet
true religion jeans
cheap pandora jewelry
moncler outlet
ralph lauren polo shirts
cheap oakley sunglasses
cheap rolex watches
coach outlet store online clearances
nike roshe flyknit
cheap ugg boots
adidas originals trainers
polo outlet
adidas outlet store
adidas trainers uk
nike roshe run shoes
steelers jerseys
oakley sunglasses outlet
cheap ugg boots
ugg boots
coach outlet online
michael kors handbags
cheap ray ban sunglasses
louis vuitton outlet
ugg boots outlet
ugg outlet
louboutin sale
ray ban glasses
canada goose jackets
tory burch outlet online
pandora jewelry
polo ralph lauren
adidas nmd runner
gucci outlet
celine bags
coach factory outlet
louis vuitton bags
michael kors outlet
ugg outlet
louis vuitton
nike huarache 2015
christian louboutin heels
michael kors handbags
fitflop sandals
ralph lauren polo
nfl jerseys cheap
gucci outlet
retro jordan 13
toms outlet
coach outlet
adidas nmd r1
cheap ray bans
moncler pas cher
louis vuitton
ugg boots
nike huarache ultra
coach outlet store online clearances
coach factory outlet
moncler coats
toms outlet
heat jerseys
oakley canada
louis vuitton outlet
cheap ray ban sunglasses
mlb jerseys
the north face jackets
nike air max 2016
coach factory outlet
oakley sunglasses
mont blanc ballpoint pen
nike air max 90
timberland boots
christian louboutin shoes
beats by dre
ugg outlet stores
michael kors handbags clearance
polo ralph lauren
toms shoes
hilfiger outlet
canada goose jackets
hermes handbags
cheap jordan shoes
uggs sale
coach factory outlet
20172.14chenjinyan

Offline

#10 Aug. 16, 2017 12:47:39

chenjinyan
Registered: 2017-02-14
Posts: 280
Reputation: +  0  -
Profile   Send e-mail  

Time zones

ugg outlet
coach factory outlet
adidas yeezy boost
canada goose outlet
ray ban sunglasses
birkenstocks
chicago cubs jerseys
columbia shoes
coach factory outlet
nike air max
cheap ugg boots
fitflops uk
birkenstock sandals
ugg boots
pandora outlet
yeezy boost
christian louboutin
michael kors outlet
cheap mlb jerseys
miami heat jerseys
dansko sandals
adidas yeezy
kd 9 shoes
cheap ugg boots
ralph lauren uk
ralph lauren uk
tiffany and co
nike free run flyknit
philadelphia phillies jerseys
ugg ustralia
fit flops
oakley sunglasses
giuseppe zanotti sneakers
birkenstock outlet
uggs on sale
houston texans jerseys
adidas nmd
yeezy boost 350
nike outlet
cheap jordans
pandora outlet
columbia outlet online
jimmy choo
san francisco giants jerseys
ugg outlet
pandora jewelry
coach bags
oakley sunglasses
toms shoes outlet
vans shoes
coach outlet
coach outlet
rayban
dallas cowboys jerseys
ray ban sunglasses
louis vuitton outlet
gucci handbags
nike air max pas cher
ray ban sunglasses
louis vuitton
nmd adidas
pandora jewelry
louboutin chaussures
michael kors outlet online
michael kors outlet
coach outlet
polo ralph lauren outlet
kate spade outlet store
fitflops
pandora jewelry
ralph lauren uk
ugg outlet store
coach handbags
louboutin uk
detroit tigers jerseys
ray ban sunglasses discount
coach outlet
fred perry polo
jordans
cheap oakley sunglasses
michael kors outlet clearance
cheap nfl jerseys
cveland cavaliers jerseys
adidas nmd
ugg boots outlet
coach outlet
coach canada
fitflops
cheap oakley sunglasses
ugg boots on sale
valentino shoes outlet
coach outlet
nike cortez
swarovski crystal
fitflops sale clearance
kate spade handbags
cheap ray ban sunglasses
ray ban sunglasses
st louis cardinals jerseys
salomon shoes outlet
kate spade outlet
adidas outlet
michael kors handbags
canada goose outlet
cheap mlb jerseys
pandora outlet
longchamp uk
levis jeans
rolex watches
nike outlet online
louboutin
fitflops
ugg outlet
longchamp outlet store
canada goose sale
moncler jackets outlet
coach outlet
ralph lauren outlet
ray ban sunglasses
tiffany outlet
ralph lauren outlet
coach outlet store
mbt shoes
coach factory outlet
adidas superstar
coach outlet online
christian louboutin outlet
fitflops
air jordans
cheap ray ban sunglasses
pandora jewelry
pandora charms
louis vuitton handbags
adidas superstar shoes
mulberry handbags
ugg sale
air max 2017
ugg ustralia
toms outlet
fitflops
coach outlet
pandora soldes
salomon shoes
ugg australia
cheap jordans
louboutin shoes
coach outlet
ugg boots for women
cheap uggs
polo ralph lauren
ralph lauren outlet online
pandora
hermes handbags
kate spade handbags
coach factory outlet
dolce and gabbana outlet
beats headphones
nike shoes
kate spade bags
michael kors uk
nike huarache
james harden shoes
kate spade handbag
coach outlet
birkenstocks
rolex replica
ecco shoes
gucci handbags
michael kors outlet store
canada goose sale
yeezy boost
adidas shoes
pandora uk
beats by dre
ray ban sunglasses discount
nike store
polo ralph lauren outlet online
ugg outlet store
kate spade
pandora bijoux
adidas shoes
gucci purses
louis vuitton handbags outlet
christian louboutin
cheap jordans
true religion outlet
tiffany and co
ugg outlet
coach factory outlet
coach outlet
kate spade handbags
red bottoms
yeezy boost
polo ralph lauren
sac michael kors
burberry outlet
birkenstock shoes
ralph lauren outlet
fitflops shoes
nike air max
toms shoes outlet
michael kors handbags
air jordan uk
ugg boots
mulberry outlet
boston celtics jerseys
coach outlet
cheap jordans
nike shoes for men
coach factory outlet
true religion jeans
louboutin shoes
polo ralph lauren outlet
ed hardy
cheap uggs
nike outlet store
moncler jackets
chi flat iron
coach outlet store
ralph lauren sale clearance
louis vuitton outlet online
tory burch outlet store
sac longchamp pas cher
nike store
adidas yeezy boost
mlb jerseys wholesale
pandora charms
adidas outlet
doudoune moncler
adidas yeezy
moncler outlet
vans outlet store
canada goose
rolex replica watches
adidas outlet
kate spade handbags
polo ralph lauren
gucci outlet
birkenstock pas cher
polo ralph lauren
michael kors outlet
ed hardy clothing
adidas nmd
jordan shoes
harden vol 1
michael kors factory outlet
ugg boots canada
tods outlet
pandora charms sale
michael kors handbags
mlb jerseys cheap
coach outlet
canada goose
dansko shoes
ugg outlet
canada goose jackets
cheap nfl jerseys wholesale
louis vuitton factory outlet
tods shoes
coach outlet
nike air max
ultra boost
golden state warriors jerseys
pandora charms
mbt shoes
hermes handbags
fitflop sandals
true religion
birkenstock sandals
pandora charms
hermes bags
polo ralph lauren outlet
christian louboutin outlet
ralph lauren uk
louis vuitton outlet
nike shoes outlet
oklahoma city thunder jerseys
nike outlet
nike factory store
fitflops sale clearance
tory burch outlet
san antonios purs jerseys
borse gucci
canada goose
yeezy 350 boost
coach factory outlet
new york yankees jerseys
birkenstock shoes
oakley sunglasses
coach factory outlet
beats earbuds
toms shoes
mulberry uk
adidas pas cher
michael kors handbags
valentino
chicago bulls jerseys
canada goose uk
coach factory outlet
red bottoms shoes
michael kors
denver broncos jerseys
official coach factory outlet
coach outlet store
air max 2018
louis vuitton outlet store
nike free run black
coach outlet store online clearances
hermes handbags
ralph lauren outlet
moncler jackets
fred perry
ralph lauren sale clearance
kate spade
uggs
ralph lauren outlet
longchamp uk
nmd adidas
green bay packers jerseys
moncler
cheap jordans free shipping
fitflops sale
cheap jordans
coach outlet store
michael kors handbags
giuseppe zanotti outlet
under armour shoes
coach outlet
nfl jerseys wholesale
pandora charms
birkenstock sandals
longchamp handbags
fit flops
oakley sunglasses
pandora jewelry
ugg outlet
houston rockets jerseys
coach outlet
michael kors canada
seattles eahawks jerseys
ugg outlet
mulberry bags
michael kors outlet
adidas superstar
chicago white sox jerseys
adidas shoes
longchamp handbags
tiffany and co outlet
losangeles lakers jerseys
nike shoes
canada goose jackets
louis vuitton outlet
coach factory outlet online
christian louboutin outlet
louis vuitton pas cher
michael kors outlet clearance
pandora uk
oakley sunglasses
coach outlet
nike shoes
new england patriots jerseys
pandora charms sale clearance
canada goose outlet
coach factory outlet
kevin durant shoes
canada goose
adidas yeezy
valentino shoes
michael kors outlet
coach factory outlet
toms shoes
cheap ray bans
christian louboutin
burberry outlet canada
coach outlet online
pandora charms
jordan retro
discount ray ban sunglasses
michael kors outlet
clarks outlet
clarks shoes
moncler outlet
ghd straighteners
nike free flyknit
michael kors outlet
los angeles dodgers jerseys
coach factory outlet
christian louboutin outlet
moncler outlet
beats by dr dre
ghd hair straighteners
birkenstock sandals
michael kors outlet
nike free 5.0
pandora jewelry
gucci handbags
boston red sox jerseys
replica watches
cheap nfl jerseys
gucci uk
longchamp outlet
san francisco 49ers jerseys
coach outlet
coach factory outlet
jordan retro 11
cat shoes
coach factory outlet
fitflops
canada goose outlet
ray ban sunglasses
pandora jewelry outlet
coach factory outlet
gucci outlet
coach outlet store
longchamp bags
yeezy boost 350
gucci outlet
mbt shoes
texas rangers jerseys
pandora jewelry
yeezy boost 350
adidas yeezy
ugg boots
ugg boots
uggs canada
coach outlet
adidas superstar
adidas yeezy
michael kors outlet
cheap mlb jerseys
pandora charms
hermes birkin
adidas nmd
discount oakley sunglasses
ugg outlet store
nmd shoes
kate spade outlet
ralph lauren outlet
adidas superstar
louboutin pas cher
michael kors canada
michael kors handbags
pandora charms uk
ralph lauren outlet
cheap oakley sunglasses
ralph lauren sale clearance
polo ralph lauren
xsd8.16

Offline

Board footer

Moderator control

Powered by DjangoBB

Lo-Fi Version