def import_nuke_phpbb_users(self):
        cursor = self.conn.cursor()

        sql_user = """SELECT username, user_email, user_avatar,
        user_website, user_from, user_sig, user_regdate FROM nuke_phpbb_users
        ORDER BY user_id"""
        # sql_user += " LIMIT 0,550"
        sql_user += ";"

        cursor.execute(sql_user)

        context = self.context
        cnt = 0
        while True:
            row = cursor.fetchone()
            if row is None:
                break
            if row[0].lower() == 'anonymous':
                continue
            try:
                sht.add_user(
                    context=context,
                    username=row[0],
                    password=row[0],
                    groups=[],
                    email=row[1],
                    fullname="",
                    data={'portrait': sht.load_file(globals(),
                          'setupdata/avatar/%s' % row[2]),
                          'home_page': row[3],
                          'location': row[4],
                          'description': row[5],
                          },
                    logger=logger)

                # TODO: portrait must be set differently.
                # see:
                """
(11:25:34 PM) pelado: can someone tell me what is the way to set a portrait to a plone user?
(11:25:46 PM) pelado: programatically
(11:36:06 PM) supton: pelado: IIRC for now this is not a property of the user, but stored in a BTree on portal_memberdata
(11:36:31 PM) pelado: supton: thanks
(11:40:51 PM) supton: pelado: you likely want to look at Products.PlonePAS.tools.membership.MembershipTool.changeMemberPortrait() -- this is the official way now until this eventually lands https://dev.plone.org/ticket/11323 
                """

            except ValueError:
                logger.error("Invalid Username: %s, %s" % (row[0], row[1]))

            except:
                logger.error("Invalid Format: %s, %s" % (row[0], row[1]))

            cnt = cnt + 1; print cnt

        cursor.close()
def setup_dummy_content(context):

    if sht.isNotThisProfile(context, 'g24.importer-setup_dummy_content.txt'):
        return

    site = context.getSite()

    # setup admin + some test users
    sht.add_group(site, 'Members', roles=['Members'], logger=logger)

    # groups=['Administrators']

    sht.add_user(site, 'thet', 'thet',
            email='*****@*****.**', fullname="Johannes Raggam",
            groups=['Members'], logger=logger)


    sht.add_user(site, 'test1', 'test1',
            email='test1@localhost', fullname="Testuser1",
            groups=['Members'], logger=logger)

    sht.add_user(site, 'test2', 'test2',
            email='test2@localhost', fullname="Testuser2",
            groups=['Members'], logger=logger)

    sht.add_user(site, 'test3', 'test3',
            email='test3@localhost', fullname="Testuser3",
            groups=['Members'], logger=logger)


    # textparts to generate postings
    textparts  = [
            u'g24 10 Jahresfeier im Forum Stadtpark.',
            u'Musik Videos aus den 80er-Jahren',
            u'BürgerInneninitiative für eine Abschaffung der EU-Richtlinie zur Vorratsdatenspeicherung 2006/24/EG',
            u'Den – wortwörtlich – schwerpunkt bilden jetzt bassig-wummernde drones',
            u'Zumindest immer wieder, schöne, aber eisige harmonien. ',
            u'Seit kurzem ist die Festival-Website online und freudig kündigen wir die ersten Filme an',
            u'FM4, Biorama, The Gap, Junge Welt, oekonews.at, ZiGe.TV, Radio Helsinki, g24.at',
            u'Yeni Hayat, Analyse&Kritik, Lebensart, Luxemburg, iz3w ',
            u'Green Economy (Was wird im Rahmen der UNO diskutiert? Welche Chancen und Gefahren sind damit verbunden?',
            u'Mit einem spannenden, aktuellen Filmprogramm sowie zahlreichen Vorträgen, Workshops und Podiumsdiskussionen',
            u'Über direkte Demokratie im Nationalrat, Parteiprogramme, Liquid Democrazy, ... ',
            u'This module implements pseudo-random number generators for various distributions.',
            ]

    #pm = getToolByName(context, 'portal_membership')
    #myuser = pm.getMemberById('testuser3')


    def create_g24_posting(container, texts, cats, maxchilds):
        content = []
        for i in range(2, randint(3, 12)):
            content.append(texts[randint(0, len(texts)-1)])

        data = {
            'is_title': True,
            'title': texts[randint(0, len(texts)-1)],
            'text': u'\n'.join(content),
            'subjects': (cats[randint(0, len(cats)-1)], cats[randint(0, len(cats)-1)]),
        }

        obj = create(container, G24_BASETYPE)
        obj = add(obj, container)

        obj.setCreators(choice(users)) # set the creators by loginname. if more than one, seperate by whitespace
        obj.creation_date = base_DT + int(obj.id)

        edit(obj, data, order=FEATURES, ignores=IGNORES)
        logger.info('Created object with id: %s' % obj.id)

        myChilds = randint(0, maxchilds)
        for i in range(0, myChilds):
            create_g24_posting(obj, texts, cats, maxchilds - myChilds)

        return obj


    # postsfolder must exist. created by setup_content step
    postsfolder = site['posts']

    # create 25 randomized posting-threads
    for i in range(0, 25) :
        create_g24_posting(postsfolder, textparts, cat, 4)