source: lliurex-moodle/trunk/fuentes/lliurex-moodle.install-files/usr/share/n4d/hooks/golem/51_moodle_create-cohorte.py @ 1319

Last change on this file since 1319 was 1319, checked in by kbut, 4 years ago

update scripts to sync ldap users with moodle users

File size: 4.6 KB
Line 
1import MySQLdb 
2import ConfigParser
3import time
4import os
5import subprocess
6
7class Moodle_updater:
8        def __init__(self,state,args):
9                list_functions = {
10                        'add_to_group':self.join_group,
11                        'remove_from_group':self.drop_group,
12                        'add_group':self.add_group,
13                        'gescen_full':self.gesita,
14                        'gescen_partial':self.gesita,
15                        'add_generic_users': self.add_generic_group
16                }
17                self.user = False
18                self.password = False
19                try:
20                        self.function_to_execute = list_functions[state]
21                except:
22                        self.function_to_execute = None
23                self.args = args
24        #def __init__
25       
26        def connect(self):
27                try:
28                        self.connection=MySQLdb.connect(host="localhost",user=self.user,passwd=self.password,db='moodle')
29                        return True
30                except:
31                        print "[!] Error connecting to MySQL [!]"
32                        return False
33        #def connect
34
35        def readPassword(self): 
36                try:
37                        config = ConfigParser.ConfigParser()
38                        config.read('/root/.my.cnf')
39                        self.user = config.get("mysql","user")
40                        self.password= config.get("mysql","password")
41                except:
42                        self.user = False
43                        self.password = False
44        #def readPassword
45       
46        def gesita(self):
47                tmp_file = open("/tmp/gesita_import",'r')
48                lines_file = tmp_file.readlines()
49                for aux_process in lines_file:
50                        action_list = aux_process.split(';')
51                        if action_list[0] == 'add':
52                                self._add_group(action_list[1].rstrip())
53                        elif action_list[0] == 'join':
54                                self._join_group(action_list[1],action_list[2].rstrip())
55                        elif action_list[0] == 'drop':
56                                self._drop_group(action_list[1],action_list[2].rstrip())
57                os.remove('/tmp/gesita_import')
58        #def gesita
59       
60        def add_generic_group(self):
61                try:
62                        self._join_group(self.args['group'],self.args['user']['uid'])
63                        print "Todo va bien !!!!!!!!!!!!!!!!!"
64                except Exception as e:
65                        print "********************explotando******************"
66                        print e
67
68
69        def join_group(self):
70                self._join_group(self.args['group']['cn'],self.args['user']['uid'])
71        #def join_group
72       
73        def _join_group(self,group_name,user_name):
74                self.readPassword()
75
76                if self.connect():
77                        sql = "Select id from mdl_cohort where name='"+group_name+"'"
78                        cursor = self.connection.cursor()
79                        cursor.execute(sql)
80                        output = cursor.fetchone()
81                        if output != None and len(output) > 0:
82                                id_group = output[0]
83                                sql = "Select id from mdl_user where username='"+user_name+"'"
84                                cursor.execute(sql)
85                                output = cursor.fetchone()
86                                if output != None and len(output) > 0:
87                                        aux_time = time.time()
88                                        id_user = output[0]
89                                        try:
90                                                sql = "INSERT into mdl_cohort_members (cohortid,userid,timeadded) VALUES ("+str(id_group)+","+str(id_user)+","+str(aux_time)+")"
91                                                cursor.execute(sql)
92                                                self.connection.commit()
93                                        except Exception as e:
94                                                print e
95                                        cursor.close()
96        #def join_group
97       
98        def drop_group(self):
99                self._drop_group(self.args['group']['cn'],self.args['user']['uid'])
100        #def drop_group
101       
102        def _drop_group(self,group_name,user_name):
103                self.readPassword()
104                if self.connect():
105                        sql = "Select id from mdl_cohort where name='"+group_name+"'"
106                        cursor = self.connection.cursor()
107                        cursor.execute(sql)
108                        output = cursor.fetchone()
109                        if output != None and len(output) > 0:
110                                id_group = output[0]
111                                sql = "Select id from mdl_user where username='"+user_name+"'"
112                                cursor.execute(sql)
113                                output = cursor.fetchone()
114                                if output != None and len(output) > 0:
115                                        aux_time = time.time()
116                                        id_user = output[0]
117                                        sql = "DELETE FROM mdl_cohort_members WHERE cohortid="+str(id_group)+" AND userid="+str(id_user)
118                                        cursor.execute(sql)
119                                        self.connection.commit()
120                                        cursor.close()         
121        #def _drop_group
122       
123        def add_group(self):
124                self._add_group(self.args['group']['cn'])
125        #def add_group
126       
127        def _add_group(self,group_name):
128                self.readPassword()
129                if self.connect():
130                        aux_time = time.time()
131                        cursor = self.connection.cursor()
132                        sql = "select count(*) from mdl_cohort where name = '"+ group_name +"';"
133                        cursor.execute(sql)
134                        output = cursor.fetchone()
135                        if output == None or (len(output) > 0 and output[0] < 1):
136                                sql = "INSERT into mdl_cohort(contextid,name,idnumber,description,descriptionformat,component,timecreated,timemodified) VALUES (1,'"+group_name+"','','',1,'',"+str(aux_time)+","+str(aux_time)+")"
137                                cursor.execute(sql)
138                                self.connection.commit()
139                        cursor.close()
140        #def _add_group
141       
142        def execute(self):
143                print self.function_to_execute
144                if self.function_to_execute != None:
145                        self.function_to_execute()
146        #def execute
147
148single_sync=["add_user","add_generic_users","gescen_partial","gescen_full"]
149if NEVERLAND_VAR in single_sync:
150        subprocess.Popen(["/usr/bin/php","/usr/share/moodle/auth/ldap/cli/sync_users.php"]).communicate()
151
152aux = Moodle_updater(NEVERLAND_VAR,ARGV)
153aux.execute()
Note: See TracBrowser for help on using the repository browser.