def endtest(request): # vars: mychromosome_id = '' generation_x_creature = config("GENERATION_X_CREATURE") if request.method == 'POST': # You may process these variables here user_id = request.POST['user_id'] mychromosome_id = request.POST['chromosome_id'] mytest_date = request.POST['test_date'] mytotal_test_time = request.POST['time'] mytest_ok = request.POST['test_ok'] if not request.user.is_authenticated(): output = "<h1>Sorry, you don't have direct access to this page!</h1>" template = 'home.html' username = "" else: if mychromosome_id: # Save the test results in Tasks table, where chromosome_id_id=chromosome_id Tasks.objects.filter(chromosome_id=mychromosome_id).update(test_ok=mytest_ok,total_test_time=mytotal_test_time,test_date=mytest_date,test_done=1) output= '<h1>Thanks. The test has been recorded!</h1>' ######################################## ## Checking if the generation is complete: # getting the chromosome: last_chromosome_modif = Chromosome.objects.get(id=mychromosome_id) last_creature = last_chromosome_modif.creature_id current_generation = last_chromosome_modif.generation ##output = output +" <h1>CREATURE_id -----> "+str(last_creature)+"</h1>" ##output = output +" <h1>CURRENT GENERATION -----> "+str(current_generation)+"</h1>" # Checking if creature is over if current_generation < generation_x_creature: # counting the number of chromosomes not done for the creature id and highest generation number_chromosomes = Chromosome.objects.filter(creature_id=last_creature, generation=current_generation).count() cursor = connection.cursor() cursor.execute("SELECT COUNT( `genview_chromosome`.id ) FROM snag.`genview_chromosome` INNER JOIN snag.`genview_tasks` ON `genview_chromosome`.`id` = `genview_tasks`.`chromosome_id_id` WHERE `genview_chromosome`.`creature_id_id` =%s AND `genview_tasks`.`test_done` =1 AND `genview_chromosome`.`generation`=%s ", [last_creature, current_generation]) total_rows = cursor.fetchone() ##output = output +" <h1>NUMBER CHROMOSOMES -----> "+str(number_chromosomes)+"</h1>" if int(list(total_rows)[0]) >= int(config("CHROMOSOMES_X_GENERATION")): ## Call to genetics(last_creature, current_generation) genetics(last_creature, current_generation) ##output = output +" <h1>GENERATION FINISHED!! NEEDS REPRODUCTION <br />-----> "+str(config("CHROMOSOMES_X_GENERATION"))+"</h1>" else: ##output = output +" <h1>GENERATION NOT FINISHED -----> "+str(config("CHROMOSOMES_X_GENERATION"))+" | len chromosomes ="+str(int(list(total_rows)[0]))+"<br /> REMAINS = "+str(int(config("CHROMOSOMES_X_GENERATION")) - int(list(total_rows)[0]))+" </h1>" pass else: output = output +"<h1>This creature is over; it reached the maximum number of generetion ( <b>"+str(generation_x_creature)+"</b> )</h1>" else: output = "<h1>Sorry, there is no more tests assigned to you or this page cannot be accessed directly!</h1>" output = output+"<h2>... you will be redirected to the user page in 4 seconds...</h2>" template = 'endtest.html' username = request.user.username return render_to_response(template, {'username': username,'output': output } )
def starttest(request): """ This function build a webpage for the test. It gets the test id as chromosome id from GET cid's variable (p.e.: /?cid=123) """ # vars: output = '' template = '' username = '' userid = '' questionTest = '' answersTest = '' idQuestion = '' chromosome_id = '' genId = '' data1 = [] time_test_max = '' #First, check if user is autetificated: if not request.user.is_authenticated(): output = "<h1>You need to login before to take a test!</h1>" template = 'home.html' else: template = 'starttest.html' username = request.user.username userid = request.user.id data = [] data1 = [] # getting config var: time_test_max = config("TIME_TEST_MAX") # DEBUG var: # data=['0127', '010132', '01010125', '01010219', '01010320', '010216', '01020117', '01020204', '01020329', '010321', '01030110', '01030215', '01030308', '0213', '020133', '02010118', '02010223', '02010301', '020234', '02020138', '02020228', '02020307', '020305', '02030109', '02030211', '02030331', '0324', '030136', '03010130', '03010202', '03010306', '030214', '03020139', '03020237', '03020312', '030303', '03030122', '03030226', '03030335'] # Checking for available test for this user. In case there are some waiting, give the first one. Else, give no test if request.GET.get('cid'): myTasks = Tasks.objects.filter(chromosome_id=request.GET.get('cid'), test_done=0) out = '<h1>Sorry, this test is already done by user, <b>'+username+'</b></h1>' else: ##### Checking for available tests in Tasks table, and then get the data from Chromosome table myTasks = Tasks.objects.filter(user_id=userid, test_done='0') out = '<h1>Sorry, there are no test available for the user, <b>'+username+'</b></h1><p>Please contact SNAG team.</p>' # Id not available tasks for the user, leave: if len(myTasks)<1: output = out template = 'endtest.html' return render_to_response(template, {'username': username,'output': output}) # Pending tasks for the user: tasksPending = [] for t in myTasks: tasksPending.append(t.chromosome_id) chromosome_id = myTasks[0].chromosome_id_id userChromosome = Chromosome.objects.filter(id=chromosome_id) for u in userChromosome: data1 = u.data data = eval(data1) if len(data)==0: return render_to_response('home.html') ####################### # Choosing random question / answer tags = {1:"Acceso remoto (desde fuera de la universidad)", 2:"Archivo general", 3:"Archivo histórico", 4:"Archivos", 5:"Autenticación en los servicios en línea", 6:"Bibliografías", 7:"Bibliografías por asignaturas", 8:"Bibliografías por materias", 9:"Bibliografías por titulaciones", 10:"Carné de usuario", 11:"Colección de libros electrónicos", 12:"Colecciones", 13:"Derechos de autor", 14:"Fondo antiguo", 15:"Formación", 16:"Formación a medida", 17:"Formación en línea", 18:"Guías", 19:"Guías por materias", 20:"Guías temáticas", 21:"Internet", 22:"Legislación y jurisprudencia", 23:"Libros", 24:"Multimedia", 25:"Normativa de préstamo", 26:"Nuevas adquisiciones", 27:"Organismos de normalización", 28:"Partituras y grabaciones sonoras", 29:"Patentes", 30:"Películas", 31:"Préstamo", 32:"Préstamo interbibliotecario", 33:"Recursos electrónicos", 34:"Revistas", 35:"Revistas electrónicas", 36:"Revistas impresas", 37:"Servicios", 38:"Talleres formativos", 39:"Zona Wi-Fi y Eduroam"} contents = { 1:"<li>En la universidad existe acceso remoto</li><li>Tienen derecho al acceso remoto profesores, investigadores, estudiantes y personal administrativo</li><li>El acceso remoto permite consultar bases de datos científicas y periódicos</li>", 2:"<li>El archivo general se encuentra en el edificio de los servicios centrales</li><li>El archivo general se creó en 1952</li><li>El archivo general alberga más de un millón de documentos</li>", 3:"<li>El archivo histórico se encuentra en el edificio del rectorado</li><li>El archivo general se creó en 1954</li><li>El archivo general alberga más de medio millón de documentos</li>", 4:"<li>En la universidad existen dos tipos de archivo</li><li>Tienen derecho a los archivos profesores y personal administrativo</li><li>El responsable de los archivos es la Sra. Rodríguez</li>", 5:"<li>En lo servicios en linea se pueden autenticar profesores, estudiantes y personal de administración</li><li>Para autenticarse en los servicios en línea se puede utilizar Explorer, Firefos, Chrome y Safari</li><li>Mediante la autenticación se puede acceder a 6 servicios en línea</li>", 6:"<li>En el servicvio de bibliografías trabajan 12 personas</li><li>El responsable del servicio de bibligrafías es la Sra. González</li><li>El servicio de bilbliografias fue creado en 1981</li>", 7:"<li>La extensión media de la bibliografía de una asignatura es de 20 referencias </li><li>El responsable del servicio de bibligrafías por asignaturas es la Sra. Rodríguez</li><li>El servicio de bilbliografias por asignaturas fue creado en 1982</li>", 8:"<li>La extensión media de la bibliografía de una materia es de 500 referencias </li><li>El responsable del servicio de bibligrafías por asignaturas es la Sra. Moreno</li><li>El servicio de bilbliografias por materias fue creado en 1983</li>", 9:"<li>La extensión media de la bibliografía de una titulación es de 2500 referencias </li><li>El responsable del servicio de bibligrafías por titulaciones es la Sra. García</li><li>El servicio de bilbliografias por titulaciones fue creado en 1984</li>", 10:"<li>Los colectivos de estudiantes, profesorado y personal de administración son los que tienen derecho al carné de usuario</li><li>El carné de usuario se pueden utilizar en todos los centros que pertenecen a la Universidad</li><li>El carné está activo mientras que el usuario está vinculado con la Universidad</li>", 11:"<li>La colección de libros electrónicos alberga 10.500 titulos </li><li>El responsable de la colección de libros electrónicos es la Sra. Gómez</li><li>La colección de libros electrónicos fue creada en 1995</li>", 12:"<li>En el servicvio de colecciónes trabajan 15 personas</li><li>El responsable del servicio de colecciones es la Sra. López</li><li>El servicio de colecciones fue creado en 1985</li>", 13:"<li>El responsable de los temas relacionados con los derechos de autor es la Sra. Gámez</li><li>En los temas relacionados con los derechos de autor trabajan 9 personas</li><li>En la universidad se aplica la política de derechos de autor que establece el Minsiterio de Cultura</li>", 14:"<li>El fondo antiguo alberga 11.000 titulos </li><li>El responsable del fondo antiguo es la Sra. García</li><li>El fondo antiguo fue creado en 1975</li>", 15:"<li>En la universidad existen dos tipos de formación</li><li>Tienen derecho a la formación estudiantes, profesores y personal administrativo</li><li>El responsable de la formación es la Sra. Trías</li>", 16:"<li>El servicio de formación a medida se encuentra en el edificio de administración</li><li>El servicio de formación a medida se creó en 1987</li><li>El email del servicio de formación a medida es [email protected]</li>", 17:"<li>El servicio de formación en línea se encuentra en el edificio del rectorado</li><li>El servicio de formación en línea se creó en 1999</li><li>El email del servicio de formación en línea es [email protected]</li>", 18:"<li>Existen dos tipos de guías</li><li>El servicio de las guías se creó en 1998</li><li>El responsable de las guías la Sra. Cárdenas</li>", 19:"<li>Existen 58 guías por materia </li><li>El responsable de las guías por materias es la Sra. Ruiz</li><li>El el servicio de guías por materias fue creada en 1999</li>", 20:"<li>Existen 86 guías temáticas </li><li>El responsable de las guías temáticas es la Sra. Albarado</li><li>El el servicio de guías por materias fue creada en 2001</li>", 21:"<li>En la universidad existe servicio de internet</li><li>Tienen derecho al servicio de internet profesores, investigadores, estudiantes y personal administrativo</li><li>El servicio de internet se ofrece desde 2002</li>", 22:"<li>La biblioteca recibe puntualmente el BOE y el DOGC, y cuenta con los principales repertorios de legilación y jurisprudencia.</li><li>Sobre legislación y jurisprudencia existen varias bases de datos: Iberlex, DOGC y Eurlex.</li><li>El responsable del servicio de legislación y jurisprudencia es la Sra. Serrano</li>", 23:"<li>Los libros están organizados por materia, distribuidos físicamente según la CDU.</li><li>Hay obras de consulta general y libros sobre las materias relacionadas con las titulaciones impartidas por la universidad.</li><li>La biblioteca dispone de 98.000 libros</li>", 24:"<li>La biblioteca dispone de partituras, grabaciones sonoras y películas. Además, cuenta con un proyector de vídeo que puede salir en préstamo.</li><li>El lector de de DVD puede utilizarse únicamente en la biblioteca</li><li>El responsable del material multimedia es la Sra. Sánchez</li>", 25:"<li>Los retrasos en la devolución de préstamos se penalizan a razón de un día por libro y día de retraso.</li><li>Los libros pueden salir en préstamo durante 30 días, excepto si son de préstamo restringido, en cuyo caso sólo se prestan durante el fin de semana.</li><li>En caso de pérdida o robo, el usuario se responsabiliza de reponer el material perdido.</li>", 26:"<li>Entre las adquisiciones más recientes se incluyen los libros \"Vivir con la complejidad\", de Donald Norman, y \"Crisis y reconstrucción de la filosofía\", de Mario Bunge.</li><li>La biblioteca ha incorporado también los DVD \"Break the Science Barrier\", de Richard Dawkins, y \"Inheriting the Future of Music\", de Gunter Atteln.</li><li>Destacan también como novedad los CD \"Das Lied von der Erde\", de Gustav Mahler, y \"Répons\", de Pierre Boulez.</li>", 27:"<li>Hay varios organismos de normalización europeos: entre otros, AENOR, AFNOR y DIN.</li><li>En Latinoamérica hay NORMEX, AMN e IRAM, entre otros.</li><li>En Catalunya hay dos asociaciones de normas técnicas: ACEIC e ICT.</li>", 28:"<li>La biblioteca dispone de una colección de partituras y grabaciones sonoras.</li><li>Las partituras están archivadas en carpetas, en la sección de música.</li><li>Hay 4 puntos de audición para la escucha de grabaciones sonoras.</li>", 29:"<li>Hay 3 oficinas de patentes: EPO European Patent Office, Oficina Espanola de Patentes y Marcas, y World Intellectual Property Organization </li><li>Existen varias bases de datos de patentes: Delphion, Derwent Innovation Index y FreePatentsOnline.</li><li>Para obtener documentos de patente hay que dirigirse al servicio de préstamo interbibliotecario.</li>", 30:"<li>La biblioteca tiene una colección de películas de todas las épocas.</li><li>Las películas están en la sección de cine y audiovisuales.</li><li>Este material está disponible únicamente en DVD.</li>", 31:"<li>Pueden utilizar el servicio de préstamo profesores, investigadores, estudiantes y personal administrativo.</li><li>Pueden salir en préstamo los libros, los DVD y el material multimedia.</li><li>Tienen derecho al servicio de préstamo profesores, investigadores, estudiantes y personal administrativo</li>", 32:"<li>Pueden utilizar el servicio de préstamo interbibliotecario sólo profesores e investigadores.</li><li>El material solicitado suele servirse en el plazo de 1 a 2 días.</li><li>El material prestado mediante préstamo interbibliotecario se puede devolver en cualquier biblioteca de la universidad.</li>", 33:"<li>La biblioteca ofrece acceso a recursos electrónicos diversos: bibliografías, guías, bases de datos, etc.</li><li>Los recursos generados por la biblioteca son de acceso abierto; entre los demás los hay gratuitos y de pago.</li><li>El responsable de los servicios electrónicos es la Sra. Martínez</li>", 34:"<li>La biblioteca mantiene suscripción a 200 revistas científicas.</li><li>La mayoría de las revistas suscritas están disponibles en papel; las demás son accesibles en soporte electrónico.</li><li>El responsable de las revistas es la Sra. Vázquez</li>", 35:"<li>Desde la biblioteca se pueden consultar gratuitamente 60 revistas electrónicas de pago: EPI, Journal of Documentation y otras.</li><li>De acceso abierto existen muchas revistas electrónicas: Ariadne, BiD y otras.</li><li>Para localizar una revista electrónica sobre un tema concreto se puede utilizar el catálogo de la biblioteca.</li>", 36:"<li>En la biblioteca se pueden consultar completas 140 revistas impresas: Ítem, Medicine y otras.</li><li>Los números antiguos (más de 2 anos) se guardan en el archivo y se han de solicitar al personal bibliotecario.</li><li>El responsable de las revistas impresas es la Sra. Viózquez</li>", 37:"<li>La biblioteca ofrece diversos servicios: préstamo, formación y acceso a Internet.</li><li>Los servicios, en general, están abiertos a la comunidad universitaria: profesores, investigadores, estudiantes y personal administrativo.</li><li>Todos ellos son de uso gratuito.</li>", 38:"<li>La biblioteca ofrece talleres formativos sobre el uso del catálogo y el acceso a bases de datos científicas.</li><li>Los talleres presenciales se programan la segunda semana de cada mes, excepto en agosto. Los virtuales, la cuarta semana.</li><li>Para inscribirse, basta con usar el formulario habilitado a tal efecto.</li>", 39:"<li>Pueden utilizar la red Wi-Fi profesores, investigadores, estudiantes y personal administrativo.</li><li>Todos los espacios de la biblioteca tiene cobertura para la conexión inalámbrica a Internet.</li><li>La biblioteca ofrece conexión vía Eduroam a la comunidad universitaria y a visitantes procedentes de instituciones afiliadas a esta inciativa." } #choose a question idRamdom = randint(1, 118) answers = [] questions = [] questions.append("") answers.append("") for x in Contents.objects.all(): questions.append(smart_str(x.question)) answers.append(smart_str(x.answer)) questionTest = questions[idRamdom] answersTest = answers[idRamdom] idQuestion = idRamdom%3 if idQuestion==0: idQuestion=3 genId = int(math.ceil(float(idRamdom)/float(3))) if genId<10: genId = "0"+str(genId) ## For example: genId = 3, needs to be genId = "03" genId = str(genId) output = "" mytree = dict() for allele in data: # prefix -> position pre = allele[:(len(allele)-2)] # sufix -> id suf = allele[(len(allele)-2):len(allele)] mytree[suf] = pre # frist nav bar first = [] nav1 = "<div id='nav1'><p>" con = "<div id='hiddencontents'>" # We need to reorder de values, like 01xx, 02yy, 03zz mytree_sortedByValues = sorted(mytree.iteritems(), key=operator.itemgetter(1)) for k in mytree_sortedByValues: knum = int(k[0]) if len(k[1]) == 2: nav1 = nav1+"\n\t<span id='"+str(k[0])+"-"+k[1]+"' class='first'>"+str(tags[knum])+"</span>" infos = "" c = 1 for i in contents[knum].split("</li><li>"): button = " <input type='image' src='"+MEDIA_URL+"/button.png' class='b' size='10' value='"+str(k[0])+"-"+str(c)+"'>" infos = infos+"<li>"+i+button+"</li>" c = c+1 con = con+"\n\t<div id='c-"+str(k[0])+"-"+k[1]+"'>"+infos[4:]+"</div>" first.append(k[1]) nav1 = nav1+"\n</p></div>" output = output+nav1 # second nav bar second = [] nav2 = "<div id ='nav2'><ul>" for f in first: for k in mytree_sortedByValues: knum = int(k[0]) if f == k[1][0:len(f)] and len(k[1]) == 4: nav2 = nav2+"\n\t<li id='"+str(k[0])+"-"+k[1]+"' class='"+str(f)+" second'>"+str(tags[knum])+"</li>" infos = "" c = 1 for i in contents[knum].split("</li><li>"): button = " <input type='image' src='"+MEDIA_URL+"/button.png' class='b' size='10' value='"+str(k[0])+"-"+str(c)+"'>" if i[:4] == "<li>": i = i[4:] if i[-5:] == "</li>": i = i[:-5] infos = infos+"<li>"+i+button+"</li>" c = c+1 con = con+"\n\t<div id='c-"+str(k[0])+"-"+k[1]+"'>"+infos+"</div>" second.append(k[1]) nav2 = nav2+"\n</ul></div>\n" output = output+nav2 # third nav bar third = [] nav3 = "<div id ='nav3'><ul>" for f in second: for k in mytree_sortedByValues: knum = int(k[0]) if f == k[1][0:len(f)] and len(k[1]) == 6: nav3 = nav3+"\n\t<li id='"+str(k[0])+"-"+k[1]+"' class='"+str(f)+" third'>"+str(tags[knum])+"</li>" infos = "" c = 1 for i in contents[knum].split("</li><li>"): button = " <input type='image' src='"+MEDIA_URL+"/button.png' class='b' size='10' value='"+str(k[0])+"-"+str(c)+"'>" if i[:4] == "<li>": i = i[4:] if i[-5:] == "</li>": i = i[:-5] infos = infos+"<li>"+i+button+"</li>" c = c+1 con = con+"\n\t<div id='c-"+str(k[0])+"-"+k[1]+"'>"+infos+"</div>" third.append(k[1]) nav3 = nav3+"\n</ul></div>\n" #nav3 = nav3+"<div id='contents'><ul></ul></div>\n" #con = con+"\n</div>\n" output = output+nav3 # fourth nav bar #fourth = [] nav4 = "<div id ='nav4'><ul>" for f in third: for k in mytree.keys(): knum = int(k) if f == mytree[k][0:len(f)] and len(mytree[k]) == 8: nav4 = nav4+"\n\t<li id='"+str(k)+"-"+mytree[k]+"' class='"+str(f)+" fourth'>"+str(tags[knum])+"</li>" infos = "" c = 1 for i in contents[knum].split("</li><li>"): button = " <input type='image' src='"+MEDIA_URL+"/button.png' class='b' size='10' value='"+str(k)+"-"+str(c)+"'>" if i[:4] == "<li>": i = i[4:] if i[-5:] == "</li>": i = i[:-5] infos = infos+"<li>"+i+button+"</li>" c = c+1 con = con+"\n\t<div id='c-"+str(k)+"-"+mytree[k]+"'>"+infos+"</div>" #fourth.append(mytree[k]) nav4 = nav4+"\n</ul></div>\n" nav4 = nav4+"<div id='contents'><ul></ul></div>\n" con = con+"\n</div>\n" output = output+nav4+con return render_to_response(template, {'data1':data1, 'username': username,'userid': userid,'questionTest': questionTest,'answersTest':answersTest,'idQuestion':idQuestion,'chromosome_id':chromosome_id, 'genId': genId,'output': output, 'TIME_TEST_MAX': time_test_max})