/**
  * Update an extra field value for a given user
  * @param    integer   $userId User ID
  * @param    string    $variable Field variable name
  * @param    string    $value Field value
  *
  * @return    boolean    true if field updated, false otherwise
  */
 public static function update_extra_field_value($userId, $variable, $value = '')
 {
     $extraFieldValue = new ExtraFieldValue('user');
     $params = ['item_id' => $userId, 'variable' => $variable, 'value' => $value];
     $extraFieldValue->save($params);
 }
Beispiel #2
0
 /**
  * @param string $file
  * @param bool   $moveFile
  *
  * @return int
  */
 private function importCalendarStatic($file, $moveFile = true)
 {
     $data = Import::csv_to_array($file);
     if (!empty($data)) {
         $this->logger->addInfo(count($data) . " records found.");
         $eventsToCreate = array();
         $errorFound = false;
         foreach ($data as $row) {
             $sessionId = null;
             $externalSessionId = null;
             if (isset($row['external_sessionID'])) {
                 $externalSessionId = $row['external_sessionID'];
                 $sessionId = SessionManager::get_session_id_from_original_id($externalSessionId, $this->extraFieldIdNameList['session']);
             }
             $courseCode = null;
             if (isset($row['coursecode'])) {
                 $courseCode = $row['coursecode'];
             }
             $courseInfo = api_get_course_info($courseCode);
             if (empty($courseInfo)) {
                 $this->logger->addInfo("Course '{$courseCode}' does not exists");
             }
             if (empty($sessionId)) {
                 $this->logger->addInfo("external_sessionID: " . $externalSessionId . " does not exists.");
             }
             $teacherId = null;
             if (!empty($sessionId) && !empty($courseInfo)) {
                 $courseIncluded = SessionManager::relation_session_course_exist($sessionId, $courseInfo['code']);
                 if ($courseIncluded == false) {
                     $this->logger->addInfo("Course '{$courseCode}' is not included in session: {$sessionId}");
                     $errorFound = true;
                 } else {
                     $teachers = CourseManager::get_coach_list_from_course_code($courseInfo['code'], $sessionId);
                     // Getting first teacher.
                     if (!empty($teachers)) {
                         $teacher = current($teachers);
                         $teacherId = $teacher['user_id'];
                     } else {
                         $sessionInfo = api_get_session_info($sessionId);
                         $teacherId = $sessionInfo['id_coach'];
                     }
                 }
             } else {
                 $errorFound = true;
             }
             if (empty($teacherId)) {
                 $errorFound = true;
                 $this->logger->addInfo("No teacher found in course code : '{$courseCode}' and session: '{$sessionId}'");
             }
             $date = $row['date'];
             $startTime = $row['time_start'];
             $endTime = $row['time_end'];
             $title = $row['title'];
             $comment = $row['comment'];
             $color = isset($row['color']) ? $row['color'] : '';
             $startDateYear = substr($date, 0, 4);
             $startDateMonth = substr($date, 4, 2);
             $startDateDay = substr($date, 6, 8);
             $startDate = $startDateYear . '-' . $startDateMonth . '-' . $startDateDay . ' ' . $startTime . ":00";
             $endDate = $startDateYear . '-' . $startDateMonth . '-' . $startDateDay . ' ' . $endTime . ":00";
             if (!api_is_valid_date($startDate) || !api_is_valid_date($endDate)) {
                 $this->logger->addInfo("Verify your dates:  '{$startDate}' : '{$endDate}' ");
                 $errorFound = true;
             }
             // If old events do nothing.
             /*if (api_strtotime($startDate) < time()) {
                   continue;
               }*/
             if ($errorFound == false) {
                 $eventsToCreate[] = array('start' => $startDate, 'end' => $endDate, 'title' => $title, 'sender_id' => $teacherId, 'course_id' => $courseInfo['real_id'], 'session_id' => $sessionId, 'comment' => $comment, 'color' => $color, $this->extraFieldIdNameList['calendar_event'] => $row['external_calendar_itemID']);
             }
         }
         if (empty($eventsToCreate)) {
             $this->logger->addInfo("No events to add");
             return 0;
         }
         $this->logger->addInfo("Ready to insert events");
         $agenda = new Agenda();
         $extraFieldValue = new ExtraFieldValue('calendar_event');
         $extraFieldName = $this->extraFieldIdNameList['calendar_event'];
         $externalEventId = null;
         $extraField = new ExtraField('calendar_event');
         $extraFieldInfo = $extraField->get_handler_field_info_by_field_variable($extraFieldName);
         if (empty($extraFieldInfo)) {
             $this->logger->addInfo("No calendar event extra field created: {$extraFieldName}");
             return 0;
         }
         foreach ($eventsToCreate as $event) {
             $update = false;
             $item = null;
             if (!isset($event[$extraFieldName])) {
                 $this->logger->addInfo("No external_calendar_itemID found. Skipping ...");
                 continue;
             } else {
                 $externalEventId = $event[$extraFieldName];
                 if (empty($externalEventId)) {
                     $this->logger->addInfo("external_calendar_itemID was set but empty. Skipping ...");
                     continue;
                 }
                 $items = $extraFieldValue->get_item_id_from_field_variable_and_field_value($extraFieldName, $externalEventId, false, false, true);
                 $item = null;
                 foreach ($items as $tempItem) {
                     if ($tempItem['c_id'] == $event['course_id']) {
                         $item = $tempItem;
                     }
                 }
                 if (!empty($item)) {
                     $this->logger->addInfo("Event #{$externalEventId} was already added. Updating ...");
                     $update = true;
                     //continue;
                 }
             }
             $courseInfo = api_get_course_info_by_id($event['course_id']);
             $agenda->set_course($courseInfo);
             $agenda->setType('course');
             $agenda->setSessionId($event['session_id']);
             $agenda->setSenderId($event['sender_id']);
             $agenda->setIsAllowedToEdit(true);
             $eventComment = $event['comment'];
             $color = $event['color'];
             // To use the event comment you need
             // ALTER TABLE c_calendar_event ADD COLUMN comment TEXT;
             // add in configuration.php allow_agenda_event_comment = true
             if (empty($courseInfo)) {
                 $this->logger->addInfo("No course found for added: #" . $event['course_id'] . " Skipping ...");
                 continue;
             }
             if (empty($event['sender_id'])) {
                 $this->logger->addInfo("No sender found: #" . $event['sender_id'] . " Skipping ...");
                 continue;
             }
             $content = '';
             if ($update && isset($item['calendar_event_id'])) {
                 //the event already exists, just update
                 $eventId = $agenda->edit_event($item['calendar_event_id'], $event['start'], $event['end'], false, $event['title'], $content, array('everyone'), array(), null, $eventComment, $color);
                 if ($eventId !== false) {
                     $this->logger->addInfo("Event updated: #{$eventId}");
                 } else {
                     $this->logger->addInfo("Error while updating event.");
                 }
             } else {
                 // New event. Create it.
                 $eventId = $agenda->add_event($event['start'], $event['end'], false, $event['title'], $content, array('everyone'), false, null, array(), null, $eventComment, $color);
                 if (!empty($eventId)) {
                     $extraFieldValue->is_course_model = true;
                     $extraFieldValue->save(array('field_value' => $externalEventId, 'field_id' => $extraFieldInfo['id'], 'calendar_event_id' => $eventId, 'c_id' => $event['course_id']));
                     $this->logger->addInfo("Event added: #{$eventId}");
                 } else {
                     $this->logger->addInfo("Error while creating event.");
                 }
             }
         }
     }
     if ($moveFile) {
         $this->moveFile($file);
     }
 }
Beispiel #3
0
 /**
  * Update an extra field value for a given course
  * @param    integer    Course ID
  * @param    string    Field variable name
  * @param    string    Field value
  * @return    boolean    true if field updated, false otherwise
  */
 public static function update_course_extra_field_value($course_code, $variable, $value = '')
 {
     $courseInfo = api_get_course_info($course_code);
     $courseId = $courseInfo['real_id'];
     $extraFieldValues = new ExtraFieldValue('course');
     $params = ['item_id' => $courseId, 'variable' => $variable, 'value' => $value];
     $extraFieldValues->save($params);
 }
 static function transaction_cambiar_generic($extra_field_variable, $data)
 {
     global $data_list;
     $uidIdPrograma = $data['item_id'];
     //$orig_id = $data['orig_id'];
     $destination_id = $data['dest_id'];
     $common_message = " - item_id:  {$uidIdPrograma}, dest_id: {$destination_id} -  looking for extra_field_variable: {$extra_field_variable} - with data " . print_r($data, 1);
     $session_id = self::get_session_id_by_programa_id($uidIdPrograma, $data_list);
     if (!empty($session_id)) {
         //??
         $extra_field = new ExtraField('session');
         $extra_field_info = $extra_field->get_handler_field_info_by_field_variable($extra_field_variable);
         //horario, aula, etc
         if (empty($extra_field_info)) {
             return array('message' => "Extra field {$extra_field_variable} doest not exists in the DB {$common_message}", 'status_id' => self::TRANSACTION_STATUS_FAILED);
         }
         //check if option exists
         $extra_field_option = new ExtraFieldOption('session');
         $extra_field_option_info = $extra_field_option->get_field_option_by_field_and_option($extra_field_info['id'], $destination_id);
         //horario, aula, etc
         if ($extra_field_option_info) {
             $extra_field_value = new ExtraFieldValue('session');
             //Getting info before
             $info_before = $extra_field_value->get_values_by_handler_and_field_id($session_id, $extra_field_info['id']);
             //Delete previous extra field value
             $extra_field_value->delete_values_by_handler_and_field_id($session_id, $extra_field_info['id']);
             $params = array('session_id' => $session_id, 'field_id' => $extra_field_info['id'], 'field_value' => $destination_id);
             $extra_field_value->save($params);
             //Getting info after
             $info_after = $extra_field_value->get_values_by_handler_and_field_id($session_id, $extra_field_info['id']);
             return array('entity' => $extra_field_variable, 'before' => $info_before, 'after' => $info_after, 'message' => "Extra field  {$extra_field_variable} saved with params: " . print_r($params, 1), 'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL);
         } else {
             return array('message' => "Option does not exists dest_id: {$destination_id}  {$common_message}", 'status_id' => self::TRANSACTION_STATUS_FAILED);
         }
     } else {
         return array('message' => "Session does not exists: {$uidIdPrograma}   {$common_message}", 'status_id' => self::TRANSACTION_STATUS_FAILED);
     }
 }
 /**
  * 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;
 }
 /**
  * Register the Registration ID (token) obtained from Google Cloud Messaging for a user
  * @param Chamilo\UserBundle\Entity\User $user The user
  * @param string $registrationId The token registration id from Google Cloud Messaging
  * @return int The id after insert or the number of affected rows after update. Otherwhise return false
  */
 public static function setGcmRegistrationId(Chamilo\UserBundle\Entity\User $user, $registrationId)
 {
     $registrationId = Security::remove_XSS($registrationId);
     $extraFieldValue = new ExtraFieldValue('user');
     return $extraFieldValue->save(['variable' => self::EXTRA_FIELD_GCM_REGISTRATION, 'value' => $registrationId, 'item_id' => $user->getId()]);
 }
Beispiel #7
0
 /**
  * @param string $file
  * @param bool   $moveFile
  *
  * @return int
  */
 private function importCalendarStatic($file, $moveFile = true)
 {
     $data = Import::csvToArray($file);
     if ($this->getDumpValues()) {
         // Remove all calendar items
         $truncateTables = array(Database::get_course_table(TABLE_AGENDA), Database::get_course_table(TABLE_AGENDA_ATTACHMENT), Database::get_course_table(TABLE_AGENDA_REPEAT), Database::get_course_table(TABLE_AGENDA_REPEAT_NOT), Database::get_main_table(TABLE_PERSONAL_AGENDA), Database::get_main_table(TABLE_PERSONAL_AGENDA_REPEAT_NOT), Database::get_main_table(TABLE_PERSONAL_AGENDA_REPEAT));
         foreach ($truncateTables as $table) {
             $sql = "TRUNCATE {$table}";
             Database::query($sql);
         }
         $table = Database::get_course_table(TABLE_ITEM_PROPERTY);
         $sql = "DELETE FROM {$table} WHERE tool = 'calendar_event'";
         Database::query($sql);
     }
     if (!empty($data)) {
         $this->logger->addInfo(count($data) . " records found.");
         $eventsToCreate = array();
         $errorFound = false;
         foreach ($data as $row) {
             $sessionId = null;
             $externalSessionId = null;
             if (isset($row['external_sessionID'])) {
                 $externalSessionId = $row['external_sessionID'];
                 $sessionId = SessionManager::getSessionIdFromOriginalId($externalSessionId, $this->extraFieldIdNameList['session']);
             }
             $courseCode = null;
             if (isset($row['coursecode'])) {
                 $courseCode = $row['coursecode'];
             }
             $courseInfo = api_get_course_info($courseCode);
             if (empty($courseInfo)) {
                 $this->logger->addInfo("Course '{$courseCode}' does not exists");
             }
             if (empty($sessionId)) {
                 $this->logger->addInfo("external_sessionID: " . $externalSessionId . " does not exists.");
             }
             $teacherId = null;
             if (!empty($sessionId) && !empty($courseInfo)) {
                 $courseIncluded = SessionManager::relation_session_course_exist($sessionId, $courseInfo['real_id']);
                 if ($courseIncluded == false) {
                     $this->logger->addInfo("Course '{$courseCode}' is not included in session: {$sessionId}");
                     $errorFound = true;
                 } else {
                     $teachers = CourseManager::get_coach_list_from_course_code($courseInfo['code'], $sessionId);
                     // Getting first teacher.
                     if (!empty($teachers)) {
                         $teacher = current($teachers);
                         $teacherId = $teacher['user_id'];
                     } else {
                         $sessionInfo = api_get_session_info($sessionId);
                         $teacherId = $sessionInfo['id_coach'];
                     }
                 }
             } else {
                 $errorFound = true;
             }
             if (empty($teacherId)) {
                 $errorFound = true;
                 $this->logger->addInfo("No teacher found in course code : '{$courseCode}' and session: '{$sessionId}'");
             }
             $date = $row['date'];
             $startTime = $row['time_start'];
             $endTime = $row['time_end'];
             $title = $row['title'];
             $startDateYear = substr($date, 0, 4);
             $startDateMonth = substr($date, 4, 2);
             $startDateDay = substr($date, 6, 8);
             $startDate = $startDateYear . '-' . $startDateMonth . '-' . $startDateDay . ' ' . $startTime . ":00";
             $endDate = $startDateYear . '-' . $startDateMonth . '-' . $startDateDay . ' ' . $endTime . ":00";
             if (!api_is_valid_date($startDate) or !api_is_valid_date($endDate)) {
                 $this->logger->addInfo("Verify your dates:  '{$startDate}' : '{$endDate}' ");
                 $errorFound = true;
             }
             if ($errorFound == false) {
                 $eventsToCreate[] = array('start' => $startDate, 'end' => $endDate, 'title' => $title, 'sender_id' => $teacherId, 'course_id' => $courseInfo['real_id'], 'session_id' => $sessionId, $this->extraFieldIdNameList['calendar_event'] => $row['external_calendar_itemID']);
             }
         }
         if (empty($eventsToCreate)) {
             $this->logger->addInfo("No events to add");
             return 0;
         }
         $this->logger->addInfo("Ready to insert events");
         $content = null;
         $agenda = new Agenda();
         $extraFieldValue = new ExtraFieldValue('calendar_event');
         $extraFieldName = $this->extraFieldIdNameList['calendar_event'];
         $externalEventId = null;
         $extraField = new ExtraField('calendar_event');
         $extraFieldInfo = $extraField->get_handler_field_info_by_field_variable($extraFieldName);
         if (empty($extraFieldInfo)) {
             $this->logger->addInfo("No calendar event extra field created: {$extraFieldName}");
             return 0;
         }
         foreach ($eventsToCreate as $event) {
             if (!isset($event[$extraFieldName])) {
                 $this->logger->addInfo("No external_calendar_itemID found. Skipping ...");
                 continue;
             } else {
                 $externalEventId = $event[$extraFieldName];
                 $item = $extraFieldValue->get_item_id_from_field_variable_and_field_value($extraFieldName, $externalEventId);
                 if (!empty($item) || empty($externalEventId)) {
                     $this->logger->addInfo("Event #{$externalEventId} was already added . Skipping ...");
                     continue;
                 }
             }
             $courseInfo = api_get_course_info_by_id($event['course_id']);
             $agenda->set_course($courseInfo);
             $agenda->setType('course');
             $agenda->setSessionId($event['session_id']);
             $agenda->setSenderId($event['sender_id']);
             $agenda->setIsAllowedToEdit(true);
             $eventComment = $event['comment'];
             if (empty($courseInfo)) {
                 $this->logger->addInfo("No course found for added: #" . $event['course_id'] . " Skipping ...");
                 continue;
             }
             if (empty($event['sender_id'])) {
                 $this->logger->addInfo("No sender found: #" . $event['sender_id'] . " Skipping ...");
                 continue;
             }
             $eventId = $agenda->addEvent($event['start'], $event['end'], false, $event['title'], $content, array('everyone'), false, null, array(), null, $eventComment);
             if (!empty($eventId)) {
                 $extraFieldValue->save(array('value' => $externalEventId, 'field_id' => $extraFieldInfo['id'], 'item_id' => $eventId));
                 $this->logger->addInfo("Event added: #{$eventId}");
             } else {
                 $this->logger->addInfo("Error while creating event.");
             }
         }
     }
     if ($moveFile) {
         $this->moveFile($file);
     }
 }