示例#1
0
    def save_similar_groups_into_database(filename='tmp/groups.csv'):
        """
        Saves the group data from a .csv file into the database.
        :param filename: – a string name of .csv file with group information
        """
        with open(filename, 'r') as f:
            reader = csv.reader(f)
            groups = list(reader)

            # An array of groups to save into the database
            group_instances = []

            # Fill the list of groups
            for group in tqdm(groups[1:]):
                name = group[0]
                common = group[1]
                gid = group[2]

                group_instance = Group(gid=gid)
                group_instance.name = name
                group_instance.common_users = common

                group_instances.append(group_instance)

            # Add all into the database
            db.session.add_all(group_instances)
            db.session.commit()
示例#2
0
def seed_groups():
    user1 = User.query.get(1)
    user2 = User.query.get(2)
    user3 = User.query.get(3)

    group1 = Group(name="Gryffindor")

    db.session.add(group1)

    group2 = Group(name="Ravenclaw")

    db.session.add(group2)

    group3 = Group(name="Hufflepuff")

    db.session.add(group3)

    group4 = Group(name="Slytherin")

    db.session.add(group4)

    user1.groups.append(group1)
    user1.groups.append(group2)
    user1.groups.append(group3)
    user2.groups.append(group1)
    user2.groups.append(group2)
    user2.groups.append(group3)
    user3.groups.append(group1)
    user3.groups.append(group2)
    user3.groups.append(group3)
    db.session.commit()
示例#3
0
def moderation():
    if current_user.role == 'admin':
        groups = Group.query.all()
        admins = User.query.filter_by(role='admin').all()

        current_time = {}

        create_moderator_form = CreateModerForm()
        for group in groups:
            current_time[group.name] = datetime.now() + timedelta(hours=int(group.time_zone)) - timedelta(hours=int(Config.SERVER_TIME_ZONE))

        if create_moderator_form.validate_on_submit():
            if create_moderator_form.submit.data and create_moderator_form.validate():
                for group in create_moderator_form.group.data:
                    gr = Group.query.get(group.id)
                    us = User.query.get(create_moderator_form.user.data.id)
                    gr.moderators.append(us)
                    db.session.commit()
                return redirect(request.referrer)

        create_group_form = CreateGroupForm()
        if create_group_form.validate_on_submit():
            if create_group_form.submit.data and create_group_form.validate():
                group = Group()
                group.name = create_group_form.name.data
                db.session.add(group)
                db.session.commit()
                return redirect(request.referrer)

        return render_template('admin/moderation.html', groups=groups, create_group_form=create_group_form,
                               create_moderator_form=create_moderator_form, current_time=current_time)
    else:
        return redirect(url_for('main.index'))
示例#4
0
def add_group_form(form):
    """
    Create a new Group table
    :param form:
    :return: if the group can be added, return the id of the group, else return False
    """
    name = form.name.data
    if Group.from_name(name) is not None:
        flash("Ce groupe existe déjà", "danger")
        return False

    is_private = (form.is_private.data == 'private')
    password = form.password.data

    if not password and is_private:
        flash("Vous devez mettre un mot de passe pour un groupe privé",
              "danger")
        return False
    elif len(password) > 10:
        flash("Veuillez rentrer un mot de passe de moins de 10 caractères",
              "warning")
        return False

    db.session.add(
        Group(name=name,
              is_private=is_private,
              password=password,
              manager_id=current_user.id))
    group_id = Group.from_name(name).id
    db.session.add(Participate(group_id=group_id, member_id=current_user.id))
    db.session.commit()
    return group_id
示例#5
0
 def test_mass_delete(self):
     from app.models import Group
     g1 = Group(name="g1", project_id=self.project1._id)
     g1.save()
     h1 = Host(fqdn="host1", group_id=g1._id)
     h1.save()
     h2 = Host(fqdn="host2", group_id=g1._id)
     h2.save()
     h3 = Host(fqdn="host3", group_id=g1._id)
     h3.save()
     h4 = Host(fqdn="host4", group_id=g1._id)
     h4.save()
     r = self.post_json("/api/v1/hosts/mass_delete",
                        {"host_ids": [str(h2._id), str(h3._id)]})
     self.assertEqual(200, r.status_code)
     data = json.loads(r.data)
     self.assertIn("data", data)
     hosts_data = data["data"]
     self.assertIn("hosts", hosts_data)
     hosts_data = hosts_data["hosts"]
     self.assertIs(list, type(hosts_data))
     self.assertEqual(2, len(hosts_data))
     deleted_hosts = Host.find({"_id": {"$in": [h2._id, h3._id]}})
     self.assertEqual(0, deleted_hosts.count())
     g1 = Group.find_one({"_id": g1._id})
     self.assertItemsEqual([h1._id, h4._id], g1.host_ids)
示例#6
0
def init_database():
    # applies all alembic migrations
    upgrade()
    Group.establish_enemies()

    yield db

    db.drop_all()
示例#7
0
def deploy():
    """部署"""
    from flask_migrate import upgrade
    from app.models import Role, User, Group, Tag
    upgrade()
    Role.insert_roles()
    User.add_self_follows()
    Group.insert_groups()
    Tag.insert_tags()
示例#8
0
def post():
    form = GroupForm()  # need to create a form
    if form.validate_on_submit():
        new_group = Group()
        new_group.leader_id = request.json["leader_id"]
        form.populate_obj(new_group)
        db.session.add(new_group)
        db.session.commit()
        return new_group.to_dict()
    return "Bad Data"
示例#9
0
def get_group_list(itchat):
    '''
    获取群列表,并将其插入到 group 数据库中
    :param itchat:
    :return:
    '''
    room_list = itchat.get_chatrooms()
    room_names = [room.NickName for room in room_list]
    Group.create_group_from_name_list(room_names)
    return room_names
示例#10
0
 def test_delete_group(self):
     self.test_create_group()
     group = Group.find_one({"name": "group1"})
     r = self.delete("/api/v1/groups/%s" % group._id)
     self.assertEqual(r.status_code, 200)
     data = json.loads(r.data)
     self.assertIn("data", data)
     group_data = data["data"]
     self.assertEqual(group_data["_id"], None)
     group = Group.find_one({"_id": group._id})
     self.assertIsNone(group)
示例#11
0
def addGroup(name):
    """Add group to database.
    args:
        name: string
    """
    group = Group()
    group.name = name
    group.members.append(current_user)
    db.session.add(group)
    db.session.commit()
    return group.id
示例#12
0
def create_group():
    form = GroupRegistrationForm()
    if form.validate_on_submit():
        group = Group(group_name=form.group_name.data,
                      owner_id=current_user.id)
        group.set_password(form.password.data)
        db.session.add(group)
        # add the current user to the group
        current_user.group = group
        db.session.commit()
        return redirect(url_for('group'))
    return render_template("group_register.html", form=form)
示例#13
0
def permission_add():
    '''/admin/Permission/add'''
    form = AddpermissionForm()
    if form.validate_on_submit():
        group = Group.query.filter_by(name=form.name.data).first()
        if not group:
            Group.insert_group(form.name.data, form.description.data)
            return jsonify({'code': 1, 'msg': '添加成功!'})
        else:
            return jsonify({'code': 0, 'msg': '组名已存在!'})

    return render_template('admin/permission/add.html', form=form)
示例#14
0
def deploy():
    """Build Roles and migrate/upgrade the database(?)
	"""
    print("Inserting Roles...")

    Role.insert_roles()

    Group.insert_groups()

    print("Finished!")

    return
示例#15
0
def add_group():
    form = AddGroupForm()
    if form.validate_on_submit():
        gid = form.gid.data
        group = Group(gid)
        group.user_id = g.user.id
        db.session.add(group)
        db.session.commit()

        run_watching()

    return redirect(url_for('index'))
示例#16
0
def groups():
    method = request.method
    if method == 'GET':
      # Get all Groups
        groups = Group.query.order_by(Group.createdAt.desc())
        return {"groups": [group.to_dict() for group in groups]}
    elif method == 'POST':
      # Add a new Group
        group_name = request.json["groupName"]
        group = Group(name=group_name)
        db.session.add(group)
        db.session.commit()
        return jsonify(group.to_dict())
示例#17
0
def add_group(request):
    login = login_verify(request, None, True)
    if login:
        return login
    if request.method == 'POST':
        name = request.POST.get('name', '')
        user = Group(name=name)
        user.save()
        return HttpResponseRedirect('/list_groups/')
    else:
        form = AddGroupForm()
        context = {'form': form}
        return render(request, 'app/add_group.html', context)
def create_groups(groups):
    """Add groups to db"""
    for group in groups:
        grp = Group(
            code=group['code'],
            active=bool(group['active']),
        )
        db.session.add(grp)
        db.session.commit()
        for module in group['modules']:
            m = Module.query.filter_by(code=module).first()
            grp.add_module_to_group(m)
        db.session.commit()
示例#19
0
 def groups():
     if request.method == "POST":
         name = request.args['name']
         if name:
             group = Group(name=name)
             group.save()
             response = {'id': group.id, 'name': group.name}
         return render_template("basic.html", data=response)
     else:
         return render_template("basic.html",
                                data={
                                    'id': -1,
                                    'name': "none"
                                })
示例#20
0
    def test_get_groups(self):
        '''
        Test case to check if all groups are returned by the get_groups function
        '''

        self.new_group.save_group()

        test_group = Group(name="Product Pitches")

        test_group.save_group()

        gotten_groups = Group.get_groups()

        self.assertTrue(len(gotten_groups) == len(Group.query.all()))
示例#21
0
def addGroup():
    if current_user.group.is_admin:
        form = CreateGroupForm()
        if form.validate_on_submit():
            group = Group(group_name=form.group_name.data)
            group.group_email = form.group_email.data
            group.group_password = form.group_password.data
            group.is_admin = form.group_is_admin.data
            db.session.add(group)
            db.session.commit()
            flash('Congratulations, you created the group {}'.format(
                group.group_name))
            return redirect(url_for('user', username=current_user.username))
        return render_template('add_group.html', form=form, title='Add Group')
    return redirect(url_for('index'))
示例#22
0
 def create(self, data):
     self.add_base_info(data)
     user = user_service.create_user(data['username'], data['password'])
     group = Group.find_by_id(data['group_id'])
     if group is None:
         group = Group(id=data['group_id'])
         group.add_to_db()
     student = Student(fio=data['fio'],
                         fullname=data['fullname'],
                         admission_year=data['admission_year'], 
                         group_id=group.id)
     student.account = user
     student.add_to_db()
     db.session.commit()
     return data
示例#23
0
def show(group_id=None):
    from app.models import Group
    if group_id is None:
        query = {}
        if "_filter" in request.values:
            name_filter = request.values["_filter"]
            if len(name_filter) >= 2:
                query["name"] = {"$regex": "^%s" % name_filter}
        groups = Group.find(query)
    else:
        group_id = resolve_id(group_id)
        groups = Group.find({"$or": [{"_id": group_id}, {"name": group_id}]})

    data = paginated_data(groups.sort("name"))
    return json_response(data)
示例#24
0
文件: admin.py 项目: efornal/mollys
    def change_view(self, request, object_id, form_url='', extra_context=None):

        person = Person.objects.get(id=object_id)
        enable_ldap_connection = LdapConn.enable()
        exists_in_ldap = None
        groups = None
        suggested_ldap_name = ''
        suggested_ldap_email = ''

        if enable_ldap_connection:
            exists_in_ldap = Person.exists_in_ldap( person.ldap_user_name )
            groups = Group.all()
            suggested_ldap_name = Person.suggested_name(object_id)
            if hasattr(settings, 'LDAP_DOMAIN_MAIL') and settings.LDAP_DOMAIN_MAIL:
                suggested_ldap_email = "{}@{}".format(suggested_ldap_name,
                                                     settings.LDAP_DOMAIN_MAIL)
        else:
            messages.warning(request, _('ldap_without_connection'))

        context = {'suggested_ldap_name': suggested_ldap_name,
                   'suggested_ldap_email': suggested_ldap_email,
                   'groups': groups,
                   'hide_save_box': (not enable_ldap_connection),
                   'exists_in_ldap': exists_in_ldap }
        
        return super(PersonAdmin, self).change_view(request, object_id,'',context)
示例#25
0
 def create_student(self, data):
     user = user_service.create_user(data['username'], data['password'])
     group = Group.find_by_id(data['group_id'])
     if group is None:
         group = Group(id=data['group_id'])
         group.add_to_db()
     student = Student(lastname=data['lastname'],
                       firstname=data['firstname'],
                       patronymic=data['patronymic'],
                       rank=data['rank'],
                       admission_year=data['admission_year'],
                       group_id=group.id)
     student.account = user
     student.add_to_db()
     db.session.commit()
     return student
示例#26
0
def get_executer_data(query, recursive=False, include_unattached=False):
    from app.models import Project, Datacenter, Group, Host

    host_fields = list(Host.FIELDS)
    group_fields = list(Group.FIELDS)

    if recursive:
        host_fields += ["all_tags", "all_custom_fields"]
        group_fields += ["all_tags", "all_custom_fields"]

    projects = Project.find(query)
    projects = cursor_to_list(projects)
    project_ids = [x["_id"] for x in projects]

    groups = Group.find({"project_id": {"$in": project_ids}})
    groups = cursor_to_list(groups, fields=group_fields)
    group_ids = [x["_id"] for x in groups]

    if include_unattached:
        hosts = Host.find({})
    else:
        hosts = Host.find({"group_id": {"$in": group_ids}})
    hosts = cursor_to_list(hosts, fields=host_fields)

    datacenters = Datacenter.find({})
    datacenters = cursor_to_list(datacenters)
    return {
        "datacenters": datacenters,
        "projects": projects,
        "groups": groups,
        "hosts": hosts
    }
示例#27
0
def create_group(user_id):
    print(f"{user_id} making post request to /group")

    post_data = request.get_json()

    group_name = post_data['group_name']

    print(group_name)

    #TODO: there is no need for group to have unique name
    group = Group.query.filter_by(name=group_name).first()
    if group:
        return make_response(
            jsonify({
                "success": False,
                "message": "group already exists. Try a different name"
            })), 409

    # TODO: add the member in a transaction
    group = Group(name=group_name)
    db.session.add(group)
    db.session.commit()

    group = group.query.filter_by(name=group_name).first()

    member = Member(user_id, group.id, False)

    db.session.add(member)
    db.session.commit()

    return make_response(
        jsonify({
            "success": True,
            "message": "group created successfully"
        })), 200
示例#28
0
def index(page=1):
    """
    主页显示组别
    """
    if request.method == 'POST':
        # 获取前端请求数据
        if not request.json or not 'group_id' in request.json:
            return jsonify({'code': 0, 'message': 'Missing Parameters'})
        group_id = request.get_json().get('group_id')
        try:
            articles = Article.query.filter_by(group_id=group_id, is_delete=0)
            urls = [Article.to_dict(article) for article in articles]
            if len(urls) < 1:
                return jsonify({'code': 0, 'message': 'Data Not Found'})
            return jsonify({'code': 1, 'urls': urls, 'message': 'Success'})
        except:
            return jsonify({'code': 0, 'message': 'Database query failed'})
    else:
        # 显示所有组别以及默认返回第一组的文章链接
        current_page = request.args.get('current_page', page)
        g_count = Config.GROUPCOUNT
        group_count = request.args.get('group_count', g_count)  # 默认一页显示10组
        try:
            pagination = Group.query.filter_by(is_delete=0).paginate(current_page, group_count, error_out=False)
            groups = pagination.items
            groups = [Group.to_dict(group) for group in groups]
            count = Group.query.filter_by(is_delete=0).count()
            group_id = (page - 1) * g_count + 1  # 比如点击第一页的时候默认显示第一组的文章链接,点击第二页的时候默认显示第十一组的文章链接
            articles = Article.query.filter_by(group_id=group_id, is_delete=0)
            urls = [Article.to_dict(article) for article in articles]
            if len(urls) < 1:
                urls = 'Data Not Found'
            return jsonify({'code': 1, 'groups': groups, 'count': count, 'urls': urls, 'message': 'Success'})
        except:
            return jsonify({'code': 0, 'message': 'Database query failed'})
示例#29
0
def register():
    # if current_user.is_authenticated:
    #     return redirect(url_for('group', groupname=session['groupname']))
    form = RegistrationForm()
    if form.validate_on_submit():
        user = User(username=form.username.data.lower(),
                    email=form.email.data,
                    usertype=form.usertype.data)
        user.set_password(form.password.data)
        db.session.add(user)
        db.session.commit()

        # auto-generate group when a new elderly user registered
        if form.usertype.data == "elderly":
            group = Group(groupname="Group-" + form.username.data.lower(),
                          elder=form.username.data,
                          admin=form.username.data)
            db.session.add(group)

            # let the registered elderly join his own gorup
            myuser = User.query.filter(
                User.username == form.username.data).first()
            mygroup = Group.query.filter(
                Group.admin == form.username.data).first()
            myuser.join_group(mygroup)
            db.session.commit()

        flash('Welcome new user, please login now!', 'success')
        return redirect(url_for('auth.login'))

    return render_template('register.html', title='Register', form=form)
示例#30
0
    def create_groups():
        req = request.get_json()
        g_name = req['groupname']
        has = Group.query.filter_by(group_name=g_name).first()
        if has:
            return jsonify({'status': 400})

        group = Group(group_name=g_name, manager_id=current_user.id)
        db.session.add(group)
        db.session.commit()

        g_id = Group.query.filter_by(group_name=g_name).first()
        datas = req['data']
        for data in datas:
            vh = GroupValidHeaders(group_id=g_id.id,
                                   header_name=data['header'],
                                   data_type=data['type'])
            db.session.add(vh)
            db.session.commit()

        db.engine.execute(
            text(
                f"UPDATE `user` SET group_id = {g_id.id} where id={current_user.id}"
            ))
        return jsonify({'status': 200})
示例#31
0
def group_create():
    """Create new group based on post request from network page modal."""
    form = GroupCreateForm()
    code = 200
    if current_user.email_verified and request.method == 'POST':
        if form.validate():
            group = Group.create(
                name=form.name.data, description=form.description.data,
                admin_id=current_user.id
            )
            current_user.add(group)
            flash(
                f"Successfully created {group.name} and added you as member."
            )
            return redirect(url_for('relationship.network_groups'))
        else:
            flash(
                "Group creation failed.  Please correct errors and resubmit."
            )
            code = 422
    elif not current_user.email_verified:
        disableForm(form)
        flash("Create new group disabled. Please verify email to unlock.")
    return render_template("relationship/groupcreate.html", form=form,
                           title="Create Group"), code
示例#32
0
def download_files(msg):
    '''下载一些文件'''
    group_dict = Group.name_id_dict()

    group = msg.User.NickName
    group_id = group_dict.get(group, 'group_name')
    data = {
        'id': msg.NewMsgId,
        'type': msg.Type,
        'create_time': float(msg.CreateTime),
        'group': group,
        'group_id': group_id,
        'user_actual_name': msg.ActualNickName,
    }
    file_type = msg.type
    file_path = os.path.join(basedir, 'data', group, file_type)
    if not os.path.exists(file_path):
        os.makedirs(file_path)
    fileName = os.path.join(file_path, msg.fileName)
    msg.download(fileName)
    data['content'] = fileName
    group_msg = GroupMsg.create(data)

    msg['Text'] = '下载方法'
    log(zh_str(msg), 'file.txt')
    log(zh_str(group_msg.to_dict()), 'down_load.txt')
    print '@%s@%s' % (msg.type, msg.fileName)
示例#33
0
def createGroup(request):
    userid = request.user.username
    user = Users.objects.get(user_id = userid)

    if request.method == "POST":
        name = request.POST.get('name', '')
        description = request.POST.get('description', '')
        creator = request.user.username
        if name != "" and description != "":
            newGroup = Group(group_name = name, group_description=description,creator=creator,
                             member_2="None", member_3="None")
            newGroup.save()
            user.group = name
            user.save()

            return HttpResponseRedirect('/createGroup_success')
        else:
            return HttpResponseRedirect('/createGroup_invalid')
    return render(request, 'CreateGroup.html', {})
示例#34
0
def groupAdd(request):
    """
    add group
    """
    if request.method=="POST":
        myDict = dict(request.POST.iterlists())
        if(not myDict.get('AddGroup')):
            return
        name=myDict['EditGroupName'][0].strip()
        if(name==''):
            messages.error(request, '组名不能为空')
            return
        if(Group.objects.filter(name=name).count()!=0):
            messages.error(request, '组名已存在')
            return
        mG=Group(name=name)
        if(myDict.get('EditGroupMember')):
            leaderID=myDict['EditLeaderID'][0]
            leader=Staff.objects.get(id=leaderID)
            mG.leader=leader
            mG.save()
            selectMem=myDict.get('EditGroupMember')
            for mem in selectMem:
               staff=Staff.objects.get(id=mem)
               mG.member.add(staff)
        mG.save()
        cache.clear()
        messages.success(request, '添加成功')
示例#35
0
文件: forms.py 项目: gshiva/microblog
 def validate(self):
     if not Form.validate(self):
         return False
     if self.name.data == self.original_name:
         return True
     if self.name.data != Group.make_valid_name(self.name.data):
         self.name.errors.append(gettext('This name has invalid characters. Please use letters, numbers, dots and underscores only.'))
         return False
     org = Organization.query.filter_by(name = self.org_name).first()
     if org == None:
         self.name.errors.append(gettext('The organization name was not found'))
         return False
     env = org.envs.filter_by(name = self.env_name).first()
     if env == None:
         self.name.errors.append(gettext('The environment name was not found'))
         return False
     grp = env.groups.filter_by(name = self.name.data).first()
     if grp != None:
         self.name.errors.append(gettext('The group name already exists'))
         return False
     return True
示例#36
0
文件: group.py 项目: viaict/viaduct
def edit(group_id):
    if not (ModuleAPI.can_write("group")):
        return abort(403)

    group = Group.by_id(group_id)

    form = EditGroup(request.form, group)
    if request.method == "POST":
        form = EditGroup(request.form)

        if form.validate_on_submit():
            name = form.data["name"].strip()
            maillist = form.data["maillist"].strip().lower()

            valid_form = True

            group_with_same_name = Group.query.filter(Group.name == name, Group.id != group_id).first()
            if group_with_same_name is not None:
                flash("The naam van de groep wordt al gebruikt", "danger")
                valid_form = False

            if valid_form:
                group.name = name
                group.maillist = maillist
                if maillist == "":
                    group.maillist = None
                else:
                    group.maillist = maillist

                db.session.commit()
                google.create_group_if_not_exists(name, maillist)
                group.add_members_to_maillist()

                flash("De groep is aangepast.", "success")

                return redirect(url_for("group.view"))

    return render_template("group/create.htm", title="Pas groep aan", form=form, group=group)
示例#37
0
from app import db
from app.models import Group, Contact
import random
from datetime import datetime
import sys

def get_random_name(names_list, size = 1):    
    name_lst =  [names_list[random.randrange(0,len(names_list))].capitalize() for i in range(0, size)]
    return " ".join(name_lst)
         

g1 = Group()
g1.name = 'Friends'
g2 = Group()
g2.name = 'Family'
g3 = Group()
g3.name = 'Work'
try:
    db.session.add(g1)
    db.session.add(g2)
    db.session.add(g3)
    db.session.commit()
except:
    db.session.rollback()

f = open('NAMES.DIC', "rb")
names_list = [x.strip() for x in f.readlines()]
    
f.close()

示例#38
0
from app import db
from app.models import Group, Gender, Contact
import random
from datetime import datetime
import sys

def get_random_name(names_list, size = 1):    
    name_lst =  [names_list[random.randrange(0,len(names_list))].capitalize() for i in range(0, size)]
    return " ".join(name_lst)
         

g1 = Group()
g1.name = 'Friends'
g2 = Group()
g2.name = 'Family'
g3 = Group()
g3.name = 'Work'
try:
    db.session.add(g1)
    db.session.add(g2)
    db.session.add(g3)
    db.session.commit()
except:
    db.session.rollback()

g1 = Gender()
g1.name = 'Male'
g2 = Gender()
g2.name = 'Female'
try:
    db.session.add(g1)
from datetime import datetime

from app.models import Participant, Group, Event, ExpenseType, Weight, Expense

group_a = Group(name="Family A")
group_a.save()
group_b = Group(name="Family B")
group_b.save()
group_c = Group(name="Family C")
group_c.save()

event = Event(name="Holidays in Greece", start_date=datetime.now(), end_date=datetime.now())
event.save()

participant_a = Participant(
    first_name ="John",
    last_name  = "A",
    email      = "*****@*****.**",
    join_date  = datetime.now(),
    group      = group_a
)
participant_a.save()
participant_a.event = [event]
participant_a.save()

participant_b = Participant(
    first_name ="Jack",
    last_name  = "B",
    email      = "*****@*****.**",
    join_date  = datetime.now(),
    group      = group_b
示例#40
0
文件: admin.py 项目: efornal/mollys
    def save_model(self, request, obj, form, change):
        
        ldap_user_name = str(obj.ldap_user_name) if obj.ldap_user_name else None
        udn = Person.ldap_udn_for( ldap_user_name )

        try:
            if (not ldap_user_name) or (ldap_user_name is None):
                logging.warning("An LDAP user was not given. It is not updated!")
                super(PersonAdmin, self).save_model(request, obj, form, change)
                return
            
            if Person.exists_in_ldap(ldap_user_name): # actualizar
                ldap_person = Person.get_from_ldap(ldap_user_name)

                # update data
                ldap_person.update_ldap_data_from(obj)

                # update password only for superuser
                if str(ldap_person.ldap_user_password) != str(obj.ldap_user_password) \
                   and request.POST.has_key('ldap_user_password_check'):
                    if request.user.is_superuser:
                        logging.warning("User '%s' already exists in Ldap. changing password.." % ldap_user_name)
                        Person.update_ldap_user_password ( ldap_user_name, str(obj.ldap_user_password) )
                    else:
                        raise ValidationError( _('cant_change_password') )
                    
                # update group only for superuser
                if str(ldap_person.group_id) != str(obj.group_id):
                    if request.user.is_superuser:
                        logging.warning("User '%s' already exists in Ldap. Changing group '%s' by '%s'.." % \
                                     (ldap_user_name,ldap_person.group_id, obj.group_id ) )
                        Group.add_member_to(ldap_user_name, {'group_id': str(obj.group_id)})
                        Group.remove_member_of(ldap_user_name, ldap_person.group_id)
                        ldap_person.update_ldap_gidgroup( str(obj.group_id) )
                    else:
                        raise ValidationError( _('cant_change_group') )

            else: # crear nuevo
                new_uid_number = Person.next_ldap_uidNumber()
                if not (new_uid_number > 0):
                    logging.error( "The following 'ldap user uid' could not be determined. " \
                                   "The value obtained was %s" % str(new_uid_number))
                    raise ValidationError( _('without_ldap_user_uid') )

                if Person.exist_ldap_uidNumber(new_uid_number):
                    logging.error("The ldap user uidNumber '%s' already exist!." % str(new_uid_number))
                    new_uid_number = 0
                    raise ValidationError( _('uidnumber_already_exist') % {'uidnumber':str(new_uid_number)} )

                # Create new ldapp user
                cnuser = LdapConn.parseattr( "%s %s" % (obj.name, obj.surname) )
                snuser = LdapConn.parseattr( "%s" % obj.surname )
                new_user = [
                    ('objectclass', settings.LDAP_PEOPLE_OBJECTCLASSES),
                    ('cn', [cnuser]),
                    ('sn', [snuser]),
                    ('givenName', [ LdapConn.parseattr(obj.name)] ),
                    ('paisdoc', [settings.LDAP_PEOPLE_PAISDOC] ),
                    ('tipodoc', [str(obj.document_type)] ),
                    ('numdoc', [str(obj.document_number)] ),
                    ('uidNumber', [str(new_uid_number)] ),
                    ('userPassword', [str(obj.ldap_user_password)] ),
                    ('homedirectory', [str('%s%s' % ( settings.LDAP_PEOPLE_HOMEDIRECTORY_PREFIX,
                                                      ldap_user_name))]),
                    ('gidNumber', [str(obj.group_id)] ),
                    ('loginShell', [str(settings.LDAP_PEOPLE_LOGIN_SHELL)]),]

                if obj.position:                
                    new_user.append(('employeeType', [str(obj.position)] ))
                if obj.area:
                    new_user.append(('destinationIndicator', [str(obj.area)]))
                if obj.floor:
                    new_user.append(('departmentNumber', [str(obj.floor)] ))
                if obj.work_phone:
                    new_user.append(('telephoneNumber', [str(obj.work_phone)]))
                if obj.home_phone:
                    new_user.append(('homePhone', [str(obj.home_phone)]))
                if obj.office_name():
                    new_user.append(('physicalDeliveryOfficeName',
                                     [str(LdapConn.parseattr(obj.office_name()))]))
                if obj.email:
                    mails = []
                    mails.append(str(obj.email))
                    if obj.alternative_email:
                        mails.append(str(obj.alternative_email))
                        
                    new_user.append(('mail',mails))

                Person.create_ldap_user( ldap_user_name, new_user )

                # Update ldap groups
                cn_group = Group.cn_group_by_gid(obj.group_id)
                cn_groups = ['%s' % str(cn_group)]
                if settings.LDAP_DEFAULT_GROUPS:
                    cn_groups += settings.LDAP_DEFAULT_GROUPS

                Group.add_member_in_groups( ldap_user_name, cn_groups )

            obj.save()
            
        except ValidationError as e:
            messages.set_level(request, messages.ERROR)
            messages.error(request,"%s" % e[0])