def editUser(self, uid): # Check if the user has propper permissions and present a nice message if not # This is ofcourse also checked on the server side. may_open = False if uid == cm.get_binded_user() and accesstools.check_permission("user.self.modify", False): may_open = True elif accesstools.check_permission_multi_or(("user.modify", "user.view")): may_open = True if may_open == False: return if self.useredits.has_key(uid): self.tabwidget.setCurrentWidget(self.useredits[uid]) return import usereditwdg as usered useredit = usered.UserEditWdg(uid, self.tabwidget) self.useredits[useredit] = uid self.useredits[uid] = useredit tab_title = useredit.led_firstname.text() + " " + useredit.led_lastname.text() usericon = paths.path_to("art/student.svg") if os.path.exists(paths.path_to("art/%s.svg") % userdef.usertype_as_text(useredit.user_info["usertype_id"])): usericon = paths.path_to("art/%s.svg") % userdef.usertype_as_text(useredit.user_info["usertype_id"]) self.tabwidget.addTab(useredit, QtGui.QIcon(qt4tools.svg2pixmap(usericon, 32, 32)), tab_title) self.tabwidget.setCurrentWidget(useredit)
def setupUserTypeCombo(self): self.tr("teacher","plural") self.tr("student","plural") self.tr("parent","plural") self.tr("other","plural") usertypeids = userdef.list_usertypes_by_id() self.cmb_usertype_filter.addItem(self.tr("All","plural users"),QtCore.QVariant(-1)) for i in usertypeids: self.cmb_usertype_filter.addItem( self.tr(userdef.usertype_as_text(i),"plural"), QtCore.QVariant(i)) self.connect(self.cmb_usertype_filter,QtCore.SIGNAL('activated(int)'),self.updateUserView)
def loadUserData(self): proxy = cm.get_proxy_handle() self.user_info = proxy.list_users(uid=self.username) if self.user_info.has_key(self.username): self.change_info = {} self.user_info = self.user_info[self.username] self.lbl_usertype.setText(self.tr(userdef.usertype_as_text(self.user_info['usertype_id']),'singular')) self.lbl_username.setText(QtCore.QString().fromUtf8(self.user_info['uid'])) self.led_firstname.setText(QtCore.QString().fromUtf8(self.user_info['givenName'])) self.led_lastname.setText(QtCore.QString().fromUtf8(self.user_info['sn'])) gid_number = int(self.user_info['gidNumber']) self.cmb_primary_group.clear() for groupname,details in proxy.list_groups(groupdef.grouptype_as_id('primary')).items(): self.cmb_primary_group.addItem( QtCore.QString().fromUtf8(details['displayedName']), QtCore.QVariant(details['gidNumber'])) self.cmb_primary_group.setCurrentIndex(self.cmb_primary_group.findData(QtCore.QVariant(self.user_info['gidNumber']))) self.updateGroupsView()
def setupNamePage(self): self.connect(self.led_given_name,QtCore.SIGNAL("textChanged(const QString&)"),self.updateNamePage) self.connect(self.led_family_name,QtCore.SIGNAL("textChanged(const QString&)"),self.updateNamePage) self.connect(self.cmb_usertype,QtCore.SIGNAL("activated(int)"),self.updateNamePage) self.tr("teacher") self.tr("student") self.tr("parent") self.tr("other") usertypeids = userdef.list_usertypes_by_id() #self.cmb_usertype.addItem(self.tr("Select user type..."),QtCore.QVariant(-1)) for i in usertypeids: self.cmb_usertype.addItem( self.tr(userdef.usertype_as_text(i)), QtCore.QVariant(i)) self.cmb_usertype.setCurrentIndex(-1) self.sbx_first_school_year.setValue(QtCore.QDate.currentDate().year())
def _addUser(self,uidnumber,uid,cn,usertype_id): if self.users.has_key(int(uidnumber)): return self.insertRow(self.rowCount()) idx = self.index(self.rowCount()-1,self.columninfo['cn']['columnindex']) self.setData(idx,QtCore.QVariant(self.icons[usertype_id]),QtCore.Qt.DecorationRole) self.setData(idx,QtCore.QVariant(QtCore.QString.fromUtf8(cn))) idx = self.index(self.rowCount()-1,self.columninfo['uid']['columnindex']) self.setData(idx,QtCore.QVariant(QtCore.QString.fromUtf8(uid))) idx = self.index(self.rowCount()-1,self.columninfo['uidnumber']['columnindex']) self.setData(idx,QtCore.QVariant(uidnumber)) idx = self.index(self.rowCount()-1,self.columninfo['usertype']['columnindex']) self.setData(idx,QtCore.QVariant(self.tr(userdef.usertype_as_text(usertype_id),"singular"))) idx = self.index(self.rowCount()-1,0) self.setData(idx,QtCore.QVariant(uidnumber),QtCore.Qt.UserRole) self.users[int(uidnumber)] = { 'uidnumber':uidnumber, 'uid':uid, 'cn':cn, 'usertype_id':usertype_id}
def createuser(self,uid,givenname,familyname,passwd,usertype,primarygid=1000,firstyear=None): """ Add a user to the schools authentication directory service. The usertype must be one of the constants TEACHER,STUDENT,PARENT or OTHER """ # check if the group exists already if self.user_exists(uid): return -10001 title = userdef.usertype_as_text(usertype) if not title: return -10005 # invalid usertype id usertype_ou = ldapdef.ou_confkey_by_usertype(usertype) objectclass = ldapdef.objectclass_by_usertype(usertype) if not objectclass: return -10006 # Object classes have not been defined for this usertype path = "uid=%s,%s" % (uid,ldapdef.basedn_by_usertype(usertype)) # Check the group for existance import groupmanager as gman gm = gman.GroupManager() gl = gm.list_groups(None) glgid = {} for groupname in gl.keys(): glgid[int(gl[groupname]['gidNumber'])]=groupname if not glgid.has_key(primarygid): return -10004 #uidnumber = self.max(conf.get('LDAPSERVER','basedn'), # 'objectclass=posixaccount','uidNumber', # int(conf.get('DOMAIN','uid_start')))+1 uidnumber = None uidnumbers = [] for pw in pwd.getpwall(): if int(pw[2]) >= int(conf.get('DOMAIN','uid_start')): uidnumbers += [int(pw[2])] uidnumbers.sort() expect_uidnumber = int(conf.get('DOMAIN','uid_start')) for i in range(100000): if expect_uidnumber != uidnumbers[i]: uidnumber = expect_uidnumber break expect_uidnumber += 1 if uidnumber == None: return -10007 # failed to pick an uidnumber cn = '%s %s' % (givenname,familyname) user_info = {'uid':uid, 'givenname':'%s' % givenname, 'cn':cn, 'gidNumber': str(primarygid), 'uidnumber': str(uidnumber), 'homeDirectory':'%s/%s/users/%s/.linux' % (conf.get('DOMAIN','domain_root'),conf.get('DOMAIN','domain_name'),uid), 'sn':'%s' % familyname, 'objectclass':objectclass, 'mail': uid, 'title':title, 'loginShell': '/bin/zsh', 'userPassword':mkpasswd(passwd,3,'ssha')} if userdef.usertype_as_id(usertype) == userdef.usertype_as_id('student') and firstyear != None: user_info['firstSchoolYear'] = str(firstyear) self.bind(conf.get('LDAPSERVER','admin'),conf.get('LDAPSERVER','passwd')) self.touch_by_dict({path:user_info}) try: posix_uid = pwd.getpwnam(uid)[2] except Exception, e: print e return -10002