Pārlūkot izejas kodu

Adding changes in the migration, adding transactions calls + moving course_edit update code in course.lib.php see BT#4882

Julio Montoya 12 gadi atpakaļ
vecāks
revīzija
3156095183

+ 7 - 109
main/admin/course_edit.php

@@ -13,7 +13,7 @@ $this_section = SECTION_PLATFORM_ADMIN;
 api_protect_admin_script();
 
 $course_table       = Database::get_main_table(TABLE_MAIN_COURSE);
-$course_user_table  = Database::get_main_table(TABLE_MAIN_COURSE_USER);
+
 
 $course_code = isset($_GET['course_code']) ? $_GET['course_code'] : $_POST['code'];
 $noPHP_SELF = true;
@@ -192,10 +192,10 @@ $form->setDefaults($course);
 
 // Validate form
 if ($form->validate()) {
-	$course = $form->getSubmitValues();	
-	$course_code = $course['code'];
-	$visual_code = $course['visual_code'];	
-	$visual_code = CourseManager::generate_course_code($visual_code);   
+	$course = $form->getSubmitValues();
+    $visual_code = CourseManager::generate_course_code($course['visual_code']);
+    
+    CourseManager::update($course);
 
     // Check if the visual code is already used by *another* course
     $visual_code_is_used = false;
@@ -211,115 +211,13 @@ if ($form->validate()) {
         }
         $warn = substr($warn,0,-1);
     }
-    
-    $field_value = new ExtraFieldValue('course');
-    $params = $course;
-    $params['course_code'] = $course_code;    
-    $field_value->save_field_values($params); 
-    
-    // an extra field
-    $extras = array();
-    foreach ($course as $key => $value) {
-	    if (substr($key,0,6)=='extra_') {
-			$extras[substr($key,6)] = $value;
-		}
-		if (substr($key,0,7)=='_extra_') {
-			if(!array_key_exists(substr($key,7), $extras)) $extras[substr($key,7)] = $value;
-		}
-    }
-
-	$tutor_id = $course['tutor_name'];
-	$tutor_name=$platform_teachers[$tutor_id];
-
-	$teachers = $course['group']['course_teachers'];
-
-	$title = $course['title'];
-	$category_code = $course['category_code'];
-	$department_name = $course['department_name'];
-	$department_url = $course['department_url'];
-	$course_language = $course['course_language'];
-    
-    $course['disk_quota'] = $course['disk_quota']*1024*1024;
-     
-	$disk_quota = $course['disk_quota'];
-	$visibility = $course['visibility'];
-	$subscribe = $course['subscribe'];
-	$unsubscribe = $course['unsubscribe'];
-	if (!stristr($department_url, 'http://')) {
-		$department_url = 'http://'.$department_url;
-	}
-	$sql = "UPDATE $course_table SET course_language='".Database::escape_string($course_language)."',
-								title='".Database::escape_string($title)."',
-								category_code='".Database::escape_string($category_code)."',
-								tutor_name='".Database::escape_string($tutor_name)."',
-								visual_code='".Database::escape_string($visual_code)."',
-								department_name='".Database::escape_string($department_name)."',
-								department_url='".Database::escape_string($department_url)."',
-								disk_quota='".Database::escape_string($disk_quota)."',
-								visibility = '".Database::escape_string($visibility)."',
-								subscribe = '".Database::escape_string($subscribe)."',
-								unsubscribe='".Database::escape_string($unsubscribe)."'
-							WHERE code='".Database::escape_string($course_code)."'";
-	Database::query($sql);
-
-	//update the extra fields
-	if (count($extras) > 0) {
-		foreach ($extras as $key => $value) {
-			CourseManager::update_course_extra_field_value($course_code, $key, $value);
-		}
-	}
-
-	//Delete only teacher relations that doesn't match the selected teachers
-	$cond='';
-	if (count($teachers)>0) {
-		foreach($teachers as $key) $cond.=" AND user_id<>'".$key."'";
-	}
-	$sql='DELETE FROM '.$course_user_table.' WHERE course_code="'.Database::escape_string($course_code).'" AND status="1"'.$cond;
-	Database::query($sql);
-
-	if (count($teachers)>0) {
-		foreach ($teachers as $key) {
-
-			//We check if the teacher is already subscribed in this course
-			$sql_select_teacher = 'SELECT 1 FROM '.$course_user_table.' WHERE user_id = "'.$key.'" AND course_code = "'.$course_code.'" ';
-			$result = Database::query($sql_select_teacher);
-
-			if (Database::num_rows($result) == 1) {
-				$sql = 'UPDATE '.$course_user_table.' SET status = "1" WHERE course_code = "'.$course_code.'" AND user_id = "'.$key.'"  ';
-			} else {
-				$sql = "INSERT INTO ".$course_user_table . " SET
-					course_code = '".Database::escape_string($course_code). "',
-					user_id = '".$key . "',
-					status = '1',
-					role = '',
-					tutor_id='0',
-					sort='0',
-					user_course_cat='0'";
-			}
-			Database::query($sql);
-		}
-	}
-
-	$sql = "INSERT IGNORE INTO ".$course_user_table . " SET
-				course_code = '".Database::escape_string($course_code). "',
-				user_id = '".$tutor_id . "',
-				status = '1',
-				role = '',
-				tutor_id='0',
-				sort='0',
-				user_course_cat='0'";
-	Database::query($sql);
-	
-	$course_info = api_get_course_info($course_code);
-	$course_id = $course_info['real_id'];
-	$forum_config_table = Database::get_course_table(TOOL_FORUM_CONFIG_TABLE);
-	$sql = "UPDATE ".$forum_config_table." SET default_lang='".Database::escape_string($course_language)."' WHERE c_id = $course_id ";
+    exit;
 	if ($visual_code_is_used) {
 	    header('Location: course_list.php?action=show_msg&warn='.urlencode($warn));
 	} else {
         header('Location: course_list.php');
 	}
-	exit ();
+	
 }
 Display::display_header($tool_name);
 

+ 96 - 1
main/inc/lib/course.lib.php

@@ -75,7 +75,7 @@ class CourseManager {
     CONST COURSE_FIELD_TYPE_CHECKBOX = 10;
 
     var $columns = array();
-
+    
     /**
      * Creates a course
      * @param   array   with the columns in the main.course table
@@ -170,6 +170,101 @@ class CourseManager {
         }
         return false;
     }
+    
+    static function update($params) {
+        $course_user_table  = Database::get_main_table(TABLE_MAIN_COURSE_USER);
+        $course_table       = Database::get_main_table(TABLE_MAIN_COURSE);
+            
+        $course_code = $params['code'];
+        $visual_code = $params['visual_code'];
+
+        $field_value = new ExtraFieldValue('course');        
+        $params['course_code'] = $course_code; 
+        $field_value->save_field_values($params); 
+
+        /*$tutor_id = $params['tutor_name'];
+        $tutor_name=$platform_teachers[$tutor_id];*/
+
+        $teachers = $params['group']['course_teachers'];
+
+        $title = $params['title'];
+        $category_code = $params['category_code'];
+        $department_name = $params['department_name'];
+        $department_url = $params['department_url'];
+        $course_language = $params['course_language'];
+
+        $course['disk_quota'] = $params['disk_quota']*1024*1024;
+
+        $disk_quota = $params['disk_quota'];
+        $visibility = $params['visibility'];
+        $subscribe = $params['subscribe'];
+        $unsubscribe = $params['unsubscribe'];
+        if (!stristr($department_url, 'http://')) {
+            $department_url = 'http://'.$department_url;
+        }
+        
+        //tutor_name='".Database::escape_string($tutor_name)."',
+        $sql = "UPDATE $course_table SET
+                    course_language='".Database::escape_string($course_language)."',
+                    title='".Database::escape_string($title)."',
+                    category_code='".Database::escape_string($category_code)."',                                    
+                    visual_code='".Database::escape_string($visual_code)."',
+                    department_name='".Database::escape_string($department_name)."',
+                    department_url='".Database::escape_string($department_url)."',
+                    disk_quota='".Database::escape_string($disk_quota)."',
+                    visibility = '".Database::escape_string($visibility)."',
+                    subscribe = '".Database::escape_string($subscribe)."',
+                    unsubscribe='".Database::escape_string($unsubscribe)."'
+                WHERE code='".Database::escape_string($course_code)."'";
+        Database::query($sql);
+
+        //Delete only teacher relations that doesn't match the selected teachers
+        $cond='';
+        if (count($teachers)>0) {
+            foreach($teachers as $key) $cond.=" AND user_id<>'".$key."'";
+        }
+        $sql='DELETE FROM '.$course_user_table.' WHERE course_code="'.Database::escape_string($course_code).'" AND status="1"'.$cond;
+        Database::query($sql);
+
+        if (count($teachers)>0) {
+            foreach ($teachers as $key) {
+                //We check if the teacher is already subscribed in this course
+                $sql_select_teacher = 'SELECT 1 FROM '.$course_user_table.' WHERE user_id = "'.$key.'" AND course_code = "'.$course_code.'" ';
+                $result = Database::query($sql_select_teacher);
+
+                if (Database::num_rows($result) == 1) {
+                    $sql = 'UPDATE '.$course_user_table.' SET status = "1" WHERE course_code = "'.$course_code.'" AND user_id = "'.$key.'"  ';
+                } else {
+                    $sql = "INSERT INTO ".$course_user_table . " SET
+                        course_code = '".Database::escape_string($course_code). "',
+                        user_id = '".$key . "',
+                        status = '1',
+                        role = '',
+                        tutor_id='0',
+                        sort='0',
+                        user_course_cat='0'";
+                }
+                Database::query($sql);
+            }
+        }
+
+        $sql = "INSERT IGNORE INTO ".$course_user_table . " SET
+                    course_code = '".Database::escape_string($course_code). "',
+                    user_id = '".$tutor_id . "',
+                    status = '1',
+                    role = '',
+                    tutor_id='0',
+                    sort='0',
+                    user_course_cat='0'";
+        Database::query($sql);
+
+        $course_info = api_get_course_info($course_code);
+        $course_id = $course_info['real_id'];
+        $forum_config_table = Database::get_course_table(TOOL_FORUM_CONFIG_TABLE);
+        $sql = "UPDATE ".$forum_config_table." SET default_lang='".Database::escape_string($course_language)."' WHERE c_id = $course_id ";
+        Database::query($sql);
+        return $course_info;
+    }
 
     /**
      * Returns all the information of a given coursecode

+ 69 - 39
tests/migrate/migration.class.php

@@ -146,56 +146,83 @@ class Migration {
             }
         }
     }
-
-    function search_transactions($url, $params) {
-        $libpath = api_get_path(LIBRARY_PATH);
-        error_log('search_transactions');     
-
-        // Create the client instance        
-        error_log("Looking $url");
+    
+    function soap_call($web_service_params, $function_name, $params = array()) {
+        // Create the client instance
+        $url = $web_service_params['url'];        
+        error_log("\nCalling function '$function_name' in $url with params: ");        
+        var_dump($params);
 
         try {
             $client = new SoapClient($url);
         } catch (SoapFault $fault) {
             $error = 1;
             die('Error connecting');
-        }        
+        }
+        
         $client->debug_flag = true;     
-        try {
-            $user_details = $client->retornaDatos($params);
+        try {            
+            $data = $client->$function_name($params);            
         } catch (SoapFault $fault) {
             $error = 2;
-            die('Problem querying service');
+            die("Problem querying service - $function_name");
         }
-
-        if (!empty($user_details)) {
-            $xml = $user_details->retornaDatosResult->any;
-            // Cut the invalid XML and extract the valid chunk with the data
-            $stripped_xml = strstr($xml, '<diffgr:diffgram');
-            $xml = simplexml_load_string($stripped_xml);
-            //print_r($xml);
-            foreach ($xml->NewDataSet as $user) { //this is a "Table" object
-                $u = $user->Table;
-                //here we have the data, so if this whole block is integrated into a funcion, return
-                echo 'firstname: ' . $u->vchprimernombre . ' ' . $u->vchsegundonombre . "\n" . 'lastname: ' . $u->vchpaterno . ' ' . $u->vchmaterno . "\n";
-            }
+        
+        if (!empty($data)) {
+            error_log("Calling {$web_service_params['class']}::$function_name");
+            $result = $web_service_params['class']::$function_name($data);           
         } else {
-            //echo 'User was not recovered, activate the debug=true in the registration.soap.php file and see the error logs'."\n";
+            error_log('No data found');
         }
+        error_log("\n--End--");
+    }
+
+    function search_transactions($web_service_params) {
+        $libpath = api_get_path(LIBRARY_PATH);
+        error_log('search_transactions');
+        
+        //Testing transactions
+        
+        $result = self::soap_call($web_service_params, 'transacciones', array('ultimo' => 1, 'cantidad' => 10));
+
+        $result = self::soap_call($web_service_params, 'usuarioDetalles', array('uididpersona' => 'D236776B-D7A5-47FF-8328-55EBE9A59015'));
+        $result = self::soap_call($web_service_params, 'programaDetalles', array('uididprograma' => 'C3671999-095E-4018-9826-678BAFF595DF'));
+        $result = self::soap_call($web_service_params, 'cursoDetalles', array('uididcurso' => 'E2334974-9D55-4BB4-8B57-FCEFBE2510DC'));        
         
-        //Called transactions from Web service
-        //transacciones_detalles(id_last_transaction=0, transactions_number=10)
-            
-        //Add transactions here
-        $params = array(
-            'action' => 'usuario_agregar',
-            'item_id' =>  '1',
-            'orig_id' => '0',
-            'branch_id' => '1',
-            'dest_id' => null,
-            'status_id' => 0
-        );        
-        self::add_transaction($params);        
+        $result = self::soap_call($web_service_params, 'faseDetalles', array('uididfase' => 'EBF63F1C-FBD7-46A5-B039-80B5AF064929'));
+        $result = self::soap_call($web_service_params, 'frecuenciaDetalles', array('uididfrecuencia' => '0091CD3B-F042-11D7-B338-0050DAB14015'));
+        $result = self::soap_call($web_service_params, 'intensidadDetalles', array('uididintensidad' => '0091CD3C-F042-11D7-B338-0050DAB14015'));
+        $result = self::soap_call($web_service_params, 'mesesDetalles', array('uididfase' => 'EBF63F1C-FBD7-46A5-B039-80B5AF064929'));
+        $result = self::soap_call($web_service_params, 'sedeDetalles', array('uididsede' => '7379A7D3-6DC5-42CA-9ED4-97367519F1D9'));        
+        $result = self::soap_call($web_service_params, 'horarioDetalles', array('uididhorario' => 'E395895A-B480-456F-87F2-36B3A1EBB81C'));
+        
+        if (!empty($result)) {
+            error_log(count($result)." transactions found: ");
+            foreach ($result as $transaction_info) {
+                /*
+                id transaccion
+                id sede
+                id accion
+                id
+                origen
+                destino
+                timestamp                 
+                 */
+                //Add transactions here
+                $params = array(
+                    'action' => 'usuario_agregar',
+                    'item_id' =>  '1',
+                    'orig_id' => '0',
+                    'branch_id' => $transaction_info['sede'],
+                    'dest_id' => null,
+                    'status_id' => 0
+                );        
+                $transaction_id = self::add_transaction($params);
+                if ($transaction_id) {
+                    error_log("Transaction #$transaction_id was created");
+                }
+            }
+        }
     }
     
     function add_transaction($params) {
@@ -263,6 +290,7 @@ class Migration {
     }
     
     function update_transaction($params) {
+        return false;
         $table = Database::get_main_table(TABLE_MIGRATION_TRANSACTION);
         if (empty($params['id'])) {
             error_log('No transaction id provided during update_transaction');
@@ -281,7 +309,8 @@ class Migration {
 
     /* Load transactions */
 
-    function load_transactions($actions) {
+    function load_transactions($matches) {
+        $actions = $matches['actions'];
         
         //Getting transactions of the migration_transaction table
         $branches = self::get_branches();
@@ -304,6 +333,7 @@ class Migration {
 
                     //Looping transactions
                     foreach ($transactions as $transaction) {
+                        
                         //Calculating percentage
                         $percentage = $item / $count * 100;
                         if (round($percentage) % 10 == 0) {
@@ -325,7 +355,7 @@ class Migration {
                         //Loading function
                         $function_to_call = "transaction_" . $transaction['action'];
                         if (method_exists('MigrationCustom', $function_to_call)) {
-                            $result = MigrationCustom::$function_to_call($transaction);
+                            $result = MigrationCustom::$function_to_call($transaction, $matches['web_service_calls']);
                             
                             error_log("Calling function $function_to_call");
                             if ($result) {

+ 25 - 16
tests/migrate/migration.custom.class.php

@@ -148,8 +148,7 @@ class MigrationCustom {
         $data['status'] = STUDENT;
         if (isset($data['uidIdEmpleado'])) {
             $data['status'] = COURSEMANAGER;
-        }
-        
+        }       
         
         if (!isset($data['username']) || empty($data['username'])) {
             $data['firstname'] = (string) trim($data['firstname']); 
@@ -328,7 +327,7 @@ class MigrationCustom {
         }     
     }
     
-    static function create_attendance($data) {        
+    static function create_attendance($data) {    
         error_log('create_attendance');
         $session_id = $data['session_id'];
         $user_id    = $data['user_id'];
@@ -668,7 +667,7 @@ class MigrationCustom {
                     'message' => "User was created : $user_id",
                     'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL
                 );
-            } else  {
+            } else {
                 return array(
                     'message' => "User was not created : $uidIdPersonaId",
                     'status_id' => self::TRANSACTION_STATUS_FAILED
@@ -684,11 +683,18 @@ class MigrationCustom {
         $uidIdPersonaId = $data['item_id'];        
         $user_id = self::get_user_id_by_persona_id($uidIdPersonaId);
         if ($user_id) {
-            UserManager::delete_user($user_id);
-            return array(
-                'message' => "User was deleted : $user_id",
-                'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL
-            );
+            $result = UserManager::delete_user($user_id);
+            if ($result) {
+                return array(
+                    'message' => "User was deleted : $user_id",
+                    'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL
+                );
+            } else {
+                return array(
+                    'message' => "User was NOT deleted : $user_id error while calling function UserManager::delete_user",
+                    'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL
+                );
+            }
         } else {
             return array(
                 'message' => "User was not found : $uidIdPersonaId",
@@ -701,7 +707,7 @@ class MigrationCustom {
     static function transaction_usuario_editar($data, $web_service_details) {
         $uidIdPersonaId = $data['item_id'];
         $user_id = self::get_user_id_by_persona_id($uidIdPersonaId);
-        if ($user_id) {            
+        if ($user_id) {
             $user_info = $web_service_details['class']::usuarioDetalles($uidIdPersonaId);
             if ($user_info['error'] == false) {     
                 //Edit user
@@ -728,6 +734,7 @@ class MigrationCustom {
         $uidIdPrograma = $data['orig_id'];
         $uidIdProgramaDestination = $data['dest_id'];
         $user_id = self::get_user_id_by_persona_id($uidIdPersona);
+        
         if (empty($user_id)) {
             return array(
                 'message' => "User does not exists: $uidIdPersona",
@@ -750,7 +757,7 @@ class MigrationCustom {
                 );                
             } else {
                 return array(
-                    'message' => "Session does not exists $uidIdProgramaDestination - Move Session A to Session B",
+                    'message' => "Session ids were not correctly setup session_id 1: $session_id Session id 2 $uidIdProgramaDestination - Move Session A to Session B",
                     'status_id' => self::TRANSACTION_STATUS_FAILED
                 );
             }
@@ -790,7 +797,7 @@ class MigrationCustom {
     //Cursos
     //añadir curso curso_agregar CID
     static function transaction_curso_agregar($data, $web_service_details) {
-        $uidCursoId = $data['item_id'];        
+        $uidCursoId = $data['item_id'];  
         $course_info = $web_service_details['class']::cursoDetalles($uidCursoId);
         if ($course_info['error'] == false) { 
             $course_code = CourseManager::create_course($course_info);
@@ -832,16 +839,18 @@ class MigrationCustom {
     static function transaction_curso_editar($data, $web_service_details) {
         $course_code = self::get_real_course_code($data['item_id']);        
         if (!empty($course_code)) {        
-            $course_info = $web_service_details['class']::cursoDetalles($data['item_id']);
-            if ($course_info['error'] == false) {
+            $course_info = api_get_course_info($course_code);
+            $data_to_update = $web_service_details['class']::cursoDetalles($data['item_id']);
+            if ($data_to_update['error'] == false) {
                 //do some cleaning
-                CourseManager::update_attributes($course_info['real_id'], $course_info);
+                $data_to_update['code'] = $course_info['code'];
+                CourseManager::update($data_to_update);
                 return array(
                         'message' => "Course was updated $course_code ",
                         'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL
                 );
             } else {
-                return $course_info;
+                return $data_to_update;
             }            
          } else {
             return array(