// The only thing we need from db_matches is the definition of the web service require_once 'db_matches.php'; /** * Process */ $migration = new Migration(); $migration->set_web_service_connection_info($matches); require $migration->web_service_connection_info['filename']; $mig = new $migration->web_service_connection_info['class'](); error_log('Building in-memory data_list for speed-up ' . time()); $data_list = array('boost_users' => true, 'boost_courses' => true, 'boost_sessions' => true); /** * Build an array of in-memory database data to reduce time spent querying */ if (count($data_list['users']) < 1) { MigrationCustom::fill_data_list($data_list); } error_log('Built in-memory data_list for speed-up ' . time()); // Counter for transactions found and dealt with $count_transactions = 0; /** * Check each branch for transactions to execute (and execute them) */ $branches = $migration->get_branches(); foreach ($branches as $id => $branch) { $response = ''; $branch_id = $branch['branch_id']; if ($mode == 'process') { //Load transactions saved before $params = array('branch_id' => $branch_id, 'number_of_transactions' => $num_trans); $migration->get_transactions_from_webservice($params);
/** * Executes a fields match * @param array List of fields that must be matched ('fields_match' => array(0=>array('orig'=>'...','dest'=>'...',...))) * @param array Row of data * @param array Extra fields table definition */ function execute_field_match($table, $row, $extra_fields = array()) { //error_log('execute_field_match'); $dest_row = array(); $first_field = ''; // If a dest table has been defined, fill $my_extra_fields with the // extra_fields defined for that table $my_extra_fields = isset($table['dest_table']) && isset($extra_fields[$table['dest_table']]) ? $extra_fields[$table['dest_table']] : null; $extra_field_obj = null; $extra_field_value_obj = null; if (!empty($table['dest_table'])) { $extra_field_obj = new ExtraField($table['dest_table']); $extra_field_value_obj = new ExtraFieldValue($table['dest_table']); } $extra_fields_to_insert = array(); global $data_list; // Fill the data list, if possible if (count($data_list['users']) < 1) { MigrationCustom::fill_data_list($data_list); } foreach ($table['fields_match'] as $id_field => $details) { //if ($table['dest_table'] == 'session') {error_log('Processing field '.$details['orig']);} $params = array(); // Remove the table name prefix if any (in the orig field) if (isset($details['orig'])) { $field_exploded = explode('.', $details['orig']); if (isset($field_exploded[1])) { $details['orig'] = $field_exploded[1]; } } // process the fields one by one if ($details['func'] == 'none' || empty($details['func'])) { // if no function is defined to alter the field, take it as is $dest_data = $row[$details['orig']]; } else { // if an alteration function is defined, run it on the field //error_log(__FILE__.' '.__LINE__.' Preparing to treat field with '.$details['func']); $dest_data = MigrationCustom::$details['func']($row[$details['orig']], $data_list, $row); } if (isset($dest_row[$details['dest']])) { $dest_row[$details['dest']] .= ' ' . $dest_data; } else { $dest_row[$details['dest']] = $dest_data; } //Extra field values $extra_field = isset($my_extra_fields) && isset($my_extra_fields[$details['dest']]) ? $my_extra_fields[$details['dest']] : null; // Check the array is there //if($table['dest_table'] == 'session') error_log('Extra field: '.print_r($extra_field,1)); if (!empty($extra_field) && $extra_field_obj) { //if($table['dest_table'] == 'session') error_log('Extra_field no es vacío'); // Check the "options" array is defined for this field (checking is_array is crucial here, see BT#5215) if (is_array($extra_field['options']) && count($extra_field['options']) > 0) { //if($table['dest_table'] == 'session') error_log('...y sus opciones son: '.print_r($extra_field['options'],1)); //if($details['orig']=='uidIdPrograma') { error_log('Eso era lo inicial, del cual se tomó '.$details['dest'].': '.print_r($my_extra_fields,1));} $options = $extra_field['options']; $field_type = $extra_field['field_type']; //if ($table['dest_table'] == 'session') {error_log('Field orig: '.$details['orig']);} if (!empty($options)) { //if ($table['dest_table'] == 'session') {error_log('Options not empty');} if (!is_array($options)) { $options = array($options); } foreach ($options as $option) { if (is_array($option)) { foreach ($option as $key => $value) { //error_log("$key $value --> {$dest_row[$details['dest']]} "); if ($key == 'option_value' && $value == $dest_row[$details['dest']]) { $value = $option['option_display_text']; if ($field_type == Extrafield::FIELD_TYPE_SELECT) { $value = $option['option_value']; } $params = array('field_id' => $option['field_id'], 'field_value' => $value); break 2; } } } } } } else { $params = array('field_id' => $extra_field, 'field_value' => $dest_row[$details['dest']]); } if (!empty($params)) { $extra_fields_to_insert[] = $params; } unset($dest_row[$details['dest']]); } unset($extra_field); } //if ($table['dest_table']=='session') { error_log('Params: '.print_r($params,1)); } // If a dest_func entry has been defind, use this entry as the main // operation to execute when inserting the item if (!empty($table['dest_func'])) { //error_log('Calling '.$table['dest_func'].' on data recovered: '.print_r($dest_row, 1)); $dest_row['return_item_if_already_exists'] = true; $item_result = false; // Using call_user_func_array() has a serious impact on performance switch ($table['dest_func']) { case USER_FUNC_EXCEPTION_GRADEBOOK: MigrationCustom::add_gradebook_result_with_evaluation($dest_row); break; case USER_FUNC_EXCEPTION_ATTENDANCE: MigrationCustom::create_attendance($dest_row); break; default: $item_result = call_user_func_array($table['dest_func'], array($dest_row, $data_list)); } //After the function was executed fill the $data_list array switch ($table['dest_table']) { case 'course': //Saving courses in array if ($item_result) { //$data_list['courses'][$dest_row['uidIdCurso']] = $item_result; } else { error_log('Course Not FOUND'); error_log(print_r($item_result, 1)); return false; } $handler_id = $item_result['code']; break; case 'user': if (!empty($item_result)) { $handler_id = $item_result['user_id']; //error_log($dest_row['email'].' '.$dest_row['uidIdPersona']); if (isset($dest_row['uidIdAlumno'])) { //$data_list['users_alumno'][$dest_row['uidIdAlumno']]['extra'] = $item_result; } if (isset($dest_row['uidIdEmpleado'])) { //print_r($dest_row['uidIdEmpleado']);exit; //$data_list['users_empleado'][$dest_row['uidIdEmpleado']]['extra'] = $item_result; } } else { global $api_failureList; error_log('Empty user details'); error_log(print_r($api_failureList, 1)); } break; case 'session': //$data_list['sessions'][$dest_row['uidIdPrograma']] = $item_result; $handler_id = $item_result; //session_id break; } //Saving extra fields of the element //error_log('Checking extra fields for '.$extra_field_value_obj->handler_id.' '.$handler_id); if (!empty($extra_fields_to_insert)) { foreach ($extra_fields_to_insert as $params) { //error_log('Trying to save '.print_r($params,1)); $params[$extra_field_value_obj->handler_id] = $handler_id; $extra_field_value_obj->save($params); } } } else { // $this->errors_stack[] = "No destination data dest_func found. Abandoning data with first field $first_field = " . $dest_row[$first_field]; } unset($extra_fields_to_insert); //remove to free up memory return $dest_row; }
static function programaDetalles($data, $params) { global $data_list; $result = self::genericDetalles($data, __FUNCTION__, $params); if ($result['error'] == true) { return $result; } //Searching course code $course_code = MigrationCustom::get_real_course_code($result['course_code']); $result['course_code'] = $course_code; $course_info = api_get_course_info($course_code); //Getting sede $extra_field = new ExtraField('session'); $extra_field_option = new ExtraFieldOption('session'); $extra_field_info = $extra_field->get_handler_field_info_by_field_variable('sede'); $extra_field_option_info_sede = $extra_field_option->get_field_option_by_field_and_option($extra_field_info['id'], $result['uididsede']); $sede_name = null; if (isset($extra_field_option_info_sede[0]) && !empty($extra_field_option_info_sede[0]['option_display_text'])) { $sede_name = $extra_field_option_info_sede[0]['option_display_text']; } $extra_field_info = $extra_field->get_handler_field_info_by_field_variable('aula'); $extra_field_option_info_aula = $extra_field_option->get_field_option_by_field_and_option($extra_field_info['id'], $result['uididaula']); $aula_name = null; if (isset($extra_field_option_info_aula[0]) && !empty($extra_field_option_info_sede[0]['option_display_text'])) { $aula_name = $extra_field_option_info_aula[0]['option_display_text']; } //Getting horario $extra_field_info = $extra_field->get_handler_field_info_by_field_variable('horario'); $extra_field_option_info_horario = $extra_field_option->get_field_option_by_field_and_option($extra_field_info['id'], $result['uididhorario']); $horario_name = null; if (isset($extra_field_option_info_horario[0]) && !empty($extra_field_option_info_horario[0]['option_display_text'])) { $horario_name = $extra_field_option_info_horario[0]['option_display_text']; } //Setting the session name $result['name'] = substr($sede_name, 13) . ' - ' . $result['chrperiodo'] . " - " . $course_info['title'] . ' ' . $horario_name . ' ' . $aula_name; $result['extra_uidIdPrograma'] = strtoupper($params['uididprograma']); $result['extra_horario'] = strtoupper($result['uididhorario']); $result['extra_sede'] = strtoupper($result['uididsede']); $result['extra_aula'] = strtoupper($result['uididaula']); $result['extra_periodo'] = strtoupper($result['chrperiodo']); $result['display_start_date'] = MigrationCustom::clean_date_time_from_ws($result['display_start_date']); $result['display_end_date'] = MigrationCustom::clean_date_time_from_ws($result['display_end_date']); $result['access_start_date'] = MigrationCustom::clean_date_time_from_ws($result['access_start_date']); $result['access_end_date'] = MigrationCustom::clean_date_time_from_ws($result['access_end_date']); //$result['estado'] = intval($result['estado']); //Searching id_coach $result['id_coach'] = MigrationCustom::get_user_id_by_persona_id($result['id_coach'], $data_list); unset($result['uididprograma']); unset($result['uididsede']); unset($result['uididhorario']); unset($result['chrperiodo']); return $result; }
$cal_id = $cal['id']; $sql = "SELECT * FROM c_attendance_sheet WHERE c_id = {$course_id} AND attendance_calendar_id = {$cal_id}"; $res_att = Database::query($sql); $att_count = Database::num_rows($res_att); if ($att_count < count($u)) { $out4 = "------ Found {$att_count} when should have found " . count($u) . " attendances for " . $cal['date_time'] . "\n"; echo $out1 . $out2 . $out3 . $out4; while ($row_att = Database::fetch_assoc($res_att)) { $atts[] = $row_att['user_id']; } $missing = array_diff($u, $atts); foreach ($missing as $u1) { $sqlu = "SELECT field_value FROM user_field_values where field_id = {$uidf} and user_id = {$u1}"; $resu = Database::query($sqlu); $uid = Database::result($resu); $params = array('item_id' => $uid, 'orig_id' => $sid, 'info' => substr($cal['date_time'], 0, 10), 'branch_id' => $sedes[$sede]); $r8 = MigrationCustom::transaction_34($params, $matches['web_service_calls']); var_dump($r8); } } } //$a->update_users_results($u,$at_id); } else { //var_dump($att); } } if ($session_id >= $max) { break; } } die('Finished processing ' . $max . "\n");