コード例 #1
0
ファイル: blog.py プロジェクト: mrmaple/open_qon
def upgrade_visit_all_blogs():
    from base import get_group_database, get_user_database, commit_upgraded_versioneds
    
    count = 0
    item_count = 0
    for group_id, group in get_group_database().root.iteritems():
        for item in group.get_blog().get_items():
            item_count += 1
        
        for page_name, page in group.get_wiki().pages.iteritems():
            for item in page.blog.get_items():
                item_count += 1
        
        count += 1
        commit_upgraded_versioneds()
        print "Touched %d groups, %d items, %s" % (count, item_count, group_id)
        
    
    count = 0
    item_count = 0
    for user_id, user in get_user_database().root.iteritems():
        for item in user.get_blog().get_items():
            item_count += 1

        if count % 500 == 0:
            print "Touched %d users, %d items" % (count, item_count)
            commit_upgraded_versioneds()
        count += 1

    commit_upgraded_versioneds()
コード例 #2
0
ファイル: group_db.py プロジェクト: mrmaple/open_qon
def flush_all_owners_data_cache():
    """Flush all group owners' data caches."""
    from base import get_group_database
    
    group_db = get_group_database()
    
    for group_id, group in group_db.root.iteritems():
        for user in group.owners:
            flush_user_data_cache(user)
コード例 #3
0
ファイル: user_db.py プロジェクト: mrmaple/open_qon
 def new_user_from_email(self, email):
     """Create a new user with the given e-mail. Returns (User, password)"""
     from user import User
     from base import get_usergroup_database, get_group_database
     
     email = email.lower()
     
     user = User()
     password = user.new_user_from_email(email)
     user.add_to_group(get_usergroup_database()['users'])
     
     # check user id for uniqness FIXME should be in qon.user
     while self.has_key(user.get_user_id()) or self.retired_users.has_key(user.get_user_id()):
         user.generate_user_id()
     self.add_user(user)
     
     # join user to default group
     get_group_database().notify_new_user(user)
     
     return user, password
コード例 #4
0
ファイル: group_db.py プロジェクト: mrmaple/open_qon
def upgradeFixInvitations():
    """Remove any lingering invitations to users who are members of groups they are invited to."""
    from base import get_group_database, get_user_database
    
    user_db = get_user_database()
    group_db = get_group_database()
    
    for user in user_db.root.values():
        for g in group_db.users_groups(user):
            g.remove_invitation(user)
            group_db.invitations.remove_all_user_invitations(user, g)
コード例 #5
0
ファイル: blog.py プロジェクト: mrmaple/open_qon
def upgrade_blog_raw_text_format():
    """Compress all blog item text fields."""
    from base import get_group_database
    import transaction
    group_db = get_group_database()
    for g in group_db.root.values():
        for bi in g.blog.get_items():
            if not hasattr(bi, '_BlogItem__summary'):
                bi.set_summary(bi.get_summary())
                bi._p_changed = 1
        transaction.commit(True)
コード例 #6
0
ファイル: blog.py プロジェクト: mrmaple/open_qon
def check_items():
    """Check that all reachable BlogItems have their parent_blogitem field
    correctly set."""

    from base import get_group_database, get_user_database

    def check_item():
        """Check if item is properly in its blog's item list."""
        try:
            index = item.blog.item_index(item)
        except ValueError:
            print "ERROR: item /group/%s/%s not found in blog." % (
                item.blog.ihb.get_user_id(),
                item)

    def check_comments():
        comment_count = 0
        for comment in item.get_all_comments():
            if comment.parent_blogitem is not item:
                print "ERROR: /group/%s/%d/%d/ has invalid parent_blogitem." \
                    % (group_id, item_count, comment_count)
            comment_count += 1
    
    count = 0
    item_count = 0
    for group_id, group in get_group_database().root.iteritems():
        for item in group.get_blog().get_items():
            item_count += 1
            check_item()
            check_comments()
        
        for page_name, page in group.get_wiki().pages.iteritems():
            for item in page.blog.get_items():
                item_count += 1
                check_item()
                check_comments()
        
        count += 1
        print "Checked %d groups, %d items, %s" % (count, item_count, group_id)
        
    
    count = 0
    item_count = 0
    for user_id, user in get_user_database().root.iteritems():
        for item in user.get_blog().get_items():
            item_count += 1
            check_item()
            check_comments()

        if count % 500 == 0:
            print "Checked %d users, %d items" % (count, item_count)
        count += 1

    print "Checked %d users, %d items" % (count, item_count)
コード例 #7
0
ファイル: group_db.py プロジェクト: mrmaple/open_qon
def upgradeFixMemberPerms():
    """Fix duplicate permissions in member list perms."""
    from base import get_group_database
    
    for g in get_group_database().root.values():
        m = g.get_members()
        perms = m.get_perms()
        
        # new code will call unique_items on perms
        m.set_other_perms(perms[2])
        m.set_group_perms(perms[1])
        m.set_owner_perms(perms[0])
コード例 #8
0
ファイル: group_db.py プロジェクト: mrmaple/open_qon
def cleanup_invitations():
    """Remove duplicate and redundant invitations from global list and individual groups."""
    
    from base import get_group_database, get_user_database

    def user_name(user_or_email):
        if isinstance(user_or_email, HasEmail):
            return user_or_email.display_name()
        else:
            return user_or_email
    
    group_db = get_group_database()
    user_db = get_user_database()
    
    # sanity check and clean each group's invitation list
    for g in group_db.root.values():
        for user_or_email in g.invited_users.keys():
            user = user_db.resolve_user(user_or_email)
            if user:
                if g.is_member(user) or g.is_owner(user):
                    print "%s is already a member of %s, removing invitation." % (
                        user_name(user),
                        g.name)
                    g.remove_invitation(user_or_email)

    # check and clean global list
    for (email, invites) in group_db.invitations.root.iteritems():
        user = user_db.resolve_user(email)
        if user:
            for group_id in invites:
                g = group_db[group_id]
                if g.is_member(user) or g.is_owner(user):
                    print "%s is a member of %s, removing global invitation." % (
                        user_name(user),
                        g.name)
                    group_db.invitations.remove_all_user_invitations(user, g)
    
    # remove duplicate group entries in global list
    for (email, invites) in group_db.invitations.root.iteritems():
        invites = qon.util.unique_items(invites)
        group_db.invitations.root[email] = invites
コード例 #9
0
ファイル: group_db.py プロジェクト: mrmaple/open_qon
def upgradeAddInvitations():
    from base import get_group_database, get_user_database
    from persistent.mapping import PersistentMapping
    user_db = get_user_database()
    db = get_group_database()
    
    db.invitations = Invitations()
    for g in db.root.values():
        g.invited_users = PersistentMapping(g.invited_users)
        for email in g.invited_users.keys():
            db.invitations.add_invitation(email, g)
            
    # remove lingering invitations from when our code was dumb and left them
    for g in db.root.values():
        for email in g.invited_users.keys():
            try:
                user = user_db.get_user_by_email(email)
            except KeyError:
                pass
            else:
                if g.is_member(user):
                    del g.invited_users[email]
                    db.invitations.remove_all_user_invitations(user, g)
コード例 #10
0
ファイル: user_db.py プロジェクト: mrmaple/open_qon
def fix_broken_user_data_caches():
    """Scans all users to check if any of their user data caches are
    inaccurate, or worse, reference deleted groups."""
    from qon.base import get_user_database, get_group_database
    
    user_db = get_user_database()
    group_db = get_group_database()
    i = 0
    for user_id, user in user_db.root.iteritems():
        i += 1
        # print "%d) %s" % (i, user_id)

        # check/fix owned groups        
        if hasattr(user, '_group_owned_groups'):
            real_owned_groups = [group_db[group] for group in group_db.root.keys() \
                if group_db[group].is_owner(user)]
            if real_owned_groups != user._group_owned_groups:
                print "%s's _group_owned_groups isn't accurate" % user_id
                for g in user._group_owned_groups:
                    if not group_db.has_key(g.get_user_id()):
                        print "-%s's _group_owned_groups references deleted group %s" % (user_id, g.get_user_id())

                # fix it!                        
                user._group_owned_groups = real_owned_groups

        # check/fix member groups                
        if hasattr(user, '_group_member_groups'):
            real_member_groups = [group_db[group] for group in group_db.root.keys() \
                if group_db[group].is_member(user, slow=True)]            
            if real_member_groups != user._group_member_groups:
                print "%s's _group_member_groups isn't accurate" % user_id
                for g in user._group_member_groups:
                    if not group_db.has_key(g.get_user_id()):
                        print "-%s's _group_member_groups references deleted group %s" % (user_id, g.get_user_id())

                # fix it                        
                user._group_member_groups = real_member_groups
コード例 #11
0
ファイル: group_db.py プロジェクト: mrmaple/open_qon
def flush_user_data_cache(user):
    from base import get_group_database
    get_group_database()._flush_user_data_caches(user)
コード例 #12
0
ファイル: group_db.py プロジェクト: mrmaple/open_qon
def create_initial_groups():
    """Create initial top-level groups if they don't already exist."""
    
    from base import get_group_database, get_user_database
    import api
    
    # we want any groups we create in here to be active immediately
    save_min_sponsors = Group._min_sponsors
    Group._min_sponsors = 1
    
    user_db = get_user_database()
    group_db = get_group_database()
    
    user_admin = user_db['admin']
    
    def create_group(user_id, name, desc, owner, parent_id, join_pol, memb_vis, memb_edit=''):
        if not group_db.has_key(user_id):
            g = group_db.create_group(user_id=user_id,
                name=name,
                description=desc,
                owner=owner,
                no_pay=True)
            group_db.force_accept(g)
            if parent_id:
                group_db.join_group(g, group_db[parent_id], force=1)
    
        g = group_db[user_id]
        if join_pol:
            api.group_set_join_policy(user_admin, g, join_pol)
            if join_pol == 'open':
                # if membership is open, allow non-members to read
                api.group_set_other_perms(user_admin, g, 'ro')
        if memb_vis:
            api.group_set_membership_visible(user_admin, g, memb_vis)
        if desc:
            api.group_set_settings(user_admin, g, description=desc)
        if memb_edit:
            api.group_set_member_edit(user_admin, g, memb_edit)
            
        # set date of formation
        create = datetime(2004, 05, 10, 12, 0, 0)
        g.date = create
    
    
    groups = [
        ('top', 'Top', 'This group contains the top-level groups.', user_admin, None, '', 'open', ''),
        ('regional', 'Regional', 'Contains groups with a regional focus.', user_admin, 'top', '', 'open', ''),
        ('orgs', 'Organizations', 'Contains categories of organizations.', user_admin, 'top', '', 'open', ''),
        ('community', 'Community', 'Contains groups that are focused or based on ned.com.', user_admin, 'top', '', 'open', ''),
        ('issues', 'Issues', 'Contains groups focused on particular issues.', user_admin, 'top', '', 'open', ''),
        ('general', 'General', 'Contains groups that don\'t belong in other categories.', user_admin, 'top', 'open', 'open', ''),
        ('general-other', 'General', 'Contains groups that don\'t belong in other categories.', user_admin, 'general', 'open', 'open', ''),
        ('help', 'Help', 'Contains site help.', user_admin, 'community', '', 'open', ''),
        ('community-general', 'Community - General',
            '', user_admin, 'community', 'open', 'open', 'member'),
        ('suggestions', 'Suggestions', 'For community suggestions.', user_admin, 'community-general', '', 'open', ''),
        ('public', 'Public sector',
            'Groups operating in the public sector should join this group.', user_admin, 'orgs', 'open', 'open', 'member'),
        ('private', 'Private sector',
            'Groups operating in the private sector should join this group.', user_admin, 'orgs', 'open', 'open', 'member'),
        ('social', 'Social sector',
            'Groups operating in the social sector should join this group.', user_admin, 'orgs', 'open', 'open', 'member'),
        ('orgs-general', 'Organizations - General',
            "For organizations that don't fit in other categories.", user_admin, 'orgs', 'open', 'open', 'member'),
        ('issues-business', 'Business',
            '', user_admin, 'issues', 'open', 'open', 'member'),
        ('issues-cyf', 'Children - Youth - Families',
            '', user_admin, 'issues', 'open', 'open', 'member'),
        ('issues-education', 'Education',
            '', user_admin, 'issues', 'open', 'open', 'member'),
        ('issues-env', 'Environment - Conservation',
            '', user_admin, 'issues', 'open', 'open', 'member'),
        ('issues-health', 'Health Care',
            '', user_admin, 'issues', 'open', 'open', 'member'),
        ('issues-pol', 'Policy - Politics',
            '', user_admin, 'issues', 'open', 'open', 'member'),
        ('issues-religion', 'Religion',
            '', user_admin, 'issues', 'open', 'open', 'member'),
        ('issues-soc', 'Social Justice - Human Services',
            '', user_admin, 'issues', 'open', 'open', 'member'),
        ('issues-tech', 'Technology',
            '', user_admin, 'issues', 'open', 'open', 'member'),
        ('issues-general', 'Issues - General',
            '', user_admin, 'issues', 'open', 'open', 'member'),
        ('ned', '<ned> Network',
            '', user_admin, '', '', '', ''),
        ('ned-internal', 'Ned - Internal',
            '', user_admin, '', '', '', ''),
        ('sitedev', 'Site Development',
            '', user_admin, 'ned-internal', '', '', ''),
        ]
    
    for user_id, name, desc, owner, parent_id, join_pol, memb_vis, memb_edit in groups:
        create_group(user_id, name, desc, owner, parent_id, join_pol, memb_vis, memb_edit)
    
    # Help group
    g_help = group_db['help']
    api.group_set_anon_read(user_admin, g_help, True)
                            
    # ON groups
    g_on = group_db['ned']
    group_db.join_group(g_on, group_db['private'], force=1)
    group_db.join_group(g_on, group_db['public'], force=1)
    group_db.join_group(g_on, group_db['social'], force=1)
    api.group_set_owners_by_user_id(user_admin, g_on, ['admin', 'jimc'])
    api.group_set_join_policy(user_admin, g_on, 'owner')
    api.group_set_invite_policy(user_admin, g_on, 'owner')
    api.group_set_membership_visible(user_admin, g_on, 'open')
    api.group_set_member_edit(user_admin, g_on, True)
    api.group_set_anon_read(user_admin, g_on, True)
        
    g_on_int = group_db['ned-internal']
    api.group_set_owners_by_user_id(user_admin, g_on_int, ['admin', 'jimc'])
    api.group_set_join_policy(user_admin, g_on_int, 'owner')
    api.group_set_invite_policy(user_admin, g_on_int, 'owner')
    api.group_set_membership_visible(user_admin, g_on_int, 'member')
    api.group_set_member_edit(user_admin, g_on_int, True)
    api.group_set_anon_read(user_admin, g_on_int, False)
    
    g_sitedev = group_db['sitedev']
    api.group_set_owners_by_user_id(user_admin, g_sitedev, ['admin', 'jimc'])
    
    Group._min_sponsors = save_min_sponsors