· 10 years ago · Aug 29, 2016, 12:00 PM
1# -*- coding: utf-8 -*-
2'''
3Created on 18/feb/2016
4
5@author: Fabio Mazzacrelli - Enrico Brensacchi Based on interface of Emanuele Camerieri
6'''
7
8import webbrowser
9from utility import *
10#import threading, moduleThreading
11import urllib2, time
12#from create_torrent import *
13
14class sharedSpace(object):
15 def __init__(self):
16 self.cond=threading.Condition()
17 self.arrayOfQuery=[]
18
19class sharedEx(Exception):
20 def __init__(self):
21 Exception.__init__(self)
22
23def check_shared_database(dbString):
24 if(dbString==""):
25 write_log("dbString empty error")
26 return False
27 else:
28 try:
29 write_log("check_shared_database try")
30 sharedDb=get_shared_database_array_access(dbString)
31 dbconn=connect(host=sharedDb['host'], user=sharedDb['user'], passwd=sharedDb['password'], db=sharedDb['database'])
32 dbcursor = dbconn.cursor(cursors.DictCursor)
33 dbcursor.close()
34 dbconn.close()
35 write_log("connection ok")
36 return True
37 except:
38 write_log("connection ko")
39 return False
40
41def bootstrap_shared_setup(myName, myUrl, myUser, myPass, locdb):
42 """This function creates the required tables in shared database and inform drupal if it can start the bootstrap or not
43 """
44 try:
45 #federationSituation="new_federation"
46 #queryToExecute=[]
47 #if(federationSituation=="new_federation"):
48 # queryToExecute.append("""CREATE TABLE IF NOT EXISTS collabrep_federation (\
49#server_id VARCHAR(20) NOT NULL COMMENT 'The unique server name',\
50#server_address VARCHAR(250) NOT NULL COMMENT 'The server address', \
51#login_username VARCHAR(50) COMMENT 'The server access username', \
52#login_password VARCHAR(50) COMMENT 'The server access password', \
53#is_active TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'True if the remote repository has successfully completed the initial join procedure', \
54#PRIMARY KEY (server_id, server_address), \
55#INDEX fuid_index (server_id), \
56#UNIQUE sid_key (server_id), \
57#UNIQUE serveraddr_key (server_address)\
58#)""")
59 #access=get_shared_database_array_access(locdb)
60 #write_log("query_to_shared CREATE TABLE collabrep_federation "+str(access))
61 #creation=query_to_shared(queryToExecute, access)
62 #if(creation==True):
63 # return True
64 #elif(not creation):
65 # return "Error in one or more creation tables in shared db: look at the log file!"
66 #else:
67 # return "Error"
68# queryToExecute.append("""CREATE TABLE IF NOT EXISTS collabrep_todo (\
69#time SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Needed to perform actions chronologically', \
70#recipient_id VARCHAR(20) NOT NULL COMMENT 'The unique server ID', \
71#event VARCHAR(50) NOT NULL COMMENT 'The action to notify', \
72#data TEXT COMMENT 'Subject of the action', \
73#INDEX time_index (time)\
74#)""")
75# the category fields are not nullable so a value MUST be inserted in those fields:
76# queryToExecute.append("""CREATE TABLE IF NOT EXISTS collabrep_vocabulary (\
77#global_id VARCHAR (255) NOT NULL, \
78#name VARCHAR(255) NOT NULL, \
79#description TEXT, \
80#help VARCHAR(255) NOT NULL, \
81#tags SMALLINT(3) NOT NULL, \
82#multiple SMALLINT(3) NOT NULL, \
83#required SMALLINT(3) NOT NULL, \
84#weight SMALLINT(4) NOT NULL, \
85#hierarchy SMALLINT(3) NOT NULL, \
86#relations SMALLINT(3) NOT NULL, \
87#PRIMARY KEY (global_id)\
88#)""")
89
90# queryToExecute.append("""CREATE TABLE IF NOT EXISTS collabrep_term (\
91#global_id VARCHAR(255) NOT NULL,\
92#name VARCHAR(255) NOT NULL, \
93#description TEXT, \
94#parent SMALLINT(3) NOT NULL, \
95#global_parent VARCHAR (255) NOT NULL, \
96#weight SMALLINT(4) NOT NULL, \
97#global_vid VARCHAR(255) NOT NULL, \
98#PRIMARY KEY (global_id), \
99#FOREIGN KEY (global_vid) REFERENCES collabrep_vocabulary(global_id) ON DELETE CASCADE\
100#)""")
101
102# queryToExecute.append("""CREATE TABLE IF NOT EXISTS collabrep_synonyms (\
103#synonym_id INTEGER AUTO_INCREMENT, \
104#global_tid VARCHAR(255) NOT NULL, \
105#synonym VARCHAR(255), \
106#PRIMARY KEY (synonym_id), \
107#FOREIGN KEY (global_tid) REFERENCES collabrep_term(global_id) ON DELETE CASCADE\
108#)""")
109
110 # in all cases
111
112# queryToExecute.append("""CREATE TABLE IF NOT EXISTS """+myName+""" (\
113#title VARCHAR(255) NOT NULL COMMENT 'Node title', \
114#body TEXT COMMENT 'Node body', \
115#fuid VARCHAR(255) NOT NULL COMMENT 'A federation-unique ID', \
116#is_software TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Marks this node as a software, so that other Learning Objects can depend on it', \
117#depends_on TEXT NOT NULL COMMENT 'A list of Learning Object the node depends on', \
118#file_list TEXT COMMENT 'List of files attached to this Linkable Object', \
119#term_list TEXT COMMENT 'List of terms that categorize this Linkable Object', \
120#torrent MEDIUMBLOB COMMENT 'Contains the torrent file', \
121#lom_entity VARCHAR(1000), \
122#lom_keyword VARCHAR(1000), \
123#global_id TINYTEXT NOT NULL, \
124#lom_aggregation TINYINT(4), \
125#lom_learning_resource_type VARCHAR(200), \
126#lom_intended_end_user_role VARCHAR(200), \
127#lom_context VARCHAR(200), \
128#lom_difficulty VARCHAR(200), \
129#lom_copyright VARCHAR(5) NOT NULL, \
130#INDEX fuid_index (fuid), \
131#UNIQUE federuid (fuid))""")
132 access=get_shared_database_array_access("",locdb)
133 creation=query_to_shared("INSERT INTO LO_Federation VALUES ('"+myName+"','"+myUrl+"','"+myUser+"','"+myPass+"',1,0,0)", access)
134 if(creation==True):
135 return True
136 elif(not creation):
137 return "Error in one or more creation/insert query: look at the log file!"
138 else:
139 return "Error"
140 except Error, err:
141 return "Errore di connessione al database! Error "+err.args[1]
142
143def update_local_fuids(myRep,locdb):
144 """
145 arg: the local repository name
146 the function is usually called during the botstrap execution;
147 it update the fuids of the local LO with the new federation name
148 """
149 query="SELECT Id_Fd , Id_Lo FROM LO_General ORDER BY Id_Lo ASC"
150 access=get_shared_database_array_access(locdb)
151 nodeList=query_to_shared(query,access)
152 if(type(nodeList)<>type(tuple())):
153 return False
154 elif(not nodeList): # no local nodes
155 return True
156 else:
157 federation=get_my_drupal_var("collabrep_federation_name", locdb)
158 for node in nodeList:
159 splitted=node["Id_Fd"].split(" ") #down here we are updateing fuids to match the federation and repository name
160 arQuery=[]
161 arQuery.append("UPDATE LO_General SET Id_Fd='"+federation+" "+myRep+" "+splitted[2]+"' WHERE Id_Fd='"+node["Id_Fd"]+"'")
162 arQuery.append("UPDATE LO_Contribute SET Id_Fd='"+federation+" "+myRep+" "+splitted[2]+"' WHERE Id_Fd='"+node["Id_Fd"]+"'")
163 arQuery.append("UPDATE LO_Educational SET Id_Fd='"+federation+" "+myRep+" "+splitted[2]+"' WHERE Id_Fd='"+node["Id_Fd"]+"'")
164 #arQuery.append("UPDATE LO_LifeCycle SET Id_Fd='"+federation+" "+myRep+" "+splitted[2]+"' WHERE Id_Fd='"+node["Id_Fd"]+"'")
165 arQuery.append("UPDATE LO_Metadata SET Id_Fd='"+federation+" "+myRep+" "+splitted[2]+"' WHERE Id_Fd='"+node["Id_Fd"]+"'")
166 arQuery.append("UPDATE LO_File SET Id_Fd='"+federation+" "+myRep+" "+splitted[2]+"' WHERE Id_Fd='"+node["Id_Fd"]+"'")
167 arQuery.append("UPDATE LO_Identifier SET Id_Fd='"+federation+" "+myRep+" "+splitted[2]+"' WHERE Id_Fd='"+node["Id_Fd"]+"'")
168 arQuery.append("UPDATE LO_Requirement SET Id_Fd='"+federation+" "+myRep+" "+splitted[2]+"' WHERE Id_Fd='"+node["Id_Fd"]+"'")
169 arQuery.append("UPDATE LO_Rights SET Id_Fd='"+federation+" "+myRep+" "+splitted[2]+"' WHERE Id_Fd='"+node["Id_Fd"]+"'")
170 arQuery.append("UPDATE LO_Technical SET Id_Fd='"+federation+" "+myRep+" "+splitted[2]+"' WHERE Id_Fd='"+node["Id_Fd"]+"'")
171 #these queries could also all be executed at the same moment
172 ret=query_my_drupal_tables_multiple(arQuery,access)
173 if(not ret): #something WRONG
174 #stop this procedure
175 return False
176 return True
177
178def import_local_federation(locdb):
179 query="SELECT ServerName , ServerAddress , N_Lo , TimeUpd FROM LO_Federation"
180 access=get_shared_database_array_access("",locdb)
181 nodeList=query_to_shared(query,access)
182 access=get_shared_database_array_access(locdb)
183 if(type(nodeList)<>type(tuple())):
184 return False
185 elif(not nodeList): # no local nodes
186 return True
187 else:
188 for node in nodeList:
189 creation=query_to_shared("INSERT INTO LO_Federation VALUES ('"+node["ServerName"]+"','"+node["ServerAddress"]+"','"+str(node["N_Lo"])+"',0)", accessremote)
190 #these queries could also all be executed at the same moment
191 if(creation==True):
192 return True
193 elif(not creation):
194 return "Error in one or more query: look at the log file!"
195 else:
196 return "Error"
197
198
199def exec_remote_cron(locdb):
200 write_log("exec_remote_cron:---------------------------"+str(locdb))
201 accesslocal=get_shared_database_array_access(locdb)
202 nameFd=get_my_drupal_var("collabrep_my_name", locdb)
203 query="SELECT * FROM LO_Federation WHERE ServerName !='"+nameFd+"'"
204 accessremote=get_shared_database_array_access("",locdb)
205 serverList=query_to_shared(query,accessremote) # get the serverlist from shared db
206 if(type(serverList)<>type(tuple())):
207 return False
208 elif(not serverList): # no server to syncronize
209 return True
210 else:
211 for nodesl in serverList:
212 write_log("exec_remore_cron - "+str(nodesl['ServerName'])+" - "+str(nodesl['TimeUpd']))
213 query="SELECT ServerName, TimeUpd FROM LO_Federation WHERE ServerName !='"+str(nodesl['ServerName'])+"'"
214 serverLocal=query_to_shared(query,accesslocal)
215 if (str(serverLocal[0]["TimeUpd"])=="0"): #insert the new federated and his LO in local db
216 creation=query_to_shared("INSERT INTO LO_Federation VALUES ('"+nodesl["ServerName"]+"','"+nodesl["ServerAddress"]+"',"+str(nodesl["N_Lo"])+",0)", accesslocal)
217 write_log("Insert new federated in local db")
218 query="SELECT * FROM LO_General JOIN LO_File ON (LO_General.Id_Fd=LO_File.id_Fd) JOIN LO_Educational ON (LO_Educational.Id_Fd=LO_General.Id_Fd) JOIN LO_Rights ON (LO_Rights.Id_Fd=LO_General.Id_Fd) JOIN LO_Metadata ON (LO_Metadata.Id_Fd=LO_General.Id_Fd) WHERE (LO_General.Id_Fd LIKE '%"+str(nodesl['ServerName'])+"%')"
219 #JOIN LO_LifeCycle ON (LO_LifeCycle.Id_Fd=LO_General
220 nodeListRemote=query_to_shared(query,accessremote) # get the server's nodelist from shared db
221 write_log("if ((str(serverLocal[0][... 1")
222 if(type(nodeListRemote)<>type(tuple())):
223 return False
224 elif(not nodeListRemote): # no remote nodes
225 return True
226 else:
227 for node in nodeListRemote:
228 presents=query_to_shared("SELECT COUNT(*) FROM LO_General WHERE Id_Fd ='"+node["Id_Fd"]+"'", accesslocal)
229 if(presents[0]["COUNT(*)"]==0):# insert the node into local db if it doesn't exists
230 write_log("Insert LO of New federated in local db")
231 creation=query_to_shared("INSERT INTO node (type,language,title,created,comment,promote) VALUES ('linkableobject','"+node["Language"]+"','"+node["Title"]+"','"+str(node["TimeUpd"])+"','2','1')", accesslocal)
232 nid=query_to_shared("SELECT nid FROM node WHERE title='"+node["Title"]+"'", accesslocal)
233 creation=query_to_shared("INSERT INTO node_access (nid,realm,grant_view) VALUES ('"+str(nid[0]["nid"])+"','all','1')", accesslocal)
234 creation=query_to_shared("UPDATE node SET vid='"+str(nid[0]["nid"])+"' WHERE nid='"+str(nid[0]["nid"])+"'", accesslocal)
235 creation=query_to_shared("INSERT INTO node_revision (nid,vid,title,promote) VALUES ('"+str(nid[0]["nid"])+"','"+str(nid[0]["nid"])+"','"+node["Title"]+"','1')", accesslocal)
236 creation=query_to_shared("INSERT INTO node_comment_statistics (nid) VALUES ('"+str(nid[0]["nid"])+"')", accesslocal)
237
238 creation=query_to_shared("INSERT INTO file_managed (filename,uri,filemime,status,timestamp) VALUES ('"+node["filename"]+"','"+node["url"]+"','"+node["filemime"]+"','1','"+str(node["TimeUpd"])+"')",accesslocal)
239 fid=query_to_shared("SELECT fid FROM file_managed WHERE filename='"+node["filename"]+"'", accesslocal)
240 creation=query_to_shared("INSERT INTO file_usage VALUES ('"+str(fid[0]["fid"])+"','file','node','"+str(nid[0]["nid"])+"','1')",accesslocal)
241 ## insert General
242 creation=query_to_shared("INSERT INTO LO_General VALUES ('"+str(nid[0]["nid"])+"','"+node["Id_Fd"]+"','"+node["Title"]+"','"+node["Language"]+"','"+node["Description"]+"','"+node["Keyword"]+"','"+node["Coverage"]+"','"+node["Structure"]+"','"+str(node["Aggregation_Level"])+"','"+str(node["Deleted"])+"','"+str(node["TimeUpd"])+"')", accesslocal)
243 if(creation!=True):
244 return "Error in LO_General insert: look at the log file!"
245 ## insert File
246 creation=query_to_shared("INSERT INTO LO_File VALUES ('"+node["Id_Fd"]+"','"+node["url"]+"','"+node["filename"]+"','"+node["filemime"]+"')", accesslocal)
247 if(creation!=True):
248 return "Error"
249 ## insert Educational
250 creation=query_to_shared("INSERT INTO LO_Educational VALUES (1,'"+node["Id_Fd"]+"','"+str(node["InteractivityType"])+"','"+str(node["LearningResourceType"])+"','"+str(node["InteractivityLevel"])+"','"+str(node["SemanticDensity"])+"','"+str(node["IntendedEndUserRole"])+"','"+str(node["Context"])+"','"+str(node["TypicalAgeRange"])+"','"+str(node["Difficulty"])+"','"+str(node["TypicalLearningTime"])+"','"+str(node["LO_Educational.Description"])+"','"+str(node["LO_Educational.Language"])+"')", accesslocal)
251 if(creation!=True):
252 return "Error in LO_Educational Insert: look at the log file!"
253 ## insert Rights
254 creation=query_to_shared("INSERT INTO LO_Rights VALUES (1,'"+node["Id_Fd"]+"','"+str(node["Cost"])+"','"+str(node["Copyright"])+"','"+str(node["LO_Rights.Description"])+"')", accesslocal)
255 if(creation!=True):
256 return "Error in LO_Rights insert: look at the log file!"
257 ## insert Metadata
258 creation=query_to_shared("INSERT INTO LO_Metadata VALUES (1,'"+node["Id_Fd"]+"','"+str(node["MetadataSchema"])+"','"+str(node["LO_Metadata.Language"])+"')", accesslocal)
259 if(creation!=True):
260 return "Error in LO_Metadata insert: look at the log file!"
261 ## insert LifeCycle
262 #creation=query_to_shared("INSERT INTO LO_LifeCycle VALUES (1,'"+node["Id_Fd"]+"','"+str(node["Version"])+"','"+str(node["Status"])+"')", accesslocal)
263 #if(creation!=True):
264 # return "Error in LO_LifeCycle insert: look at the log file!"
265 ## insert Contribute
266 ContribList=query_to_shared("SELECT * FROM LO_Contribute WHERE Id_Fd='"+node["Id_Fd"]+"'", accesslocal)
267 write_log("ContribList: "+str(ContribList))
268 if(type(ContribList)<>type(tuple())):
269 return False
270 elif(not ContribList): # no local nodes
271 return True
272 else:
273 for Cont in ContribList:
274 creation=query_to_shared("INSERT INTO LO_Contribute VALUES (DEFAULT,'"+node["Id_Fd"]+"','"+str(Cont["Role"])+"','"+str(Cont["Entity"])+"','"+str(Cont["Date"])+"')", accessremote)
275 if(creation!=True):
276 return "Error in LO_Contribute creator insert: look at the log file!"
277 ## Updating LO_File And Technical
278 if(node["Structure"]=='1'):
279 write_log("Atomic")
280 else:
281 if ((str(serverLocal[0]["TimeUpd"]))<>(str(nodesl["TimeUpd"]))):
282 query="SELECT * FROM LO_General JOIN LO_File ON (LO_General.Id_Fd=LO_File.Id_Fd) JOIN LO_Educational ON (LO_Educational.Id_Fd=LO_General.Id_Fd) JOIN LO_Rights ON (LO_Rights.Id_Fd=LO_General.Id_Fd) JOIN LO_Metadata ON (LO_Metadata.Id_Fd=LO_General.Id_Fd) WHERE (LO_General.Id_Fd LIKE '%"+str(nodesl['ServerName'])+"%' AND LO_General.TimeUpd >'"+str(serverLocal[0]["TimeUpd"])+"')"
283 # JOIN LO_LifeCycle ON (LO_LifeCycle.Id_Fd=LO_General.Id_Fd)
284 nodeListRemote=query_to_shared(query,accessremote) # get the server's nodelist from shared db
285 if(type(nodeListRemote)<>type(tuple())):
286 return False
287 elif(not nodeListRemote): # no remote nodes
288 return True
289 else:
290 for node in nodeListRemote:
291 presents=query_to_shared("SELECT COUNT(*) FROM LO_General WHERE Id_Fd ='"+node["Id_Fd"]+"'", accesslocal)
292 if(presents[0]["COUNT(*)"]==0):# insert the node into local db if it doesn't exists
293 ## insert General
294 creation=query_to_shared("INSERT INTO LO_General VALUES (DEFAULT,'"+node["Id_Fd"]+"','"+node["Title"]+"','"+node["Language"]+"','"+node["Description"]+"','"+node["Keyword"]+"','"+node["Coverage"]+"','"+node["Structure"]+"','"+str(node["Aggregation_Level"])+"','"+str(node["Deleted"])+"','"+str(node["TimeUpd"])+"')", accesslocal)
295 if(creation!=True):
296 return "Error in LO_General insert: look at the log file!"
297 ## insert File
298 creation=query_to_shared("INSERT INTO LO_File VALUES ('"+node["Id_Fd"]+"','"+node["url"]+"','"+node["filename"]+"')", accesslocal)
299 if(creation!=True):
300 return "Error"
301 ## insert Educational
302 creation=query_to_shared("INSERT INTO LO_Educational VALUES (1,'"+node["Id_Fd"]+"','"+str(node["InteractivityType"])+"','"+str(node["LearningResourceType"])+"','"+str(node["InteractivityLevel"])+"','"+str(node["SemanticDensity"])+"','"+str(node["IntendedEndUserRole"])+"','"+str(node["Context"])+"','"+str(node["TypicalAgeRange"])+"','"+str(node["Difficulty"])+"','"+str(node["TypicalLearningTime"])+"','"+str(node["LO_Educational.Description"])+"','"+str(node["LO_Educational.Language"])+"')", accesslocal)
303 if(creation!=True):
304 return "Error in LO_Educational Insert: look at the log file!"
305 ## insert Rights
306 creation=query_to_shared("INSERT INTO LO_Rights VALUES (1,'"+node["Id_Fd"]+"','"+str(node["Cost"])+"','"+str(node["Copyright"])+"','"+str(node["LO_Rights.Description"])+"')", accesslocal)
307 if(creation!=True):
308 return "Error in LO_Rights insert: look at the log file!"
309 ## insert Metadata
310 creation=query_to_shared("INSERT INTO LO_Metadata VALUES (1,'"+node["Id_Fd"]+"','"+str(node["MetadataSchema"])+"','"+str(node["LO_Metadata.Language"])+"')", accesslocal)
311 if(creation!=True):
312 return "Error in LO_Metadata insert: look at the log file!"
313 ## insert LifeCycle
314 ##creation=query_to_shared("INSERT INTO LO_LifeCycle VALUES (1,'"+node["Id_Fd"]+"','"+str(node["Version"])+"','"+str(node["Status"])+"')", accesslocal)
315 ##if(creation!=True):
316 ## return "Error in LO_LifeCycle insert: look at the log file!"
317 ## insert Contribute
318 ContribList=query_to_shared("SELECT * FROM LO_Contribute WHERE Id_Fd='"+node["Id_Fd"]+"'", accesslocal)
319 write_log("ContribList: "+str(ContribList))
320 if(type(ContribList)<>type(tuple())):
321 return False
322 elif(not ContribList): # no local nodes
323 return True
324 else:
325 for Cont in ContribList:
326 creation=query_to_shared("INSERT INTO LO_Contribute VALUES (DEFAULT,'"+node["Id_Fd"]+"','"+str(Cont["Role"])+"','"+str(Cont["Entity"])+"','"+str(Cont["Date"])+"')", accesslocal)
327 if(creation!=True):
328 return "Error in LO_Contribute creator insert: look at the log file!"
329 ## Updating LO_File And Technical
330 if(node["Structure"]=='1'):
331 write_log("Atomic")
332 ## Updating LO_Requirement
333 ## Updating LO_OrComposite
334
335 ## Updating LO_Identifier
336 ## Updating LO_Relation
337 ## Updating LO_Annotation
338 #-----------------------------
339 else:
340 write_log("else for nodelist - "+str(node['TimeUpd']))
341 ## update General
342 creation=query_to_shared("UPDATE LO_General SET Id_Fd='"+node["Id_Fd"]+"', Title='"+node["Title"]+"', Language='"+node["Language"]+"', Description='"+node["Description"]+"', Keyword='"+node["Keyword"]+"', Coverage='"+node["Coverage"]+"', Structure='"+node["Structure"]+"', Aggregation_Level='"+str(node["Aggregation_Level"])+"',Deleted='"+str(node["Deleted"])+"', TimeUpd='"+str(node["TimeUpd"])+"'", accesslocal)
343 if(creation==False):
344 return "Error in LO_General Updating: look at the log file!"
345 ## update Educational
346 creation=query_to_shared("UPDATE LO_Educational SET Id_Fd='"+node["Id_Fd"]+"', InteractivityType='"+str(node["InteractivityType"])+"', LearningResourceType='"+str(node["LearningResourceType"])+"',InteractivityLevel='"+str(node["InteractivityLevel"])+"', SemanticDensity='"+str(node["SemanticDensity"])+"', IntendedEndUserRole='"+str(node["IntendedEndUserRole"])+"', Context='"+str(node["Context"])+"', TypicalAgeRange='"+str(node["TypicalAgeRange"])+"', Difficulty='"+str(node["Difficulty"])+"', TypicalLearningTime='"+str(node["TypicalLearningTime"])+"', Description='"+str(node["LO_Educational.Description"])+"', Language='"+str(node["LO_Educational.Language"])+"'", accesslocal)
347 if(creation==False):
348 return "Error in LO_Educational Updating: look at the log file!"
349 ## update Rights
350 creation=query_to_shared("UPDATE LO_Rights SET Id_Fd='"+node["Id_Fd"]+"', Cost='"+str(node["Cost"])+"', Copyright='"+str(node["Copyright"])+"', Description='"+str(node["LO_Rights.Description"])+"'", accesslocal)
351 if(creation==False):
352 return "Error in LO_Rights Updating: look at the log file!"
353 ## update Metadata
354 creation=query_to_shared("UPDATE LO_Metadata SET Id_Fd='"+node["Id_Fd"]+"', MetadataSchema='"+str(node["MetadataSchema"])+"', Language='"+str(node["LO_Metadata.Language"])+"'", accesslocal)
355 if(creation==False):
356 return "Error in LO_Metadata Updating: look at the log file!"
357 ## update LifeCycle
358 ##creation=query_to_shared("UPDATE LO_LifeCycle SET Id_Fd='"+node["Id_Fd"]+"', Version='"+str(node["Version"])+"', Status='"+str(node["Status"])+"'", accesslocal)
359 ##if(creation==False):
360 ## return "Error in LO_LifeCycle Updating: look at the log file!"
361 ## insert Contribute
362
363 ## Updating LO_Identifier
364 ## Updating LO_Relation
365 ## Updating LO_Annotation
366
367 ## Updating LO_File
368 ## Updating LO_Technical
369 ## Updating LO_Requirement
370 ## Updating LO_OrComposite
371 ## DA CONTROLLARE------------------------------------
372 upd=query_to_shared("UPDATE LO_Federation SET TimeUpd='"+str(node["TimeUpd"])+"' WHERE (ServerName LIKE '%"+str(node['Id_Fd'])+"%')", accesslocal)## update TimeUpd in LO_Federation
373 if(upd==False):
374 return "Error updating TimeUpd in LO_Federation"
375 return True
376
377def exec_local_cron(locdb):
378 accesslocal=get_shared_database_array_access(locdb)
379 nameFd=get_my_drupal_var("collabrep_my_name", locdb)
380 query="SELECT ServerName,TimeUpd FROM LO_Federation WHERE ServerName='"+nameFd+"'"
381 TimeUpdServer=query_to_shared(query,accesslocal)
382 accesslocal=get_shared_database_array_access(locdb)
383
384 ## Updating LO_Identifier
385 ## Updating LO_Relation
386 ## Updating LO_Annotation
387
388 ## Updating LO_File
389 ## Updating LO_Technical
390 ## Updating LO_Requirement
391 ## Updating LO_OrComposite
392 query="SELECT * FROM LO_General JOIN LO_File ON (LO_General.Id_Fd=LO_File.Id_Fd) JOIN LO_Educational ON (LO_Educational.Id_Lo=LO_General.Id_Lo AND LO_Educational.Id_Fd=LO_General.Id_Fd) JOIN LO_Rights ON (LO_Rights.Id_Lo=LO_General.Id_Lo AND LO_Rights.Id_Fd=LO_General.Id_Fd) JOIN LO_Metadata ON (LO_Metadata.Id_Lo=LO_General.Id_Lo AND LO_Metadata.Id_Fd=LO_General.Id_Fd) WHERE (LO_General.Id_Fd LIKE '%"+str(nameFd)+"%' AND LO_General.TimeUpd > '"+str(TimeUpdServer[0]["TimeUpd"])+"')"
393 # JOIN LO_LifeCycle ON (LO_LifeCycle.Id_Lo=LO_General.Id_Lo AND LO_LifeCycle.Id_Fd=LO_General.Id_Fd)
394 nodeList=query_to_shared(query,accesslocal)
395 write_log("RESULT: "+str(nodeList[0]))
396 accessremote=get_shared_database_array_access("",locdb)
397 if(type(nodeList)<>type(tuple())):
398 return False
399 elif(not nodeList): # no local nodes
400 return True
401 else:
402 for node in nodeList:
403 presents=query_to_shared("SELECT COUNT(*) FROM LO_General WHERE Id_Fd ='"+node["Id_Fd"]+"'", accessremote)
404 if(presents[0]["COUNT(*)"]==0):
405 ## insert General
406 creation=query_to_shared("INSERT INTO LO_General VALUES ('"+node["Id_Fd"]+"','"+node["Title"]+"','"+node["Language"]+"','"+node["Description"]+"','"+node["Keyword"]+"','"+node["Coverage"]+"','"+node["Structure"]+"','"+str(node["Aggregation_Level"])+"','"+str(node["Deleted"])+"','"+str(node["TimeUpd"])+"')", accessremote)
407 if(creation!=True):
408 return "Error in LO_General insert: look at the log file!"
409 ## insert File
410 creation=query_to_shared("INSERT INTO LO_File VALUES ('"+node["Id_Fd"]+"','"+node["url"]+"','"+node["filename"]+"','"+node["filemime"]+"')", accessremote)
411 if(creation!=True):
412 return "Error"
413 ## insert Educational
414 creation=query_to_shared("INSERT INTO LO_Educational VALUES ('"+node["Id_Fd"]+"','"+str(node["InteractivityType"])+"','"+str(node["LearningResourceType"])+"','"+str(node["InteractivityLevel"])+"','"+str(node["SemanticDensity"])+"','"+str(node["IntendedEndUserRole"])+"','"+str(node["Context"])+"','"+str(node["TypicalAgeRange"])+"','"+str(node["Difficulty"])+"','"+str(node["TypicalLearningTime"])+"','"+str(node["edu_Description"])+"','"+str(node["edu_Language"])+"')", accessremote)
415 if(creation!=True):
416 return "Error in LO_Educational Insert: look at the log file!"
417 ## insert Rights
418 creation=query_to_shared("INSERT INTO LO_Rights VALUES ('"+node["Id_Fd"]+"','"+str(node["Cost"])+"','"+str(node["Copyright"])+"','"+str(node["rights_Description"])+"')", accessremote)
419 if(creation!=True):
420 return "Error in LO_Rights insert: look at the log file!"
421 ## insert Metadata
422 creation=query_to_shared("INSERT INTO LO_Metadata VALUES ('"+node["Id_Fd"]+"','"+str(node["MetadataSchema"])+"','"+str(node["LO_Metadata.Language"])+"')", accessremote)
423 if(creation!=True):
424 return "Error in LO_Metadata insert: look at the log file!"
425
426 ## insert LifeCycle
427 ##creation=query_to_shared("INSERT INTO LO_LifeCycle VALUES ('"+node["Id_Fd"]+"','"+str(node["Version"])+"','"+str(node["Status"])+"')", accessremote)
428 ##if(creation!=True):
429 ## return "Error in LO_LifeCycle insert: look at the log file!"
430 ## insert Contribute
431 ContribList=query_to_shared("SELECT * FROM LO_Contribute WHERE Id_Fd='"+node["Id_Fd"]+"'", accesslocal)
432 write_log("CIAO: "+str(ContribList))
433 if(type(ContribList)<>type(tuple())):
434 return False
435 elif(not ContribList): # no local nodes
436 return True
437 else:
438 for Cont in ContribList:
439 creation=query_to_shared("INSERT INTO LO_Contribute VALUES (DEFAULT,'"+node["Id_Fd"]+"','"+str(Cont["Role"])+"','"+str(Cont["Entity"])+"','"+str(Cont["Date"])+"')", accessremote)
440 if(creation!=True):
441 return "Error in LO_Contribute creator insert: look at the log file!"
442 ## Updating LO_File And Technical
443 if(node["Structure"]=='1'):
444 write_log("Atomic")
445 ## Updating LO_Requirement
446 ## Updating LO_OrComposite
447
448 ## Updating LO_Identifier
449 ## Updating LO_Relation
450 ## Updating LO_Annotation
451
452 else:
453 ## update General
454 write_log("sono sull'elseeee")
455 creation=query_to_shared("UPDATE LO_General SET Id_Fd='"+node["Id_Fd"]+"', Title='"+node["Title"]+"', Language='"+node["Language"]+"', Description='"+node["Description"]+"', Keyword='"+node["Keyword"]+"', Coverage='"+node["Coverage"]+"', Structure='"+node["Structure"]+"', Aggregation_Level='"+str(node["Aggregation_Level"])+"',Deleted='"+str(node["Deleted"])+"', TimeUpd='"+str(node["TimeUpd"])+"' WHERE Id_Fd='"+node["Id_Fd"]+"'", accessremote)
456 if(creation==False):
457 return "Error in LO_General Updating: look at the log file!"
458 ## update Educational
459 creation=query_to_shared("UPDATE LO_Educational SET Id_Fd='"+node["Id_Fd"]+"', InteractivityType='"+str(node["InteractivityType"])+"', LearningResourceType='"+str(node["LearningResourceType"])+"',InteractivityLevel='"+str(node["InteractivityLevel"])+"', SemanticDensity='"+str(node["SemanticDensity"])+"', IntendedEndUserRole='"+str(node["IntendedEndUserRole"])+"', Context='"+str(node["Context"])+"', TypicalAgeRange='"+str(node["TypicalAgeRange"])+"', Difficulty='"+str(node["Difficulty"])+"', TypicalLearningTime='"+str(node["TypicalLearningTime"])+"', Description='"+str(node["edu_Description"])+"', Language='"+str(node["edu_Language"])+"' WHERE Id_Fd='"+node["Id_Fd"]+"'", accessremote)
460 if(creation==False):
461 return "Error in LO_Educational Updating: look at the log file!"
462 ## update Rights
463 creation=query_to_shared("UPDATE LO_Rights SET Id_Fd='"+node["Id_Fd"]+"', Cost='"+str(node["Cost"])+"', Copyright='"+str(node["Copyright"])+"', rights_Description='"+str(node["rights_Description"])+"' WHERE Id_Fd='"+node["Id_Fd"]+"'", accessremote)
464 if(creation==False):
465 return "Error in LO_Rights Updating: look at the log file!"
466 ## update Metadata
467 creation=query_to_shared("UPDATE LO_Metadata SET Id_Fd='"+node["Id_Fd"]+"', MetadataSchema='"+str(node["MetadataSchema"])+"', Language='"+str(node["LO_Metadata.Language"])+"' WHERE Id_Fd='"+node["Id_Fd"]+"'", accessremote)
468 if(creation==False):
469 return "Error in LO_Metadata Updating: look at the log file!"
470 ## update LifeCycle
471 ##creation=query_to_shared("UPDATE LO_LifeCycle SET Id_Fd='"+node["Id_Fd"]+"', Version='"+str(node["Version"])+"', Status='"+str(node["Status"])+"'", accessremote)
472 ##if(creation==False):
473 ## return "Error in LO_LifeCycle Updating: look at the log file!"
474 ## insert Contribute
475
476 ## Updating LO_Identifier
477 ## Updating LO_Relation
478 ## Updating LO_Annotation
479
480 ## Updating LO_File
481 ## Updating LO_Technical
482 ## Updating LO_Requirement
483 ## Updating LO_OrComposite
484 #set TimeUpd of the federated TEMPORANEO
485 Ok=query_to_shared("UPDATE LO_Federation SET TimeUpd='"+str(node["TimeUpd"])+"' WHERE ServerName='"+nameFd+"'",accessremote)
486 #Ok=query_to_shared("UPDATE LO_Federation SET TimeUpd='"+str(node["TimeUpd"])+"' WHERE ServerName='"+nameFd+"'",accesslocal)
487 return True
488
489
490def leave_federation(myVar, locdb):
491 """This function creates the required tables in shared database and inform drupal if it can start the bootstrap or not
492 """
493 try:
494 access=get_shared_database_array_access(locdb)
495 qresult=query_to_shared("DELETE FROM LO_Federation", access)
496 access=get_shared_database_array_access("", locdb)
497 qresult=query_to_shared("DELETE FROM LO_Federation WHERE ServerName='"+myVar+"'", access)
498 if(qresult==False): return "Error: the shared database is unreachable."
499 elif(qresult==None): return "Wrong execution of the query in shared database."
500 elif(qresult==True): return True
501 else: return "An error has occurred while executing the query."
502 except Error, err:
503 return "Errore di connessione al database! Error "+err.args[1]
504
505def main():
506 print "Incorrect use for this script."
507 time.sleep(5)
508
509if __name__ == "__main__":
510 sys.exit(main())