Unify extra fields in one table.

1.10.x
Julio Montoya 11 years ago
parent b9b3a61e7a
commit 327c07aae1
  1. 37
      main/admin/configure_inscription.php
  2. 15
      main/admin/course_edit.php
  3. 84
      main/admin/extra_field_options.php
  4. 110
      main/admin/extra_fields.php
  5. 2
      main/admin/resume_session.php
  6. 123
      main/admin/user_add.php
  7. 24
      main/admin/user_edit.php
  8. 20
      main/auth/inscription.php
  9. 182
      main/auth/profile.php
  10. 7
      main/auth/sso/sso.Drupal.class.php
  11. 28
      main/cron/import_csv.php
  12. 38
      main/inc/ajax/model.ajax.php
  13. 45
      main/inc/lib/CourseField.php
  14. 12
      main/inc/lib/SmsPlugin.php
  15. 39
      main/inc/lib/api.lib.php
  16. 150
      main/inc/lib/auth.lib.php
  17. 405
      main/inc/lib/course.lib.php
  18. 70
      main/inc/lib/course_category.lib.php
  19. 18
      main/inc/lib/database.constants.inc.php
  20. 837
      main/inc/lib/extra_field.lib.php
  21. 255
      main/inc/lib/extra_field_option.lib.php
  22. 495
      main/inc/lib/extra_field_value.lib.php
  23. 327
      main/inc/lib/sessionmanager.lib.php
  24. 57
      main/inc/lib/tracking.lib.php
  25. 996
      main/inc/lib/usermanager.lib.php
  26. 18
      main/install/data.sql
  27. 4
      main/newscorm/lp_controller.php
  28. 2
      main/newscorm/lp_edit.php
  29. 18
      main/reports/templates/courseArticulate.reports.php
  30. 14
      main/reports/templates/generic.reports.php
  31. 102
      main/social/profile.php
  32. 183
      main/survey/fillsurvey.php
  33. 10
      main/tracking/courseLog.php
  34. 165
      main/user/subscribe_user.php
  35. 59
      main/user/user.php
  36. 17
      main/webservices/cm_webservice.php
  37. 2
      main/webservices/cm_webservice_announcements.php
  38. 4
      main/webservices/cm_webservice_forum.php
  39. 4
      main/webservices/cm_webservice_user.php
  40. 9
      main/webservices/example_fill_users_fields.php
  41. 1423
      main/webservices/registration.soap.php
  42. 23
      main/webservices/webservice.php
  43. 41
      main/webservices/webservice_user.php
  44. 14
      plugin/advanced_subscription/ajax/advanced_subscription.ajax.php
  45. 2
      plugin/advanced_subscription/cron/notify_by_mail.php
  46. 95
      plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php
  47. 17
      plugin/advanced_subscription/src/admin_view.php
  48. 152
      plugin/advanced_subscription/src/scripts/insert_session_fields.php
  49. 18
      plugin/advanced_subscription/test/mails.php
  50. 2
      plugin/clockworksms/lib/clockworksms.lib.php
  51. 19
      plugin/skype/src/Skype.php
  52. 39
      tests/main/inc/lib/usermanager.lib.test.php
  53. 152
      tests/scripts/insert_session_fields.php
  54. 21
      tests/scripts/userfields_to_groups.php

@ -74,9 +74,9 @@ if (api_is_multiple_url_enabled()) {
$clean_url .= '/';
$homep = api_get_path(SYS_PATH).'home/'; //homep for Home Path
$homep_new = api_get_path(SYS_PATH).'home/'.$clean_url; //homep for Home Path added the url
$new_url_dir = api_get_path(SYS_PATH).'home/'.$clean_url;
$homep = api_get_path(SYS_APP_PATH).'home/'; //homep for Home Path
$homep_new = api_get_path(SYS_APP_PATH).'home/'.$clean_url; //homep for Home Path added the url
$new_url_dir = api_get_path(SYS_APP_PATH).'home/'.$clean_url;
//we create the new dir for the new sites
if (!is_dir($new_url_dir)) {
mkdir($new_url_dir, api_get_permissions_for_new_directories());
@ -84,11 +84,11 @@ if (api_is_multiple_url_enabled()) {
}
} else {
$homep_new = '';
$homep = api_get_path(SYS_PATH).'home/'; //homep for Home Path
$homep = api_get_path(SYS_APP_PATH).'home/'; //homep for Home Path
}
$topf = 'register_top'; //topf for Top File
$ext = '.html'; //ext for HTML Extension - when used frequently, variables are
$topf = 'register_top'; //topf for Top File
$ext = '.html'; //ext for HTML Extension - when used frequently, variables are
$homef = array($topf);
// If language-specific file does not exist, create it by copying default file
@ -240,18 +240,30 @@ if ($display_all_form) {
}
// EXTENDED FIELDS
if (api_get_setting('extended_profile') == 'true' && api_get_setting('extendedprofile_registration','mycomptetences') == 'true') {
if (api_get_setting('extended_profile') == 'true' &&
api_get_setting('extendedprofile_registration','mycomptetences') == 'true'
) {
$form->addHtmlEditor('competences', get_lang('MyCompetences'), false, false, array('ToolbarSet' => 'Profile', 'Width' => '100%', 'Height' => '130'));
}
if (api_get_setting('extended_profile') == 'true' && api_get_setting('extendedprofile_registration','mydiplomas') == 'true') {
if (api_get_setting('extended_profile') == 'true' &&
api_get_setting('extendedprofile_registration','mydiplomas') == 'true'
) {
$form->addHtmlEditor('diplomas', get_lang('MyDiplomas'), false, false, array('ToolbarSet' => 'Profile', 'Width' => '100%', 'Height' => '130'));
}
if (api_get_setting('extended_profile') == 'true' && api_get_setting('extendedprofile_registration','myteach') == 'true') {
if (api_get_setting('extended_profile') == 'true' &&
api_get_setting('extendedprofile_registration','myteach') == 'true'
) {
$form->addHtmlEditor('teach', get_lang('MyTeach'), false, false, array('ToolbarSet' => 'Profile', 'Width' => '100%', 'Height' => '130'));
}
if (api_get_setting('extended_profile') == 'true' && api_get_setting('extendedprofile_registration','mypersonalopenarea') == 'true') {
if (api_get_setting('extended_profile') == 'true' &&
api_get_setting('extendedprofile_registration','mypersonalopenarea') == 'true'
) {
$form->addHtmlEditor('openarea', get_lang('MyPersonalOpenArea'), false, false, array('ToolbarSet' => 'Profile', 'Width' => '100%', 'Height' => '130'));
}
if (api_get_setting('extended_profile') == 'true') {
if (api_get_setting('extendedprofile_registrationrequired', 'mycomptetences') == 'true') {
$form->addRule('competences', get_lang('ThisFieldIsRequired'), 'required');
@ -266,8 +278,9 @@ if ($display_all_form) {
$form->addRule('openarea', get_lang('ThisFieldIsRequired'), 'required');
}
}
$extra_data = UserManager::get_extra_user_data(api_get_user_id(), true);
UserManager::set_extra_fields_in_form($form, $extra_data, 'registration');
$extraField = new ExtraField('user');
$extraField->addElements($form);
}
// Terms and conditions

@ -10,8 +10,6 @@ $this_section = SECTION_PLATFORM_ADMIN;
api_protect_admin_script();
$htmlHeadXtra[] = '<script src="' . api_get_path(WEB_LIBRARY_PATH) . 'javascript/tag/jquery.fcbkcomplete.js" type="text/javascript" language="javascript"></script>';
$course_table = Database::get_main_table(TABLE_MAIN_COURSE);
$course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
@ -204,18 +202,19 @@ $form->addElement('text', 'disk_quota', array(get_lang('CourseQuota'), null, get
$form->addRule('disk_quota', get_lang('ThisFieldIsRequired'), 'required');
$form->addRule('disk_quota', get_lang('ThisFieldShouldBeNumeric'), 'numeric');
$list_course_extra_field = CourseManager::get_course_extra_field_list($course_code);
$specialCourseField = new CourseField();
$specialCourseFieldInfo = $specialCourseField->get_handler_field_info_by_field_variable('special_course');
if (!empty($specialCourseFieldInfo)) {
$specialCourseValue = new ExtraFieldValue('course');
$specialCourseValueInfo = $specialCourseValue->get_values_by_handler_and_field_variable($course_code, 'special_course');
$specialCourseValueInfo = $specialCourseValue->get_values_by_handler_and_field_variable(
$course_code,
'special_course'
);
$specialCourseAttributes = array();
if (!empty($specialCourseValueInfo) && $specialCourseValueInfo['field_value'] == 1) {
if (!empty($specialCourseValueInfo) && $specialCourseValueInfo['value'] == 1) {
$specialCourseAttributes['checked'] = '';
}
@ -233,7 +232,7 @@ if (!empty($specialCourseFieldInfo)) {
//Extra fields
$extra_field = new CourseField();
$extra = $extra_field->addElements($form, $course_code);
$extra = $extra_field->addElements($form, $courseId);
$htmlHeadXtra[] = '
<script>
@ -330,7 +329,7 @@ if ($form->validate()) {
// update the extra fields
$courseFieldValue = new ExtraFieldValue('course');
$courseFieldValue->save_field_values($course);
$courseFieldValue->saveFieldValues($course);
$addTeacherToSessionCourses = isset($course['add_teachers_to_sessions_courses']) && !empty($course['add_teachers_to_sessions_courses']) ? 1 : 0;
// Updating teachers

@ -40,18 +40,21 @@ $token = Security::get_token();
if ($action == 'add') {
$interbreadcrumb[]=array('url' => 'extra_fields.php?type='.$extra_field->type,'name' => $extra_field->pageName);
$interbreadcrumb[]=array('url' => 'extra_fields.php?type='.$extra_field->type.'&action=edit&id='.$extra_field_info['id'],'name' => $extra_field_info['field_display_text']);
$interbreadcrumb[]=array('url' => 'extra_fields.php?type='.$extra_field->type.'&action=edit&id='.$extra_field_info['id'],'name' => $extra_field_info['display_text']);
$interbreadcrumb[]=array('url' => 'extra_field_options.php?type='.$extra_field->type.'&field_id='.$extra_field_info['id'], 'name' => get_lang('EditExtraFieldOptions'));
$interbreadcrumb[]=array('url' => '#','name' => get_lang('Add'));
} elseif ($action == 'edit') {
$interbreadcrumb[]=array('url' => 'extra_fields.php?type='.$extra_field->type,'name' => $extra_field->pageName);
$interbreadcrumb[]=array('url' => 'extra_fields.php?type='.$extra_field->type.'&action=edit&id='.$extra_field_info['id'],'name' => $extra_field_info['field_display_text']);
$interbreadcrumb[]=array('url' => 'extra_fields.php?type='.$extra_field->type.'&action=edit&id='.$extra_field_info['id'],'name' => $extra_field_info['display_text']);
$interbreadcrumb[]=array('url' => 'extra_field_options.php?type='.$extra_field->type.'&field_id='.$extra_field_info['id'], 'name' => get_lang('EditExtraFieldOptions'));
$interbreadcrumb[]=array('url' => '#','name' => get_lang('Edit'));
} else {
$interbreadcrumb[]=array('url' => 'extra_fields.php?type='.$extra_field->type,'name' => $extra_field->pageName);
$interbreadcrumb[]=array('url' => 'extra_fields.php?type='.$extra_field->type.'&action=edit&id='.$extra_field_info['id'],'name' => $extra_field_info['field_display_text']);
$interbreadcrumb[]=array(
'url' => 'extra_fields.php?type='.$extra_field->type.'&action=edit&id='.$extra_field_info['id'],
'name' => $extra_field_info['display_text']
);
$interbreadcrumb[]=array('url' => '#','name' => get_lang('EditExtraFieldOptions'));
}
@ -60,14 +63,43 @@ $params = 'field_id='.$field_id.'&type='.$extra_field->type;
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_extra_field_options&'.$params;
//The order is important you need to check the the $column variable in the model.ajax.php file
$columns = array(get_lang('Name'), get_lang('Value'), get_lang('Order'), get_lang('Actions'));
$columns = array(
get_lang('Name'),
get_lang('Value'),
get_lang('Order'),
get_lang('Actions'),
);
//Column config
$column_model = array(
array('name'=>'option_display_text', 'index'=>'option_display_text', 'width'=>'180', 'align'=>'left'),
array('name'=>'option_value', 'index'=>'option_value', 'width'=>'', 'align'=>'left','sortable'=>'false'),
array('name'=>'option_order', 'index'=>'option_order', 'width'=>'', 'align'=>'left','sortable'=>'false'),
array('name'=>'actions', 'index'=>'actions', 'width'=>'100', 'align'=>'left','formatter'=>'action_formatter','sortable'=>'false')
$column_model = array(
array(
'name' => 'display_text',
'index' => 'display_text',
'width' => '180',
'align' => 'left',
),
array(
'name' => 'option_value',
'index' => 'option_value',
'width' => '',
'align' => 'left',
'sortable' => 'false',
),
array(
'name' => 'option_order',
'index' => 'option_order',
'width' => '',
'align' => 'left',
'sortable' => 'false',
),
array(
'name' => 'actions',
'index' => 'actions',
'width' => '100',
'align' => 'left',
'formatter' => 'action_formatter',
'sortable' => 'false',
),
);
//Autowidth
$extra_params['autowidth'] = 'true';
@ -76,23 +108,31 @@ $extra_params['height'] = 'auto';
//With this function we can add actions to the jgrid (edit, delete, etc)
$action_links = 'function action_formatter(cellvalue, options, rowObject) {
return \'<a href="?action=edit&'.$params.'&id=\'+options.rowId+\'">'.Display::return_icon('edit.png',get_lang('Edit'),'',ICON_SIZE_SMALL).'</a>'.
'&nbsp;<a onclick="javascript:if(!confirm('."\'".addslashes(get_lang("ConfirmYourChoice"))."\'".')) return false;" href="?sec_token='.$token.'&action=delete&'.$params.'&id=\'+options.rowId+\'">'.Display::return_icon('delete.png',get_lang('Delete'),'',ICON_SIZE_SMALL).'</a>'.
'\';
return \'<a href="?action=edit&'.$params.'&id=\'+options.rowId+\'">'.Display::return_icon('edit.png',get_lang('Edit'),'',ICON_SIZE_SMALL).'</a>'.
'&nbsp;<a onclick="javascript:if(!confirm('."\'".addslashes(get_lang("ConfirmYourChoice"))."\'".')) return false;" href="?sec_token='.$token.'&action=delete&'.$params.'&id=\'+options.rowId+\'">'.Display::return_icon('delete.png',get_lang('Delete'),'',ICON_SIZE_SMALL).'</a>'.
'\';
}';
$htmlHeadXtra[]='
<script>
$htmlHeadXtra[]='<script>
$(function() {
// grid definition see the $obj->display() function
'.Display::grid_js('extra_field_options', $url, $columns, $column_model, $extra_params, array(), $action_links, true).'
'.Display::grid_js(
'extra_field_options',
$url,
$columns,
$column_model,
$extra_params,
array(),
$action_links,
true
).'
});
</script>';
// The header.
Display::display_header($tool_name);
echo Display::page_header($extra_field_info['field_display_text']);
echo Display::page_header($extra_field_info['display_text']);
$obj = new ExtraFieldOption($extra_field->type);
$obj->field_id = $field_id;
@ -110,16 +150,13 @@ switch ($action) {
if ($form->validate()) {
if ($check) {
$values = $form->exportValues();
$res = $obj->save_one_item($values);
$res = $obj->save_one_item($values);
if ($res) {
Display::display_confirmation_message(get_lang('ItemAdded'));
}
}
$obj->display();
} else {
/*echo '<div class="actions">';
echo '<a href="'.api_get_self().'">'.Display::return_icon('back.png',get_lang('Back'),'',ICON_SIZE_MEDIUM).'</a>';
echo '</div>'; */
$form->addElement('hidden', 'sec_token');
$form->setConstants(array('sec_token' => $token));
$form->display();
@ -134,14 +171,11 @@ switch ($action) {
if ($form->validate()) {
if ($check) {
$values = $form->exportValues();
$res = $obj->update($values);
$res = $obj->update($values);
Display::display_confirmation_message(sprintf(get_lang('ItemUpdated'), $values['name']), false);
}
$obj->display();
} else {
/*echo '<div class="actions">';
echo '<a href="'.api_get_self().'">'.Display::return_icon('back.png',get_lang('Back'),'',ICON_SIZE_MEDIUM).'</a>';
echo '</div>';*/
$form->addElement('hidden', 'sec_token');
$form->setConstants(array('sec_token' => $token));
$form->display();

@ -55,8 +55,16 @@ $action_links = $obj->getJqgridActionLinks($token);
$htmlHeadXtra[] = '<script>
$(function() {
// grid definition see the $obj->display() function
' . Display::grid_js($obj->type . '_fields', $url, $columns, $column_model, $extra_params, array(), $action_links,
true) . '
' .Display::grid_js(
$obj->type.'_fields',
$url,
$columns,
$column_model,
$extra_params,
array(),
$action_links,
true
). '
$("#field_type").on("change", function() {
id = $(this).val();
@ -106,7 +114,9 @@ Display::display_header($tool_name);
switch ($action) {
case 'add':
if (api_get_session_id() != 0 && !api_is_allowed_to_session_edit(false, true)) {
if (api_get_session_id() != 0 &&
!api_is_allowed_to_session_edit(false, true)
) {
api_not_allowed();
}
$url = api_get_self() . '?type=' . $obj->type . '&action=' . Security::remove_XSS($_GET['action']);
@ -139,11 +149,12 @@ switch ($action) {
// The validation or display
if ($form->validate()) {
//if ($check) {
$values = $form->exportValues();
$res = $obj->update($values);
Display::display_confirmation_message(sprintf(get_lang('ItemUpdated'), $values['field_variable']), false);
//}
Display::display_confirmation_message(
sprintf(get_lang('ItemUpdated'), $values['variable']),
false
);
$obj->display();
} else {
echo '<div class="actions">';
@ -170,90 +181,3 @@ switch ($action) {
break;
}
Display :: display_footer();
/*
CREATE TABLE IF NOT EXISTS lp_field(
id INT NOT NULL auto_increment,
field_type int NOT NULL DEFAULT 1,
field_variable varchar(64) NOT NULL,
field_display_text varchar(64),
field_default_value text,
field_order int,
field_visible tinyint default 0,
field_changeable tinyint default 0,
field_filter tinyint default 0,
tms DATETIME NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY(id)
);
DROP TABLE IF EXISTS lp_field_options;
CREATE TABLE IF NOT EXISTS lp_field_options (
id int NOT NULL auto_increment,
field_id int NOT NULL,
option_value text,
option_display_text varchar(64),
option_order int,
tms DATETIME NOT NULL default '0000-00-00 00:00:00',
priority VARCHAR(255),
priority_message VARCHAR(255),
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS lp_field_values;
CREATE TABLE IF NOT EXISTS lp_field_values(
id bigint NOT NULL auto_increment,
lp_id int unsigned NOT NULL,
field_id int NOT NULL,
field_value text,
comment VARCHAR(100) default '',
user_id int,
tms DATETIME NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY(id)
);
ALTER TABLE lp_field_values ADD INDEX (lp_id, field_id);
CREATE TABLE IF NOT EXISTS calendar_event_field(
id INT NOT NULL auto_increment,
field_type int NOT NULL DEFAULT 1,
field_variable varchar(64) NOT NULL,
field_display_text varchar(64),
field_default_value text,
field_order int,
field_visible tinyint default 0,
field_changeable tinyint default 0,
field_filter tinyint default 0,
tms DATETIME NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY(id)
);
DROP TABLE IF EXISTS calendar_event_options;
CREATE TABLE IF NOT EXISTS calendar_event_options (
id int NOT NULL auto_increment,
field_id int NOT NULL,
option_value text,
option_display_text varchar(64),
option_order int,
tms DATETIME NOT NULL default '0000-00-00 00:00:00',
priority VARCHAR(255),
priority_message VARCHAR(255),
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS calendar_event_values;
CREATE TABLE IF NOT EXISTS calendar_event_values(
id bigint NOT NULL auto_increment,
calendar_event_id int unsigned NOT NULL,
user_id int,
field_id int NOT NULL,
field_value text,
comment VARCHAR(100) default '',
tms DATETIME NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY(id)
);
*/

@ -218,7 +218,7 @@ echo Display::page_subheader(get_lang('GeneralProperties').$url);
<?php
$sessionField = new ExtraField('session');
$extraFieldData = $sessionField->getDataAndFormatedValues($sessionId);
$extraFieldData = $sessionField->getDataAndFormattedValues($sessionId);
foreach ($extraFieldData as $displayExtraField) {
?>

@ -19,10 +19,10 @@ $is_platform_admin = api_is_platform_admin() ? 1 : 0;
$message = null;
$htmlHeadXtra[] = api_get_password_checker_js('#username', '#password');
$htmlHeadXtra[] = '<script src="'.api_get_path(WEB_LIBRARY_PATH).'javascript/tag/jquery.fcbkcomplete.js" type="text/javascript" language="javascript"></script>';
$htmlHeadXtra[] = '<link href="'.api_get_path(WEB_LIBRARY_PATH).'javascript/tag/style.css" rel="stylesheet" type="text/css" />';
if (isset($_configuration['allow_strength_pass_checker']) && $_configuration['allow_strength_pass_checker']) {
if (isset($_configuration['allow_strength_pass_checker']) &&
$_configuration['allow_strength_pass_checker']
) {
$htmlHeadXtra[] = '
<script>
$(document).ready(function() {
@ -68,7 +68,7 @@ function password_switch_radio_button() {
var is_platform_id = "'.$is_platform_admin.'";
function display_drh_list(){
if(document.getElementById("status_select").value=='.STUDENT.') {
if (document.getElementById("status_select").value=='.STUDENT.') {
document.getElementById("drh_list").style.display="block";
if (is_platform_id == 1)
document.getElementById("id_platform_admin").style.display="none";
@ -91,8 +91,8 @@ if (!empty($_GET['message'])) {
$message = urldecode($_GET['message']);
}
$interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('PlatformAdmin'));
$interbreadcrumb[] = array ("url" => 'user_list.php', "name" => get_lang('UserList'));
$interbreadcrumb[] = array('url' => 'index.php', 'name' => get_lang('PlatformAdmin'));
$interbreadcrumb[] = array("url" => 'user_list.php', "name" => get_lang('UserList'));
$tool_name = get_lang('AddUsers');
// Create the form
@ -160,16 +160,16 @@ $auth_sources = 0; //make available wider as we need it in case of form reset (s
$nb_ext_auth_source_added = 0;
if (isset($extAuthSource) && count($extAuthSource) > 0) {
$auth_sources = array();
foreach ($extAuthSource as $key => $info) {
// @todo : make uniform external authentification configuration (ex : cas and external_login ldap)
// Special case for CAS. CAS is activated from Chamilo > Administration > Configuration > CAS
// extAuthSource always on for CAS even if not activated
// same action for file user_edit.php
if (($key == CAS_AUTH_SOURCE && api_get_setting('cas_activate') === 'true') || ($key != CAS_AUTH_SOURCE)) {
$auth_sources[$key] = $key;
$nb_ext_auth_source_added++;
}
}
foreach ($extAuthSource as $key => $info) {
// @todo : make uniform external authentification configuration (ex : cas and external_login ldap)
// Special case for CAS. CAS is activated from Chamilo > Administration > Configuration > CAS
// extAuthSource always on for CAS even if not activated
// same action for file user_edit.php
if (($key == CAS_AUTH_SOURCE && api_get_setting('cas_activate') === 'true') || ($key != CAS_AUTH_SOURCE)) {
$auth_sources[$key] = $key;
$nb_ext_auth_source_added++;
}
}
if ($nb_ext_auth_source_added > 0) {
$group[] = $form->createElement('radio', 'password_auto', null, get_lang('ExternalAuthentication').' ', 2);
$group[] = $form->createElement('select', 'auth_source', null, $auth_sources);
@ -193,10 +193,20 @@ $status[COURSEMANAGER] = get_lang('Teacher');
$status[STUDENT] = get_lang('Learner');
$status[DRH] = get_lang('Drh');
$status[SESSIONADMIN] = get_lang('SessionsAdmin');
$status[STUDENT_BOSS] = get_lang('RoleStudentBoss');
$status[INVITEE] = get_lang('Invitee');
$form->addElement('select', 'status', get_lang('Profile'), $status, array('id' => 'status_select', 'class'=>'chzn-select', 'onchange' => 'javascript: display_drh_list();'));
$status[STUDENT_BOSS] = get_lang('RoleStudentBoss');
$status[INVITEE] = get_lang('Invitee');
$form->addElement(
'select',
'status',
get_lang('Profile'),
$status,
array(
'id' => 'status_select',
'class' => 'chzn-select',
'onchange' => 'javascript: display_drh_list();',
)
);
//drh list (display only if student)
$display = isset($_POST['status']) && $_POST['status'] == STUDENT || !isset($_POST['status']) ? 'block' : 'none';
@ -206,7 +216,10 @@ $form->addElement('html', '<div id="drh_list" style="display:'.$display.';">');
if (isset($drh_list) && is_array($drh_list)) {
foreach ($drh_list as $drh) {
$drh_select->addOption(api_get_person_name($drh['firstname'], $drh['lastname']), $drh['user_id']);
$drh_select->addOption(
api_get_person_name($drh['firstname'], $drh['lastname']),
$drh['user_id']
);
}
}
$form->addElement('html', '</div>');
@ -246,10 +259,10 @@ $form->addGroup($group, 'max_member_group', null, '', false);
$form->addElement('radio', 'active', get_lang('ActiveAccount'), get_lang('Active'), 1);
$form->addElement('radio', 'active', '', get_lang('Inactive'), 0);
$extra_data = UserManager::get_extra_user_data(0, true);
$extraField = new ExtraField('user');
$returnParams = $extraField->addElements($form);
$return_params = UserManager::set_extra_fields_in_form($form, $extra_data, 'user_add');
$jquery_ready_content = $return_params['jquery_ready_content'];
$jquery_ready_content = $returnParams['jquery_ready_content'];
// the $jquery_ready_content variable collects all functions that will be load in the $(document).ready javascript function
$htmlHeadXtra[] ='<script>
@ -268,7 +281,6 @@ $defaults['expiration_date'] = api_get_local_time('+'.$days.' day');
$defaults['radio_expiration_date'] = 0;
$defaults['status'] = STUDENT;
$defaults = array_merge($defaults, $extra_data);
$form->setDefaults($defaults);
// Submit button
@ -278,24 +290,26 @@ $html_results_enabled[] = $form->createElement('button', 'submit_plus', get_lang
$form->addGroup($html_results_enabled);
// Validate form
if( $form->validate()) {
if ($form->validate()) {
$check = Security::check_token('post');
if ($check) {
$user = $form->exportValues();
$lastname = $user['lastname'];
$firstname = $user['firstname'];
$official_code = $user['official_code'];
$email = $user['email'];
$phone = $user['phone'];
$username = $user['username'];
$status = intval($user['status']);
$language = $user['language'];
$picture = $_FILES['picture'];
$platform_admin = intval($user['admin']['platform_admin']);
$send_mail = intval($user['mail']['send_mail']);
$hr_dept_id = isset($user['hr_dept_id']) ? intval($user['hr_dept_id']) : 0;
if (isset($extAuthSource) && count($extAuthSource) > 0 && $user['password']['password_auto'] == '2') {
if ($check) {
$user = $form->exportValues();
$lastname = $user['lastname'];
$firstname = $user['firstname'];
$official_code = $user['official_code'];
$email = $user['email'];
$phone = $user['phone'];
$username = $user['username'];
$status = intval($user['status']);
$language = $user['language'];
$picture = $_FILES['picture'];
$platform_admin = intval($user['admin']['platform_admin']);
$send_mail = intval($user['mail']['send_mail']);
$hr_dept_id = isset($user['hr_dept_id']) ? intval($user['hr_dept_id']) : 0;
if (isset($extAuthSource) && count($extAuthSource) > 0 &&
$user['password']['password_auto'] == '2'
) {
$auth_source = $user['password']['auth_source'];
$password = 'PLACEHOLDER';
} else {
@ -303,11 +317,11 @@ if( $form->validate()) {
$password = $user['password']['password_auto'] == '1' ? api_generate_password() : $user['password']['password'];
}
if ($user['radio_expiration_date'] == '1') {
$expiration_date = $user['expiration_date'];
} else {
$expiration_date = null;
}
if ($user['radio_expiration_date'] == '1') {
$expiration_date = $user['expiration_date'];
} else {
$expiration_date = null;
}
$active = intval($user['active']);
@ -355,7 +369,11 @@ if( $form->validate()) {
}
} else {
if (!empty($picture['name'])) {
$picture_uri = UserManager::update_user_picture($user_id, $_FILES['picture']['name'], $_FILES['picture']['tmp_name']);
$picture_uri = UserManager::update_user_picture(
$user_id,
$_FILES['picture']['name'],
$_FILES['picture']['tmp_name']
);
UserManager::update_user(
$user_id,
$firstname,
@ -377,9 +395,10 @@ if( $form->validate()) {
);
}
foreach ($extra as $key => $value) {
UserManager::update_extra_field_value($user_id, $key, $value);
}
$extraFieldValues = new ExtraFieldValue('user');
$user['item_id'] = $user_id;
$extraFieldValues->saveFieldValues($user);
$message = get_lang('UserAdded');
}
if (isset($user['submit_plus'])) {
@ -404,7 +423,7 @@ if( $form->validate()) {
if (!empty($message)){
$message = Display::return_message(stripslashes($message));
}
$content = $form->return_form();
$content = $form->returnForm();
$tpl = new Template($tool_name);
//$tpl->assign('actions', $actions);

@ -1,5 +1,6 @@
<?php
/* For licensing terms, see /license.txt */
/**
* @package chamilo.admin
*/
@ -16,8 +17,6 @@ api_protect_super_admin($user_id, null, true);
$is_platform_admin = api_is_platform_admin() ? 1 : 0;
$htmlHeadXtra[] = '<script src="'.api_get_path(WEB_LIBRARY_PATH).'javascript/tag/jquery.fcbkcomplete.js" type="text/javascript" language="javascript"></script>';
$htmlHeadXtra[] = '<link href="'.api_get_path(WEB_LIBRARY_PATH).'javascript/tag/style.css" rel="stylesheet" type="text/css" />';
$htmlHeadXtra[] = '
<script>
var is_platform_id = "'.$is_platform_admin.'";
@ -93,8 +92,6 @@ $user_data['old_password'] = $user_data['password'];
$user_data['registration_date'] = api_get_local_time($user_data['registration_date']);
unset($user_data['password']);
$extra_data = UserManager :: get_extra_user_data($user_id, true);
$user_data = array_merge($user_data, $extra_data);
// Create the form
$form = new FormValidator(
@ -178,7 +175,7 @@ $nb_ext_auth_source_added = 0;
if (isset($extAuthSource) && !empty($extAuthSource) && count($extAuthSource) > 0) {
$auth_sources = array();
foreach ($extAuthSource as $key => $info) {
// @todo : make uniform external authentification configuration (ex : cas and external_login ldap)
// @todo : make uniform external authentication configuration (ex : cas and external_login ldap)
// Special case for CAS. CAS is activated from Chamilo > Administration > Configuration > CAS
// extAuthSource always on for CAS even if not activated
// same action for file user_add.php
@ -188,7 +185,7 @@ if (isset($extAuthSource) && !empty($extAuthSource) && count($extAuthSource) > 0
}
}
if ($nb_ext_auth_source_added > 0) {
// @todo check the radio button for external authentification and select the external authentification in the menu
// @todo check the radio button for external authentification and select the external authentication in the menu
$group[] = $form->createElement('radio', 'reset_password', null, get_lang('ExternalAuthentication').' ', 3);
$group[] = $form->createElement('select', 'auth_source', null, $auth_sources);
$group[] = $form->createElement('static', '', '', '<br />');
@ -265,8 +262,9 @@ if (!$user_data['platform_admin']) {
}
// EXTRA FIELDS
$return_params = UserManager::set_extra_fields_in_form($form, $extra_data, 'user_edit', true, $user_id);
$jquery_ready_content = $return_params['jquery_ready_content'];
$extraField = new ExtraField('user');
$returnParams = $extraField->addElements($form, $user_data['user_id']);
$jquery_ready_content = $returnParams['jquery_ready_content'];
// the $jquery_ready_content variable collects all functions that will be load in the $(document).ready javascript function
$htmlHeadXtra[] ='<script>
@ -275,7 +273,6 @@ $(document).ready(function(){
});
</script>';
// Submit button
$form->addButtonSave(get_lang('Save'));
@ -372,7 +369,7 @@ if ($form->validate()) {
);
if (api_get_setting('openid_authentication') == 'true' && !empty($user['openid'])) {
$up = UserManager::update_openid($user_id,$user['openid']);
$up = UserManager::update_openid($user_id, $user['openid']);
}
$currentUserId = api_get_user_id();
if ($user_id != $currentUserId) {
@ -383,7 +380,10 @@ if ($form->validate()) {
}
}
foreach ($user as $key => $value) {
$extraFieldValue = new ExtraFieldValue('user');
$extraFieldValue->saveFieldValues($user);
/*foreach ($user as $key => $value) {
if (substr($key, 0, 6) == 'extra_') {
//an extra field
//@todo remove this as well as in the profile.php ad put it in a function
@ -420,7 +420,7 @@ if ($form->validate()) {
// To remove from user_field_value and folder
UserManager::update_extra_field_value($user_id, substr($key,13), $extra_value);
}
}
}*/
$tok = Security::get_token();
header('Location: user_list.php?action=show_message&message='.urlencode(get_lang('UserUpdated')).'&sec_token='.$tok);
exit();

@ -220,8 +220,12 @@ if ($user_already_registered_show_terms == false) {
}
}
// EXTRA FIELDS
$extra_data = UserManager::get_extra_user_data(api_get_user_id(), true);
UserManager::set_extra_fields_in_form($form, $extra_data, 'registration');
/*$extra_data = UserManager::get_extra_user_data(api_get_user_id(), true);
UserManager::set_extra_fields_in_form($form, $extra_data);*/
// EXTRA FIELDS
$extraField = new ExtraField('user');
$returnParams = $extraField->addElements($form);
}
if (isset($_SESSION['user_language_choice']) && $_SESSION['user_language_choice'] != '') {
@ -245,10 +249,6 @@ if (api_get_setting('openid_authentication') == 'true' && !empty($_GET['openid']
}
$defaults['status'] = STUDENT;
if (is_array($extra_data)) {
$defaults = array_merge($defaults, $extra_data);
}
$form->setDefaults($defaults);
$content = null;
@ -282,13 +282,13 @@ if (!CustomPages::enabled()) {
}
}
$tool_name = get_lang('Registration', null, (!empty($_POST['language'])?$_POST['language']:$_user['language']));
$tool_name = get_lang('Registration', null, (!empty($_POST['language'])?$_POST['language']: $_user['language']));
if (api_get_setting('allow_terms_conditions') == 'true' && $user_already_registered_show_terms) {
$tool_name = get_lang('TermsAndConditions');
}
$home = api_get_path(SYS_PATH).'home/';
$home = api_get_path(SYS_APP_PATH).'home/';
if (api_is_multiple_url_enabled()) {
$access_url_id = api_get_current_access_url_id();
if ($access_url_id != -1) {
@ -297,8 +297,8 @@ if (!CustomPages::enabled()) {
$clean_url = api_replace_dangerous_char($url);
$clean_url = str_replace('/', '-', $clean_url);
$clean_url .= '/';
$home_old = api_get_path(SYS_PATH).'home/';
$home = api_get_path(SYS_PATH).'home/'.$clean_url;
$home_old = api_get_path(SYS_APP_PATH).'home/';
$home = api_get_path(SYS_APP_PATH).'home/'.$clean_url;
}
}

@ -1,5 +1,6 @@
<?php
/* For licensing terms, see /license.txt */
/**
* This file displays the user's profile,
* optionally it allows users to modify their profile as well.
@ -8,6 +9,7 @@
*
* @package chamilo.auth
*/
$cidReset = true;
require_once '../inc/global.inc.php';
@ -25,9 +27,6 @@ if (!(isset($_user['user_id']) && $_user['user_id']) || api_is_anonymous($_user[
api_not_allowed(true);
}
$htmlHeadXtra[] = '<script src="../inc/lib/javascript/tag/jquery.fcbkcomplete.js" type="text/javascript" language="javascript"></script>';
$htmlHeadXtra[] = '<link href="'.api_get_path(WEB_LIBRARY_PATH).'javascript/tag/style.css" rel="stylesheet" type="text/css" />';
$htmlHeadXtra[] = '<script>
function confirmation(name) {
if (confirm("'.get_lang('AreYouSureToDelete', '').' " + name + " ?")) {
@ -66,12 +65,6 @@ function show_icon_edit(element_html) {
}
</script>';
//$interbreadcrumb[] = array('url' => '../auth/profile.php', 'name' => get_lang('ModifyProfile'));
if (!empty ($_GET['coursePath'])) {
$course_url = api_get_path(WEB_COURSE_PATH).htmlentities(strip_tags($_GET['coursePath'])).'/index.php';
$interbreadcrumb[] = array('url' => $course_url, 'name' => Security::remove_XSS($_GET['courseCode']));
}
$warning_msg = '';
if (!empty($_GET['fe'])) {
$warning_msg .= get_lang('UplUnableToSaveFileFilteredExtension');
@ -139,7 +132,16 @@ $form->addRule('lastname' , get_lang('ThisFieldIsRequired'), 'required');
$form->addRule('firstname', get_lang('ThisFieldIsRequired'), 'required');
// USERNAME
$form->addElement('text', 'username', get_lang('UserName'), array('id' => 'username', 'maxlength' => USERNAME_MAX_LENGTH, 'size' => USERNAME_MAX_LENGTH));
$form->addElement(
'text',
'username',
get_lang('UserName'),
array(
'id' => 'username',
'maxlength' => USERNAME_MAX_LENGTH,
'size' => USERNAME_MAX_LENGTH,
)
);
if (api_get_setting('profile', 'login') !== 'true' || api_get_setting('login_is_email') == 'true') {
$form->freeze('username');
}
@ -196,20 +198,28 @@ if (api_get_setting('profile', 'phone') !== 'true') {
$form->applyFilter('phone', 'stripslashes');
$form->applyFilter('phone', 'trim');
$form->applyFilter('phone', 'html_filter');
/*if (api_get_setting('registration', 'phone') == 'true') {
$form->addRule('phone', get_lang('ThisFieldIsRequired'), 'required');
}
$form->addRule('phone', get_lang('EmailWrong'), 'email');*/
// PICTURE
// PICTURE
if (is_profile_editable() && api_get_setting('profile', 'picture') == 'true') {
$form->addElement('file', 'picture', ($user_data['picture_uri'] != '' ? get_lang('UpdateImage') : get_lang('AddImage')), array('class' => 'picture-form'));
$form->addElement(
'file',
'picture',
($user_data['picture_uri'] != '' ? get_lang('UpdateImage') : get_lang(
'AddImage'
)),
array('class' => 'picture-form')
);
$form->add_progress_bar();
if (!empty($user_data['picture_uri'])) {
$form->addElement('checkbox', 'remove_picture', null, get_lang('DelImage'));
}
$allowed_picture_types = array ('jpg', 'jpeg', 'png', 'gif');
$form->addRule('picture', get_lang('OnlyImagesAllowed').' ('.implode(',', $allowed_picture_types).')', 'filetype', $allowed_picture_types);
$form->addRule(
'picture',
get_lang('OnlyImagesAllowed').' ('.implode(',', $allowed_picture_types).')',
'filetype',
$allowed_picture_types
);
}
// LANGUAGE
@ -230,14 +240,42 @@ if (is_profile_editable() && api_get_setting('user_selected_theme') == 'true') {
// EXTENDED PROFILE this make the page very slow!
if (api_get_setting('extended_profile') == 'true') {
$width_extended_profile = 500;
//$form->addElement('html', '<a href="javascript: void(0);" onclick="javascript: show_extend();"> show_extend_profile</a>');
//$form->addElement('static', null, '<em>'.get_lang('OptionalTextFields').'</em>');
// MY COMPETENCES
$form->addHtmlEditor('competences', get_lang('MyCompetences'), false, false, array('ToolbarSet' => 'Profile', 'Width' => $width_extended_profile, 'Height' => '130'));
$form->addHtmlEditor(
'competences',
get_lang('MyCompetences'),
false,
false,
array(
'ToolbarSet' => 'Profile',
'Width' => $width_extended_profile,
'Height' => '130',
)
);
// MY DIPLOMAS
$form->addHtmlEditor('diplomas', get_lang('MyDiplomas'), false, false, array('ToolbarSet' => 'Profile', 'Width' => $width_extended_profile, 'Height' => '130'));
// WHAT I AM ABLE TO TEACH
$form->addHtmlEditor('teach', get_lang('MyTeach'), false, false, array('ToolbarSet' => 'Profile', 'Width' => $width_extended_profile, 'Height' => '130'));
$form->addHtmlEditor(
'diplomas',
get_lang('MyDiplomas'),
false,
false,
array(
'ToolbarSet' => 'Profile',
'Width' => $width_extended_profile,
'Height' => '130',
)
);
// WHAT I AM ABLE TO TEACH
$form->addHtmlEditor(
'teach',
get_lang('MyTeach'),
false,
false,
array(
'ToolbarSet' => 'Profile',
'Width' => $width_extended_profile,
'Height' => '130',
)
);
// MY PRODUCTIONS
$form->addElement('file', 'production', get_lang('MyProductions'));
@ -245,13 +283,27 @@ if (api_get_setting('extended_profile') == 'true') {
$form->addElement('static', 'productions_list', null, $production_list);
}
// MY PERSONAL OPEN AREA
$form->addHtmlEditor('openarea', get_lang('MyPersonalOpenArea'), false, false, array('ToolbarSet' => 'Profile', 'Width' => $width_extended_profile, 'Height' => '350'));
$form->addHtmlEditor(
'openarea',
get_lang('MyPersonalOpenArea'),
false,
false,
array(
'ToolbarSet' => 'Profile',
'Width' => $width_extended_profile,
'Height' => '350',
)
);
// openarea is untrimmed for maximum openness
$form->applyFilter(array('competences', 'diplomas', 'teach', 'openarea'), 'stripslashes');
$form->applyFilter(array('competences', 'diplomas', 'teach'), 'trim'); // openarea is untrimmed for maximum openness
$form->applyFilter(array('competences', 'diplomas', 'teach'), 'trim');
}
// PASSWORD, if auth_source is platform
if (is_platform_authentication() && is_profile_editable() && api_get_setting('profile', 'password') == 'true') {
if (is_platform_authentication() &&
is_profile_editable() &&
api_get_setting('profile', 'password') == 'true'
) {
$form->addElement('password', 'password0', array(get_lang('Pass'), get_lang('Enter2passToChange')), array('size' => 40));
$form->addElement('password', 'password1', get_lang('NewPass'), array('id'=> 'password1', 'size' => 40));
@ -267,11 +319,21 @@ if (is_platform_authentication() && is_profile_editable() && api_get_setting('pr
}
// EXTRA FIELDS
$extra_data = UserManager::get_extra_user_data(api_get_user_id(), true);
$return_params = UserManager::set_extra_fields_in_form($form, $extra_data, false, api_get_user_id());
$jquery_ready_content = $return_params['jquery_ready_content'];
//$extra_data = UserManager::get_extra_user_data(api_get_user_id(), true);
/*$return_params = UserManager::set_extra_fields_in_form(
$form,
$extra_data,
false,
api_get_user_id()
);*/
$extraField = new ExtraField('user');
$return = $extraField->addElements($form, api_get_user_id());
// the $jquery_ready_content variable collects all functions that will be load in the $(document).ready javascript function
$jquery_ready_content = $return['jquery_ready_content'];
// the $jquery_ready_content variable collects all functions that
// will be load in the $(document).ready javascript function
$htmlHeadXtra[] ='<script>
$(document).ready(function(){
'.$jquery_ready_content.'
@ -280,9 +342,22 @@ $(document).ready(function(){
if (api_get_setting('profile', 'apikeys') == 'true') {
$form->addElement('html', '<div id="div_api_key">');
$form->addElement('text', 'api_key_generate', get_lang('MyApiKey'), array('size' => 40, 'id' => 'id_api_key_generate'));
$form->addElement(
'text',
'api_key_generate',
get_lang('MyApiKey'),
array('size' => 40, 'id' => 'id_api_key_generate')
);
$form->addElement('html', '</div>');
$form->addElement('button', 'generate_api_key', get_lang('GenerateApiKey'), array('id' => 'id_generate_api_key', 'onclick' => 'generate_open_id_form(); return false;')); //generate_open_id_form()
$form->addElement(
'button',
'generate_api_key',
get_lang('GenerateApiKey'),
array(
'id' => 'id_generate_api_key',
'onclick' => 'generate_open_id_form(); return false;',
)
); //generate_open_id_form()
}
// SUBMIT
if (is_profile_editable()) {
@ -290,7 +365,6 @@ if (is_profile_editable()) {
} else {
$form->freeze();
}
$user_data = array_merge($user_data, $extra_data);
$form->setDefaults($user_data);
/**
@ -472,14 +546,17 @@ if ($form->validate()) {
UserManager::remove_user_production(api_get_user_id(), urldecode($production));
}
if ($production_list = UserManager::build_production_list(api_get_user_id(), true, true)) {
$form->insertElementBefore($form->createElement('static', null, null, $production_list), 'productions_list');
$form->insertElementBefore(
$form->createElement('static', null, null, $production_list),
'productions_list'
);
}
$form->removeElement('productions_list');
$file_deleted = true;
}
// upload production if a new one is provided
if ($_FILES['production']['size']) {
if (isset($_FILES['production']) && $_FILES['production']['size']) {
$res = upload_user_production(api_get_user_id());
if (!$res) {
//it's a bit excessive to assume the extension is the reason why
@ -535,32 +612,22 @@ if ($form->validate()) {
}
//Fixing missing variables
$available_values_to_modify = array_merge($available_values_to_modify, array('competences', 'diplomas', 'openarea', 'teach', 'openid'));
$available_values_to_modify = array_merge(
$available_values_to_modify,
array('competences', 'diplomas', 'openarea', 'teach', 'openid')
);
// build SQL query
$sql = "UPDATE $table_user SET";
unset($user_data['api_key_generate']);
foreach ($user_data as $key => $value) {
if (substr($key, 0, 6) == 'extra_') { //an extra field
$new_key = substr($key, 6);
// format array date to 'Y-m-d' or date time to 'Y-m-d H:i:s'
if (is_array($value) && isset($value['Y']) && isset($value['F']) && isset($value['d'])) {
if (isset($value['H']) && isset($value['i'])) {
// extra field date time
$time = mktime($value['H'],$value['i'],0,$value['F'],$value['d'],$value['Y']);
$extras[$new_key] = date('Y-m-d H:i:s',$time);
} else {
// extra field date
$time = mktime(0,0,0,$value['F'],$value['d'],$value['Y']);
$extras[$new_key] = date('Y-m-d',$time);
}
} else {
$extras[$new_key] = $value;
}
continue;
} elseif (strpos($key, 'remove_extra_') !== false) {
$extra_value = Security::filter_filename(urldecode(key($value)));
/*$extra_value = Security::filter_filename(urldecode(key($value)));
// To remove from user_field_value and folder
UserManager::update_extra_field_value($user_id, substr($key,13), $extra_value);
UserManager::update_extra_field_value($user_id, substr($key,13), $extra_value);*/
} else {
if (in_array($key, $available_values_to_modify)) {
$sql .= " $key = '".Database::escape_string($value)."',";
@ -604,11 +671,14 @@ if ($form->validate()) {
$sql .= " WHERE user_id = '".api_get_user_id()."'";
Database::query($sql);
$extraField = new ExtraFieldValue('user');
$extraField->saveFieldValues($user_data);
// User tag process
//1. Deleting all user tags
$list_extra_field_type_tag = UserManager::get_all_extra_field_by_type(UserManager::USER_FIELD_TYPE_TAG);
//$list_extra_field_type_tag = UserManager::get_all_extra_field_by_type(UserManager::USER_FIELD_TYPE_TAG);
if (is_array($list_extra_field_type_tag) && count($list_extra_field_type_tag)>0) {
/*if (is_array($list_extra_field_type_tag) && count($list_extra_field_type_tag)>0) {
foreach ($list_extra_field_type_tag as $id) {
UserManager::delete_user_tags(api_get_user_id(), $id);
}
@ -636,7 +706,7 @@ if ($form->validate()) {
UserManager::update_extra_field_value($user_id, $key, $value);
}
}
}
}*/
// re-init the system to take new settings into account
$_SESSION['_user']['uidReset'] = true;

@ -254,7 +254,10 @@ class ssoDrupal
}
$userExtraFieldValue = new ExtraFieldValue('user');
$drupalUserIdData = $userExtraFieldValue->get_values_by_handler_and_field_variable($userId, 'drupal_user_id');
$drupalUserIdData = $userExtraFieldValue->get_values_by_handler_and_field_variable(
$userId,
'drupal_user_id'
);
// If this is an administrator, allow him to make some changes in
// the Chamilo profile
@ -267,7 +270,7 @@ class ssoDrupal
return api_get_path(WEB_CODE_PATH) . 'auth/profile.php';
}
// In all other cases, generate a link to the Drupal profile edition
$drupalUserId = $drupalUserIdData['field_value'];
$drupalUserId = $drupalUserIdData['value'];
$url = "{$this->protocol}{$this->domain}/user/{$drupalUserId}/edit";
return $url;
}

@ -224,8 +224,8 @@ class ImportCsv
$extraField = new ExtraField('calendar_event');
$extraField->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => $this->extraFieldIdNameList['calendar_event'],
'field_display_text' => 'External calendar event id'
'variable' => $this->extraFieldIdNameList['calendar_event'],
'display_text' => 'External calendar event id'
));
}
@ -680,7 +680,7 @@ class ImportCsv
$externalSessionId = null;
if (isset($row['external_sessionID'])) {
$externalSessionId = $row['external_sessionID'];
$sessionId = SessionManager::get_session_id_from_original_id(
$sessionId = SessionManager::getSessionIdFromOriginalId(
$externalSessionId,
$this->extraFieldIdNameList['session']
);
@ -865,9 +865,9 @@ class ImportCsv
if (!empty($eventId)) {
$extraFieldValue->save(
array(
'field_value' => $externalEventId,
'value' => $externalEventId,
'field_id' => $extraFieldInfo['id'],
'calendar_event_id' => $eventId
'item_id' => $eventId
)
);
$this->logger->addInfo(
@ -900,12 +900,12 @@ class ImportCsv
foreach ($data as $row) {
$row = $this->cleanCourseRow($row);
$courseCode = CourseManager::get_course_id_from_original_id(
$courseId = CourseManager::getCourseInfoFromOriginalId(
$row['extra_' . $this->extraFieldIdNameList['course']],
$this->extraFieldIdNameList['course']
);
$courseInfo = api_get_course_info($courseCode);
$courseInfo = api_get_course_info_by_id($courseId);
if (empty($courseInfo)) {
// Create
@ -1004,7 +1004,7 @@ class ImportCsv
// Looping the sessions.
foreach ($sessions as $session) {
if (!empty($session['SessionID'])) {
$sessionId = SessionManager::get_session_id_from_original_id(
$sessionId = SessionManager::getSessionIdFromOriginalId(
$session['SessionID'],
$this->extraFieldIdNameList['session']
);
@ -1399,17 +1399,7 @@ class ImportCsv
echo $sql.PHP_EOL;
// Extra fields
$table = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$table = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;

@ -1241,16 +1241,28 @@ switch ($action) {
break;
case 'get_extra_fields':
$obj = new ExtraField($type);
$columns = array('field_display_text', 'field_variable', 'field_type', 'field_changeable', 'field_visible', 'field_filter', 'field_order');
$result = Database::select('*', $obj->table, array('order'=>"$sidx $sord", 'LIMIT'=> "$start , $limit"));
$columns = array(
'display_text',
'variable',
'field_type',
'changeable',
'visible',
'filter',
'field_order',
);
$result = Database::select(
'*',
$obj->table,
array('order' => "$sidx $sord", 'LIMIT' => "$start , $limit")
);
$new_result = array();
if (!empty($result)) {
foreach ($result as $item) {
$item['field_type'] = $obj->get_field_type_by_id($item['field_type']);
$item['field_changeable'] = $item['field_changeable'] ? Display::return_icon('right.gif') : Display::return_icon('wrong.gif');
$item['field_visible'] = $item['field_visible'] ? Display::return_icon('right.gif') : Display::return_icon('wrong.gif');
$item['field_filter'] = $item['field_filter'] ? Display::return_icon('right.gif') : Display::return_icon('wrong.gif');
$new_result[] = $item;
$item['field_type'] = $obj->get_field_type_by_id($item['field_type']);
$item['changeable'] = $item['changeable'] ? Display::return_icon('right.gif') : Display::return_icon('wrong.gif');
$item['visible'] = $item['visible'] ? Display::return_icon('right.gif') : Display::return_icon('wrong.gif');
$item['filter'] = $item['filter'] ? Display::return_icon('right.gif') : Display::return_icon('wrong.gif');
$new_result[] = $item;
}
$result = $new_result;
}
@ -1346,8 +1358,16 @@ switch ($action) {
break;
case 'get_extra_field_options':
$obj = new ExtraFieldOption($type);
$columns = array('option_display_text', 'option_value', 'option_order');
$result = Database::select('*', $obj->table, array('where' => array("field_id = ? " => $field_id),'order'=>"$sidx $sord", 'LIMIT'=> "$start , $limit"));
$columns = array('display_text', 'option_value', 'option_order');
$result = Database::select(
'*',
$obj->table,
array(
'where' => array("field_id = ? " => $field_id),
'order' => "$sidx $sord",
'LIMIT' => "$start , $limit",
)
);
break;
case 'get_usergroups_teacher':
$columns = array('name', 'users', 'actions');

@ -7,7 +7,7 @@
*/
/**
* Manage the course extra fields
*
*
* Add the extra fields to the form excluding the Special Course Field
*/
class CourseField extends ExtraField
@ -25,47 +25,4 @@ class CourseField extends ExtraField
{
parent::__construct('course');
}
/**
* Add elements to a form
* @param FormValidator $form the form
* @param string $courseCode The course code
* @return array The extra data. Otherwise return false
*/
public function addElements($form, $courseCode = null)
{
if (empty($form)) {
return false;
}
$extra_data = false;
if (!empty($courseCode)) {
$extra_data = self::get_handler_extra_data($courseCode);
if ($form) {
$form->setDefaults($extra_data);
}
}
$extra_fields = $this->get_all(null, 'option_order');
$specilCourseFieldId = -1;
foreach ($extra_fields as $id => $extraField) {
if ($extraField['field_variable'] === self::SPECIAL_COURSE_FIELD) {
$specilCourseFieldId = $id;
}
}
if (isset($extra_fields[$specilCourseFieldId])) {
unset($extra_fields[$specilCourseFieldId]);
}
$extra = $this->set_extra_fields_in_form(
$form, $extra_data, $this->type . '_field', false, false, $extra_fields, $courseCode
);
return $extra;
}
}

@ -122,13 +122,13 @@ class SmsPlugin extends Plugin
if (empty($extraFieldInfo)) {
$extraField->save(array(
'field_type' => 1,
'field_variable' => 'mobile_phone_number',
'field_display_text' => $this->get_lang('mobile_phone_number'),
'field_default_value' => null,
'variable' => 'mobile_phone_number',
'display_text' => $this->get_lang('mobile_phone_number'),
'default_value' => null,
'field_order' => 2,
'field_visible' => 1,
'field_changeable' => 1,
'field_filter' => null
'visible' => 1,
'changeable' => 1,
'filter' => null
));
}
}

@ -1460,13 +1460,17 @@ function _api_format_user($user, $add_password = false)
/**
* Finds all the information about a user.
* If no parameter is passed you find all the information about the current user.
* @param int $user_id
* @param int $user_id
* @param bool $checkIfUserOnline
* @param bool $showPassword
* @param bool $loadExtraData
*
* @return array $user_info user_id, lastname, firstname, username, email, etc
* @author Patrick Cool <patrick.cool@UGent.be>
* @author Julio Montoya
* @version 21 September 2004
*/
function api_get_user_info($user_id = '', $check_if_user_is_online = false, $show_password = false) {
function api_get_user_info($user_id = '', $checkIfUserOnline = false, $showPassword = false, $loadExtraData = false) {
if ($user_id == '') {
if (isset($GLOBALS['_user'])) {
return _api_format_user($GLOBALS['_user']);
@ -1480,7 +1484,7 @@ function api_get_user_info($user_id = '', $check_if_user_is_online = false, $sho
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
$result_array = Database::fetch_array($result);
if ($check_if_user_is_online) {
if ($checkIfUserOnline) {
$use_status_in_platform = user_is_online($user_id);
$result_array['user_is_online'] = $use_status_in_platform;
@ -1493,8 +1497,18 @@ function api_get_user_info($user_id = '', $check_if_user_is_online = false, $sho
}
}
$result_array['user_is_online_in_chat'] = $user_online_in_chat;
$loadExtraData = true;
if ($loadExtraData) {
$extraFieldValues = new ExtraFieldValue('user');
$values = $extraFieldValues->getAllValuesByItem($user_id);
if (!empty($values)) {
foreach ($values as $value) {
$result_array['extra'][$value['variable']] = $value['value'];
}
}
}
}
$user = _api_format_user($result_array, $show_password);
$user = _api_format_user($result_array, $showPassword);
return $user;
}
@ -5936,26 +5950,25 @@ function api_get_tools_lists($my_tool = null) {
*/
function api_check_term_condition($user_id) {
if (api_get_setting('allow_terms_conditions') == 'true') {
$t_uf = Database::get_main_table(TABLE_MAIN_USER_FIELD);
$t_ufv = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
//check if exists terms and conditions
if (LegalManager::count() == 0) {
return true;
}
// Check the last user version_id passed
$sql = "SELECT field_value FROM $t_ufv ufv inner join $t_uf uf on ufv.field_id= uf.id
WHERE field_value <> '' AND field_variable = 'legal_accept' AND user_id = ".intval($user_id);
$extraFieldValue = new ExtraFieldValue('user');
$data = $extraFieldValue->get_values_by_handler_and_field_variable(
$user_id,
'legal_accept'
);
$res = Database::query($sql);
if (Database::num_rows($res) > 0) {
$rowv = Database::fetch_row($res);
$rowv = $rowv[0];
if (!empty($data) && isset($data[0])) {
$rowv = $data[0];
$user_conditions = explode(':', $rowv);
$version = $user_conditions[0];
$lang_id = $user_conditions[1];
$real_version = LegalManager::get_last_version($lang_id);
return $version >= $real_version;
}
return false;

@ -28,28 +28,30 @@ class Auth
{
$TABLECOURS = Database::get_main_table(TABLE_MAIN_COURSE);
$TABLECOURSUSER = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$TABLE_COURSE_FIELD = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
$TABLE_COURSE_FIELD_VALUE = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$TABLE_COURSE_FIELD = Database::get_main_table(TABLE_EXTRA_FIELD);
$TABLE_COURSE_FIELD_VALUE = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$extraFieldType = \Chamilo\CoreBundle\Entity\ExtraField::COURSE_FIELD_TYPE;
// get course list auto-register
$sql = "SELECT course_code FROM $TABLE_COURSE_FIELD_VALUE tcfv
$sql = "SELECT item_id FROM $TABLE_COURSE_FIELD_VALUE tcfv
INNER JOIN $TABLE_COURSE_FIELD tcf
ON tcfv.field_id = tcf.id
WHERE
tcf.field_variable = 'special_course' AND
tcfv.field_value = 1
tcf.extra_field_type = $extraFieldType AND
tcf.variable = 'special_course' AND
tcfv.value = 1
";
$special_course_result = Database::query($sql);
if (Database::num_rows($special_course_result) > 0) {
$special_course_list = array();
while ($result_row = Database::fetch_array($special_course_result)) {
$special_course_list[] = '"' . $result_row['course_code'] . '"';
$result = Database::query($sql);
$special_course_list = array();
if (Database::num_rows($result) > 0) {
while ($result_row = Database::fetch_array($result)) {
$special_course_list[] = '"' . $result_row['item_id'] . '"';
}
}
$without_special_courses = '';
if (!empty($special_course_list)) {
$without_special_courses = ' AND course.code NOT IN (' . implode(',', $special_course_list) . ')';
$without_special_courses = ' AND course.id NOT IN (' . implode(',', $special_course_list) . ')';
}
// Secondly we select the courses that are in a category (user_course_cat<>0) and sort these according to the sort of the category
@ -121,28 +123,32 @@ class Auth
// table definitions
$TABLECOURS = Database::get_main_table(TABLE_MAIN_COURSE);
$TABLECOURSUSER = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$TABLE_COURSE_FIELD = Database :: get_main_table(TABLE_MAIN_COURSE_FIELD);
$TABLE_COURSE_FIELD_VALUE = Database :: get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$TABLE_COURSE_FIELD = Database::get_main_table(TABLE_EXTRA_FIELD);
$TABLE_COURSE_FIELD_VALUE = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$extraFieldType = \Chamilo\CoreBundle\Entity\ExtraField::COURSE_FIELD_TYPE;
// get course list auto-register
$sql = "SELECT course_code
$sql = "SELECT item_id
FROM $TABLE_COURSE_FIELD_VALUE tcfv
INNER JOIN $TABLE_COURSE_FIELD tcf
ON tcfv.field_id = tcf.id
WHERE
tcf.field_variable = 'special_course' AND
tcfv.field_value = 1 ";
$special_course_result = Database::query($sql);
if (Database::num_rows($special_course_result) > 0) {
$special_course_list = array();
while ($result_row = Database::fetch_array($special_course_result)) {
$special_course_list[] = '"' . $result_row['course_code'] . '"';
tcf.extra_field_type = $extraFieldType AND
tcf.variable = 'special_course' AND
tcfv.value = 1 ";
$result = Database::query($sql);
$special_course_list = array();
if (Database::num_rows($result) > 0) {
while ($result_row = Database::fetch_array($result)) {
$special_course_list[] = '"' . $result_row['item_id'] . '"';
}
}
$without_special_courses = '';
if (!empty($special_course_list)) {
$without_special_courses = ' AND course.code NOT IN (' . implode(',', $special_course_list) . ')';
$without_special_courses = ' AND course.id NOT IN (' . implode(',', $special_course_list) . ')';
}
$sql = "SELECT
@ -484,104 +490,6 @@ class Auth
return browseCoursesInCategory($categoryCode, $randomValue, $limit);
}
/**
* Search the courses database for a course that matches the search term.
* The search is done on the code, title and tutor field of the course table.
* @param string $search_term : the string that the user submitted, what we are looking for
* @param array $limit
* @return array an array containing a list of all the courses (the code, directory, dabase, visual_code, title, ... ) matching the the search term.
*/
public function search_courses($search_term, $limit)
{
$TABLECOURS = Database::get_main_table(TABLE_MAIN_COURSE);
$TABLE_COURSE_FIELD = Database :: get_main_table(TABLE_MAIN_COURSE_FIELD);
$TABLE_COURSE_FIELD_VALUE = Database :: get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$limitFilter = getLimitFilterFromArray($limit);
// get course list auto-register
$sql = "SELECT course_code FROM $TABLE_COURSE_FIELD_VALUE tcfv
INNER JOIN $TABLE_COURSE_FIELD tcf ON tcfv.field_id = tcf.id
WHERE tcf.field_variable = 'special_course' AND tcfv.field_value = 1 ";
$special_course_result = Database::query($sql);
if (Database::num_rows($special_course_result) > 0) {
$special_course_list = array();
while ($result_row = Database::fetch_array($special_course_result)) {
$special_course_list[] = '"' . $result_row['course_code'] . '"';
}
}
$without_special_courses = '';
if (!empty($special_course_list)) {
$without_special_courses = ' AND course.code NOT IN (' . implode(',', $special_course_list) . ')';
}
$search_term_safe = Database::escape_string($search_term);
$sql_find = "SELECT * FROM $TABLECOURS
WHERE (
code LIKE '%".$search_term_safe . "%' OR
title LIKE '%" . $search_term_safe ."%' OR
tutor_name LIKE '%" . $search_term_safe . "%'
)
$without_special_courses
ORDER BY title, visual_code ASC
$limitFilter
";
if (api_is_multiple_url_enabled()) {
$url_access_id = api_get_current_access_url_id();
if ($url_access_id != -1) {
$tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$sql_find = "SELECT *
FROM $TABLECOURS as course
INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id)
WHERE
access_url_id = $url_access_id AND (
code LIKE '%" . $search_term_safe . "%' OR
title LIKE '%" . $search_term_safe . "%' OR
tutor_name LIKE '%" . $search_term_safe . "%'
)
$without_special_courses
ORDER BY title, visual_code ASC
$limitFilter
";
}
}
$result_find = Database::query($sql_find);
$courses = array();
while ($row = Database::fetch_array($result_find)) {
$row['registration_code'] = !empty($row['registration_code']);
$count_users = count(CourseManager::get_user_list_from_course_code($row['code']));
$count_connections_last_month = Tracking::get_course_connections_count(
$row['id'],
0,
api_get_utc_datetime(time() - (30 * 86400))
);
$point_info = CourseManager::get_course_ranking($row['id'], 0);
$courses[] = array(
'real_id' => $row['id'],
'point_info' => $point_info,
'code' => $row['code'],
'directory' => $row['directory'],
'db' => $row['db_name'],
'visual_code' => $row['visual_code'],
'title' => $row['title'],
'tutor' => $row['tutor_name'],
'subscribe' => $row['subscribe'],
'unsubscribe' => $row['unsubscribe'],
'registration_code' => $row['registration_code'],
'creation_date' => $row['creation_date'],
'visibility' => $row['visibility'],
'count_users' => $count_users,
'count_connections' => $count_connections_last_month
);
}
return $courses;
}
/**
* Subscribe the user to a given course
* @param string Course code

@ -1,6 +1,8 @@
<?php
/* For licensing terms, see /license.txt*/
use Chamilo\CoreBundle\Entity\ExtraField as EntityExtraField;
/**
* Class CourseManager
*
@ -142,7 +144,7 @@ class CourseManager
$params['course_code'] = $course_info['code'];
$courseFieldValue = new ExtraFieldValue('course');
$courseFieldValue->save_field_values($params);
$courseFieldValue->saveFieldValues($params);
return $course_info;
}
@ -662,23 +664,34 @@ class CourseManager
* Get the course id based on the original id and field name in the
* extra fields. Returns 0 if course was not found
*
* @param string Original course id
* @param string Original field name
* @param string $original_course_id_value
* @param string $original_course_id_name
* @return int Course id
*
* @assert ('', '') === false
*/
public static function get_course_code_from_original_id($original_course_id_value, $original_course_id_name)
{
$t_cfv = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$table_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
$sql = "SELECT course_code
$t_cfv = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$table_field = Database::get_main_table(TABLE_EXTRA_FIELD);
$extraFieldType = EntityExtraField::COURSE_FIELD_TYPE;
$original_course_id_value = Database::escape_string($original_course_id_value);
$original_course_id_name = Database::escape_string($original_course_id_name);
$sql = "SELECT item_id
FROM $table_field cf
INNER JOIN $t_cfv cfv ON cfv.field_id=cf.id
WHERE field_variable='$original_course_id_name' AND field_value='$original_course_id_value'";
INNER JOIN $t_cfv cfv
ON cfv.field_id=cf.id
WHERE
variable = '$original_course_id_name' AND
value = '$original_course_id_value' AND
cf.extra_field_type = $extraFieldType
";
$res = Database::query($sql);
$row = Database::fetch_object($res);
if ($row) {
return $row->course_code;
return $row->item_id;
} else {
return 0;
}
@ -1372,7 +1385,8 @@ class CourseManager
$multiple_access_url = api_get_multiple_access_url();
if ($multiple_access_url) {
$sql .= ' LEFT JOIN ' . Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER) . ' au ON (au.user_id = user.user_id) ';
$sql .= ' LEFT JOIN ' . Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER) . ' au
ON (au.user_id = user.user_id) ';
}
$extraFieldWasAdded = false;
@ -1380,10 +1394,10 @@ class CourseManager
foreach ($extra_field as $extraField) {
$extraFieldInfo = UserManager::get_extra_field_information_by_name($extraField);
if (!empty($extraFieldInfo)) {
$fieldValuesTable = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$fieldValuesTable = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$sql .= ' LEFT JOIN '.$fieldValuesTable.' as ufv
ON (
user.user_id = ufv.user_id AND
user.user_id = ufv.item_id AND
(field_id = '.$extraFieldInfo['id'].' OR field_id IS NULL)
)';
$extraFieldWasAdded = true;
@ -1399,7 +1413,7 @@ class CourseManager
}
if ($return_count && $resumed_report && $extraFieldWasAdded) {
$sql .= ' AND field_id IS NOT NULL GROUP BY field_value ';
$sql .= ' AND field_id IS NOT NULL GROUP BY value ';
}
if (!empty($courseCodeList)) {
@ -1435,7 +1449,8 @@ class CourseManager
return $count_rows;
}
$table_user_field_value = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$table_user_field_value = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$tableExtraField = Database::get_main_table(TABLE_EXTRA_FIELD);
if ($count_rows) {
while ($user = Database::fetch_array($rs)) {
if ($return_count) {
@ -1495,10 +1510,13 @@ class CourseManager
$registered_users_with_extra_field = 0;
if (!empty($name) && $name != '-') {
$extraFieldType = EntityExtraField::COURSE_FIELD_TYPE;
$name = Database::escape_string($name);
$sql = "SELECT count(user_id) as count
FROM $table_user_field_value
WHERE field_value = '$name'";
$sql = "SELECT count(v.item_id) as count
FROM $table_user_field_value v INNER JOIN
$tableExtraField f
ON (f.id = v.field_id)
WHERE value = '$name' AND extra_field_type = $extraFieldType";
$result_count = Database::query($sql);
if (Database::num_rows($result_count)) {
$row_count = Database::fetch_array($result_count);
@ -2247,40 +2265,8 @@ class CourseManager
Database::query($sql);
// delete extra course fields
$t_cf = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
$t_cfv = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$sql = "SELECT distinct field_id FROM $t_cfv WHERE course_code = '$codeFiltered'";
$res_field_ids = Database::query($sql);
$field_ids = array();
while ($row_field_id = Database::fetch_row($res_field_ids)) {
$field_ids[] = $row_field_id[0];
}
// Delete from table_course_field_value from a given course_code
$sql_course_field_value = "DELETE FROM $t_cfv WHERE course_code = '$codeFiltered'";
Database::query($sql_course_field_value);
$sql = "SELECT distinct field_id FROM $t_cfv";
$res_field_all_ids = Database::query($sql);
$field_all_ids = array();
while ($row_field_all_id = Database::fetch_row($res_field_all_ids)) {
$field_all_ids[] = $row_field_all_id[0];
}
if (is_array($field_ids) && count($field_ids) > 0) {
foreach ($field_ids as $field_id) {
// check if field id is used into table field value
if (is_array($field_all_ids)) {
if (in_array($field_id, $field_all_ids)) {
continue;
} else {
$sql_course_field = "DELETE FROM $t_cf WHERE id = '$field_id'";
Database::query($sql_course_field);
}
}
}
}
$extraFieldValues = new ExtraFieldValue('course');
$extraFieldValues->deleteValuesByItem($courseId);
// Add event to system log
$user_id = api_get_user_id();
@ -2534,8 +2520,8 @@ class CourseManager
public static function get_special_course_list()
{
$courseTable = Database:: get_main_table(TABLE_MAIN_COURSE);
$tbl_course_field = Database:: get_main_table(TABLE_MAIN_COURSE_FIELD);
$tbl_course_field_value = Database:: get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$tbl_course_field = Database:: get_main_table(TABLE_EXTRA_FIELD);
$tbl_course_field_value = Database:: get_main_table(TABLE_EXTRA_FIELD_VALUES);
//we filter the courses from the URL
$join_access_url = $where_access_url = '';
@ -2543,28 +2529,32 @@ class CourseManager
$access_url_id = api_get_current_access_url_id();
if ($access_url_id != -1) {
$tbl_url_course = Database:: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$join_access_url = "LEFT JOIN $tbl_url_course url_rel_course ON url_rel_course.c_id = tcfv.c_id ";
$join_access_url = "LEFT JOIN $tbl_url_course url_rel_course
ON url_rel_course.c_id = tcfv.c_id ";
$where_access_url = " AND access_url_id = $access_url_id ";
}
}
$extraFieldType = EntityExtraField::COURSE_FIELD_TYPE;
// get course list auto-register
$sql = "SELECT DISTINCT(c.code)
FROM $tbl_course_field_value tcfv
INNER JOIN $tbl_course_field tcf
ON tcfv.field_id = tcf.id $join_access_url
INNER JOIN $courseTable c
ON (c.id = tcfv.c_id)
ON (c.id = tcfv.item_id)
WHERE
tcf.field_variable = 'special_course' AND
tcfv.field_value = 1 $where_access_url";
tcf.extra_field_type = $extraFieldType AND
tcf.variable = 'special_course' AND
tcfv.value = 1 $where_access_url";
$result = Database::query($sql);
$courseList = array();
if (Database::num_rows($result) > 0) {
while ($result_row = Database::fetch_array($result)) {
$courseList[] = $result_row['course_code'];
$courseList[] = $result_row['code'];
}
}
@ -2767,58 +2757,35 @@ class CourseManager
* @param string Field's language var name
* @return int new extra field id
*/
public static function create_course_extra_field($fieldvarname, $fieldtype, $fieldtitle)
public static function create_course_extra_field($variable, $fieldType, $displayText, $default)
{
// database table definition
$t_cfv = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$t_cf = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
$fieldvarname = Database::escape_string($fieldvarname);
$fieldtitle = Database::escape_string($fieldtitle);
$fieldtype = (int)$fieldtype;
$time = time();
$sql_field = "SELECT id FROM $t_cf WHERE field_variable = '$fieldvarname'";
$res_field = Database::query($sql_field);
$r_field = Database::fetch_row($res_field);
if (Database::num_rows($res_field) > 0) {
return $r_field[0];
}
// save new fieldlabel into course_field table
$sql = "SELECT MAX(field_order) FROM $t_cf";
$res = Database::query($sql);
$order = 0;
if (Database::num_rows($res) > 0) {
$row = Database::fetch_row($res);
$order = $row[0] + 1;
}
$sql = "INSERT INTO $t_cf SET
field_type = '$fieldtype',
field_variable = '$fieldvarname',
field_display_text = '$fieldtitle',
field_order = '$order',
tms = FROM_UNIXTIME($time)";
Database::query($sql);
$extraField = new ExtraField('course');
$params = [
'variable' => $variable,
'field_type' => $fieldType,
'display_text' => $displayText,
'default_value' => $default
];
return Database::insert_id();
return $extraField->save($params);
}
/**
* Updates course attribute. Note that you need to check that your attribute is valid before you use this function
* Updates course attribute. Note that you need to check that your
* attribute is valid before you use this function
*
* @param int Course id
* @param string Attribute name
* @param string Attribute value
* @return bool True if attribute was successfully updated, false if course was not found or attribute name is invalid
* @return bool True if attribute was successfully updated,
* false if course was not found or attribute name is invalid
*/
public static function update_attribute($id, $name, $value)
{
$id = (int)$id;
$table = Database::get_main_table(TABLE_MAIN_COURSE);
$sql = "UPDATE $table SET $name = '" . Database::escape_string($value) . "' WHERE id = '$id';";
$sql = "UPDATE $table SET $name = '" . Database::escape_string($value) . "'
WHERE id = '$id';";
return Database::query($sql);
}
@ -2856,95 +2823,24 @@ class CourseManager
* @param string Field value
* @return boolean true if field updated, false otherwise
*/
public static function update_course_extra_field_value($course_code, $fname, $fvalue = '')
public static function update_course_extra_field_value($course_code, $variable, $value = '')
{
$t_cfv = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$t_cf = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
$fname = Database::escape_string($fname);
$course_code = Database::escape_string($course_code);
$courseId = api_get_course_int_id($course_code);
$fvalues = '';
if (is_array($fvalue)) {
foreach ($fvalue as $val) {
$fvalues .= Database::escape_string($val) . ';';
}
if (!empty($fvalues)) {
$fvalues = substr($fvalues, 0, -1);
}
} else {
$fvalues = Database::escape_string($fvalue);
}
$sqlcf = "SELECT * FROM $t_cf WHERE field_variable='$fname'";
$rescf = Database::query($sqlcf);
if (Database::num_rows($rescf) == 1) {
// Ok, the field exists
// Check if enumerated field, if the option is available
$rowcf = Database::fetch_array($rescf);
$tms = time();
$sqlcfv = "SELECT * FROM $t_cfv
WHERE c_id = $courseId AND field_id = '" . $rowcf['id'] . "'
ORDER BY id";
$rescfv = Database::query($sqlcfv);
$n = Database::num_rows($rescfv);
if ($n > 1) {
//problem, we already have to values for this field and user combination - keep last one
while ($rowcfv = Database::fetch_array($rescfv)) { // See the TODO note below.
if ($n > 1) {
$sqld = "DELETE FROM $t_cfv WHERE id = " . $rowcfv['id'];
$resd = Database::query($sqld);
$n--;
}
$rowcfv = Database::fetch_array($rescfv);
if ($rowcfv['field_value'] != $fvalues) {
$sqlu = "UPDATE $t_cfv SET field_value = '$fvalues', tms = FROM_UNIXTIME($tms)
WHERE id = " . $rowcfv['id'];
$resu = Database::query($sqlu);
return ($resu ? true : false);
}
return true;
/* TODO: Sure exit from the function occures in this "while" cycle.
Logic should checked. Maybe "if" instead of "while"? It is not clear... */
}
} elseif ($n == 1) {
//we need to update the current record
$rowcfv = Database::fetch_array($rescfv);
if ($rowcfv['field_value'] != $fvalues) {
$sqlu = "UPDATE $t_cfv SET field_value = '$fvalues', tms = FROM_UNIXTIME($tms) WHERE id = " . $rowcfv['id'];
$resu = Database::query($sqlu);
return ($resu ? true : false);
}
return true;
} else {
$sqli = "INSERT INTO $t_cfv (c_id, course_code,field_id,field_value,tms) " .
"VALUES ($courseId, '$course_code'," . $rowcf['id'] . ",'$fvalues',FROM_UNIXTIME($tms))";
$resi = Database::query($sqli);
return ($resi ? true : false);
}
} else {
return false; //field not found
}
$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);
}
/**
* Get the course id of an course by the database name
* @deprecated
* @param string The database name
* @return string The course id
* @param int $session_id
* @return mixed
*/
public static function get_course_id_by_database_name($db_name)
{
return Database::result(
Database::query(
'SELECT code FROM ' . Database::get_main_table(TABLE_MAIN_COURSE) .
' WHERE db_name="' . Database::escape_string($db_name) . '"'
),
0,
'code'
);
}
public static function get_session_category_id_by_session_id($session_id)
{
return Database::result(
@ -2957,78 +2853,26 @@ class CourseManager
);
}
/**
* Get the course id of an course by the database name
* @param string The database name
* @return string The course id
*/
public static function get_course_extra_field_list($code)
{
$tbl_course_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
$tbl_course_field_value = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$sql_field = "SELECT id, field_type, field_variable, field_display_text, field_default_value
FROM $tbl_course_field WHERE field_visible = '1' ";
$res_field = Database::query($sql_field);
$extra_fields = array();
while ($rowcf = Database::fetch_array($res_field)) {
$extra_field_id = $rowcf['id'];
$sql = "SELECT field_value FROM $tbl_course_field_value
WHERE course_code = '$code' AND field_id = '$extra_field_id'";
$res_field_value = Database::query($sql);
if (Database::num_rows($res_field_value) > 0) {
$r_field_value = Database::fetch_row($res_field_value);
$rowcf['extra_field_value'] = $r_field_value[0];
}
$extra_fields[] = $rowcf;
}
return $extra_fields;
}
/**
* Gets the value of a course extra field. Returns null if it was not found
*
* @param string Name of the extra field
* @param string Course code
*
* @return string Value
*/
public static function get_course_extra_field_value($field_name, $code)
public static function get_course_extra_field_value($variable, $code)
{
$tbl_course_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
$tbl_course_field_value = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$sql = "SELECT id FROM $tbl_course_field WHERE field_visible = '1' AND field_variable = '$field_name';";
$res = Database::query($sql);
$row = Database::fetch_object($res);
if (!$row) {
return null;
} else {
$sql = "SELECT field_value FROM $tbl_course_field_value
WHERE course_code = '$code' AND field_id = '{$row->id}';";
$res_field_value = Database::query($sql);
$row_field_value = Database::fetch_object($res_field_value);
if (!$row_field_value) {
return null;
} else {
return $row_field_value['field_value'];
}
$courseInfo = api_get_course_info($code);
$courseId = $courseInfo['real_id'];
$extraFieldValues = new ExtraFieldValue('course');
$result = $extraFieldValues->get_values_by_handler_and_field_variable($variable, $courseId);
if (!empty($result['value'])) {
return $result['value'];
}
}
/**
* Get the database name of a course by the code
* @deprecated
* @param string The course code
* @return string The database name
*/
public static function get_name_database_course($course_code)
{
return Database::result(
Database::query(
'SELECT db_name FROM ' . Database::get_main_table(TABLE_MAIN_COURSE) .
' WHERE code="' . Database::escape_string($course_code) . '"'
),
0,
'db_name'
);
return null;
}
/**
@ -3312,31 +3156,24 @@ class CourseManager
/**
* check if a course is special (autoregister)
* @param string $course_code
* @param int $courseId
* @return bool
*/
public static function is_special_course($course_code)
public static function isSpecialCourse($courseId)
{
$tbl_course_field_value = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$tbl_course_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
$extraFieldValue = new ExtraFieldValue('course');
$result = $extraFieldValue->get_values_by_handler_and_field_variable(
$courseId,
'special_course'
);
$is_special = false;
$course_code = Database::escape_string($course_code);
$courseId = api_get_course_int_id($course_code);
$sql = "SELECT course_code
FROM $tbl_course_field_value tcfv
INNER JOIN $tbl_course_field tcf ON tcfv.field_id = tcf.id
WHERE
tcf.field_variable = 'special_course' AND
tcfv.field_value = 1 AND
c_id = $courseId";
$result = Database::query($sql);
$num_rows = Database::num_rows($result);
if ($num_rows > 0) {
$is_special = true;
if (!empty($result)) {
if ($result['value'] == 1) {
return true;
}
}
return $is_special;
return false;
}
/**
@ -3963,28 +3800,24 @@ class CourseManager
* Get the course id based on the original id and field name in the extra fields.
* Returns 0 if course was not found
*
* @param string $original_course_id_value Original course code
* @param string $original_course_id_name Original field name
* @param string $value Original course code
* @param string $variable Original field name
* @return int Course id
*/
public static function get_course_id_from_original_id($original_course_id_value, $original_course_id_name)
public static function getCourseInfoFromOriginalId($value, $variable)
{
$t_cfv = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$table_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
$original_course_id_name = Database::escape_string($original_course_id_name);
$original_course_id_name = Database::escape_string($original_course_id_name);
$sql = "SELECT course_code FROM $table_field cf
INNER JOIN $t_cfv cfv ON cfv.field_id=cf.id
WHERE
field_variable='$original_course_id_name' AND
field_value='$original_course_id_value'";
$res = Database::query($sql);
$row = Database::fetch_object($res);
if ($row != false) {
return $row->course_code;
} else {
return 0;
$extraFieldValue = new ExtraFieldValue('course');
$result = $extraFieldValue->get_item_id_from_field_variable_and_field_value(
$variable,
$value
);
if (!empty($result)) {
$courseInfo = api_get_course_info_by_id($result['item_id']);
return $courseInfo;
}
return 0;
}
/**
@ -3999,7 +3832,8 @@ class CourseManager
* @param array Course details
* @param integer Session ID
* @param string CSS class to apply to course entry
* @param boolean Whether the session is supposedly accessible now (not in the case it has passed and is in invisible/unaccessible mode)
* @param boolean Whether the session is supposedly accessible now
* (not in the case it has passed and is in invisible/unaccessible mode)
* @param bool Whether to show the document quick-loader or not
* @return string The HTML to be printed for the course entry
*
@ -4007,7 +3841,9 @@ class CourseManager
* @todo refactor into different functions for database calls | logic | display
* @todo replace single-character $my_course['d'] indices
* @todo move code for what's new icons to a separate function to clear things up
* @todo add a parameter user_id so that it is possible to show the courselist of other users (=generalisation). This will prevent having to write a new function for this.
* @todo add a parameter user_id so that it is possible to show the
* courselist of other users (=generalisation).
* This will prevent having to write a new function for this.
*/
public static function get_logged_user_course_html(
$course,
@ -4029,7 +3865,12 @@ class CourseManager
}
if (empty($date_start) or empty($date_end)) {
$sess = SessionManager::get_sessions_list(
array('s.id' => array('operator' => '=', 'value' => $course_info['id_session']))
array(
's.id' => array(
'operator' => '=',
'value' => $course_info['id_session'],
),
)
);
$date_start = $sess[$course_info['id_session']]['date_start'];
$date_end = $sess[$course_info['id_session']]['date_end'];

@ -531,30 +531,16 @@ function countCoursesInCategory($category_code="", $searchTerm = '')
{
global $_configuration;
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
$TABLE_COURSE_FIELD = Database :: get_main_table(TABLE_MAIN_COURSE_FIELD);
$TABLE_COURSE_FIELD_VALUE = Database :: get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$categoryCode = Database::escape_string($category_code);
$searchTerm = Database::escape_string($searchTerm);
$categoryFilter = '';
$searchFilter = '';
// get course list auto-register
$sql = "SELECT course_code
FROM $TABLE_COURSE_FIELD_VALUE tcfv
INNER JOIN $TABLE_COURSE_FIELD tcf ON tcfv.field_id = tcf.id
WHERE tcf.field_variable = 'special_course' AND tcfv.field_value = 1 ";
$special_course_result = Database::query($sql);
if (Database::num_rows($special_course_result) > 0) {
$special_course_list = array();
while ($result_row = Database::fetch_array($special_course_result)) {
$special_course_list[] = '"' . $result_row['course_code'] . '"';
}
}
$specialCourseList = CourseManager::get_special_course_list();
$without_special_courses = '';
if (!empty($special_course_list)) {
$without_special_courses = ' AND course.code NOT IN (' . implode(',', $special_course_list) . ')';
if (!empty($specialCourseList)) {
$without_special_courses = ' AND course.code NOT IN (' . implode(',', $specialCourseList) . ')';
}
$visibilityCondition = null;
@ -624,26 +610,12 @@ function browseCoursesInCategory($category_code, $random_value = null, $limit =
{
global $_configuration;
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
$TABLE_COURSE_FIELD = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
$TABLE_COURSE_FIELD_VALUE = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
// Get course list auto-register
$sql = "SELECT course_code
FROM $TABLE_COURSE_FIELD_VALUE tcfv
INNER JOIN $TABLE_COURSE_FIELD tcf ON tcfv.field_id = tcf.id
WHERE tcf.field_variable = 'special_course' AND tcfv.field_value = 1 ";
$special_course_result = Database::query($sql);
if (Database::num_rows($special_course_result) > 0) {
$special_course_list = array();
while ($result_row = Database::fetch_array($special_course_result)) {
$special_course_list[] = '"' . $result_row['course_code'] . '"';
}
}
$specialCourseList = CourseManager::get_special_course_list();
$without_special_courses = '';
if (!empty($special_course_list)) {
$without_special_courses = ' AND course.code NOT IN (' . implode(',', $special_course_list) . ')';
if (!empty($specialCourseList)) {
$without_special_courses = ' AND course.code NOT IN (' . implode(',', $specialCourseList) . ')';
}
$visibilityCondition = null;
if (isset($_configuration['course_catalog_hide_private'])) {
@ -703,14 +675,20 @@ function browseCoursesInCategory($category_code, $random_value = null, $limit =
$category_code = Database::escape_string($category_code);
if (empty($category_code) || $category_code == "ALL") {
$sql = "SELECT * FROM $tbl_course
WHERE 1=1 $without_special_courses $visibilityCondition
WHERE
1=1
$without_special_courses
$visibilityCondition
ORDER BY title $limitFilter ";
} else {
if ($category_code == 'NONE') {
$category_code = '';
}
$sql = "SELECT * FROM $tbl_course
WHERE category_code='$category_code' $without_special_courses $visibilityCondition
WHERE
category_code='$category_code'
$without_special_courses
$visibilityCondition
ORDER BY title $limitFilter ";
}
@ -720,18 +698,24 @@ function browseCoursesInCategory($category_code, $random_value = null, $limit =
$tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
if ($category_code != "ALL") {
$sql = "SELECT * FROM $tbl_course as course
INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id)
WHERE access_url_id = $url_access_id AND category_code='$category_code' $without_special_courses $visibilityCondition
ORDER BY title $limitFilter";
INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id)
WHERE
access_url_id = $url_access_id AND
category_code='$category_code'
$without_special_courses
$visibilityCondition
ORDER BY title $limitFilter";
} else {
$sql = "SELECT * FROM $tbl_course as course
INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id)
WHERE access_url_id = $url_access_id $without_special_courses $visibilityCondition
WHERE
access_url_id = $url_access_id
$without_special_courses
$visibilityCondition
ORDER BY title $limitFilter";
}
}
}

@ -58,17 +58,22 @@ define('TABLE_MAIN_GRADEBOOK_SCORE_DISPLAY', 'gradebook_score_display');
define('TABLE_MAIN_GRADEBOOK_CERTIFICATE', 'gradebook_certificate');
// Profiling
define('TABLE_EXTRA_FIELD', 'extra_field');
define('TABLE_EXTRA_FIELD_OPTIONS', 'extra_field_options');
define('TABLE_EXTRA_FIELD_VALUES', 'extra_field_values');
define('TABLE_MAIN_USER_FIELD', 'user_field');
define('TABLE_MAIN_USER_FIELD_OPTIONS', 'user_field_options');
define('TABLE_MAIN_USER_FIELD_VALUES', 'user_field_values');
define('TABLE_MAIN_LP_FIELD', 'lp_field');
/*define('TABLE_MAIN_LP_FIELD', 'lp_field');
define('TABLE_MAIN_LP_FIELD_OPTIONS', 'lp_field_options');
define('TABLE_MAIN_LP_FIELD_VALUES', 'lp_field_values');
define('TABLE_MAIN_LP_FIELD_VALUES', 'lp_field_values');*/
define('TABLE_MAIN_CALENDAR_EVENT_FIELD', 'calendar_event_field');
/*define('TABLE_MAIN_CALENDAR_EVENT_FIELD', 'calendar_event_field');
define('TABLE_MAIN_CALENDAR_EVENT_OPTIONS', 'calendar_event_options');
define('TABLE_MAIN_CALENDAR_EVENT_VALUES', 'calendar_event_values');
define('TABLE_MAIN_CALENDAR_EVENT_VALUES', 'calendar_event_values');*/
//User tags
define('TABLE_MAIN_TAG', 'tag');
@ -108,8 +113,6 @@ define('TABLE_MAIN_RESERVATION_ITEM_RIGHTS', 'reservation_item_rights');
define('TABLE_MAIN_USER_REL_USER', 'user_rel_user');
define('TABLE_MAIN_USER_FRIEND_RELATION_TYPE', 'user_friend_relation_type');
// Web services
define('TABLE_MAIN_USER_API_KEY', 'user_api_key');
define('TABLE_MAIN_COURSE_FIELD', 'course_field');
define('TABLE_MAIN_COURSE_FIELD_OPTIONS', 'course_field_options');
define('TABLE_MAIN_COURSE_FIELD_VALUES', 'course_field_values');
@ -117,6 +120,9 @@ define('TABLE_MAIN_SESSION_FIELD', 'session_field');
define('TABLE_MAIN_SESSION_FIELD_OPTIONS', 'session_field_options');
define('TABLE_MAIN_SESSION_FIELD_VALUES', 'session_field_values');
// Web services
define('TABLE_MAIN_USER_API_KEY', 'user_api_key');
// Term and conditions
define('TABLE_MAIN_LEGAL', 'legal');

File diff suppressed because it is too large Load Diff

@ -11,13 +11,15 @@ class ExtraFieldOption extends Model
'id',
'field_id',
'option_value',
'option_display_text',
'display_text',
'option_order',
'priority',
'priority_message',
'tms'
);
public $extraField;
/**
* Gets the table for the type of object for which we are using an extra field
* @param string $type Type of object (course, user or session)
@ -25,61 +27,62 @@ class ExtraFieldOption extends Model
public function __construct($type)
{
$this->type = $type;
switch ($this->type) {
case 'calendar_event':
$this->table = Database::get_main_table(TABLE_MAIN_CALENDAR_EVENT_OPTIONS);
break;
case 'course':
$this->table = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_OPTIONS);
break;
case 'user':
$this->table = Database::get_main_table(TABLE_MAIN_USER_FIELD_OPTIONS);
break;
case 'session':
$this->table = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_OPTIONS);
break;
case 'question':
$this->table = Database::get_main_table(TABLE_MAIN_QUESTION_FIELD_OPTIONS);
break;
case 'lp':
$this->table = Database::get_main_table(TABLE_MAIN_LP_FIELD_OPTIONS);
break;
}
$extraField = new ExtraField($this->type);
$this->extraField = $extraField;
$this->table = Database::get_main_table(TABLE_EXTRA_FIELD_OPTIONS);
$this->tableExtraField = Database::get_main_table(TABLE_EXTRA_FIELD);
}
/**
* @return ExtraField
*/
public function getExtraField()
{
return $this->extraField;
}
/**
* Gets the number of options already available in the table for this item type
* @return int Number of options available
* @assert () >= 0
*/
public function get_count()
/*public function get_count()
{
$row = Database::select('count(*) as count', $this->table, array(), 'first');
return $row['count'];
}
}*/
/**
* Gets the number of options available for this field
* @param int $field_id
* @param int $fieldId
*
* @return int Number of options
* @assert ('') === false
* @assert (-1) == 0
* @assert (0) == 0
*/
public function get_count_by_field_id($field_id)
public function get_count_by_field_id($fieldId)
{
if (empty($field_id)) {
if (empty($fieldId)) {
return false;
}
$row = Database::select(
'count(*) as count',
$this->table,
array('where' => array('field_id = ?' => $field_id)),
'first'
);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$fieldId = intval($fieldId);
return $row['count'];
$sql = "SELECT count(*) as count
FROM $this->table o INNER JOIN $this->tableExtraField e
ON o.field_id = e.id
WHERE
o.field_id = $fieldId AND
e.extra_field_type = ".$extraFieldType."
";
$result = Database::query($sql);
$result = Database::fetch_array($result);
return $result['count'];
}
/**
@ -90,13 +93,13 @@ class ExtraFieldOption extends Model
* @return string List of options separated by ;
* @assert (-1, false, null) == ''
*/
public function get_field_options_to_string($field_id, $add_id_in_array = false, $ordered_by = null)
public function getFieldOptionsToString($field_id, $add_id_in_array = false, $ordered_by = null)
{
$options = self::get_field_options_by_field($field_id, $add_id_in_array, $ordered_by);
$new_options = array();
if (!empty($options)) {
foreach ($options as $option) {
$new_options[] = $option['option_value'].':'.$option['option_display_text'];
$new_options[] = $option['option_value'].':'.$option['display_text'];
}
$string = implode(';', $new_options);
@ -109,13 +112,14 @@ class ExtraFieldOption extends Model
/**
* Delete all the options of a specific field
* @param int $field_id
*
* @result void
* @assert (-1) === false
*/
public function delete_all_options_by_field_id($field_id)
{
$field_id = intval($field_id);
$sql = "DELETE FROM {$this->table} WHERE field_id = $field_id";
$sql = "DELETE FROM {$this->table} WHERE field_id = $field_id";
$r = Database::query($sql);
return $r;
@ -123,28 +127,28 @@ class ExtraFieldOption extends Model
/**
* @param array $params
* @param bool $showQuery
*
* @return int
*/
public function saveOptions($params, $show_query = false)
public function saveOptions($params, $showQuery = false)
{
$optionInfo = self::get_field_option_by_field_and_option($params['field_id'], $params['option_value']);
// Use URLify only for new items
$optionValue = api_replace_dangerous_char($params['option_value']);
$option = $params['option_value'];
$optionInfo = self::get_field_option_by_field_and_option(
$params['field_id'],
$params['option_value']
);
if ($optionInfo == false) {
$optionValue = api_replace_dangerous_char($params['option_value']);
$order = self::get_max_order($params['field_id']);
$new_params = array(
'field_id' => $params['field_id'],
'option_value' => trim($optionValue),
'option_display_text' => trim($option),
'option_order' => $order,
'tms' => api_get_utc_datetime(),
$newParams = array(
'field_id' => $params['field_id'],
'value' => trim($optionValue),
'display_text' => trim($params['display_text']),
'option_order' => $order
);
return parent::save($new_params, $show_query);
return parent::save($newParams, $showQuery);
}
return false;
@ -153,12 +157,13 @@ class ExtraFieldOption extends Model
/**
* Saves an option into the corresponding *_field_options table
* @param array $params Parameters to be considered for the insertion
* @param bool $show_query Whether to show the query (sent to the parent save() method)
* @param bool $showQuery Whether to show the query (sent to the parent save() method)
*
* @return bool True on success, false on error
* @assert (array('field_id'=>0), false) === false
* @assert (array('field_id'=>1), false) === true
*/
public function save($params, $show_query = false)
public function save($params, $showQuery = false)
{
$field_id = intval($params['field_id']);
@ -189,11 +194,10 @@ class ExtraFieldOption extends Model
$sub_options = $option['options'];
$new_params = array(
'field_id' => $field_id,
'option_value' => 0,
'option_display_text' => $option['label'],
'option_order' => 0,
'tms' => $time,
'field_id' => $field_id,
'option_value' => 0,
'display_text' => $option['label'],
'option_order' => 0,
);
// Looking if option already exists:
@ -203,35 +207,35 @@ class ExtraFieldOption extends Model
);
if (empty($option_info)) {
$sub_id = parent::save($new_params, $show_query);
$sub_id = parent::save($new_params, $showQuery);
} else {
$sub_id = $option_info['id'];
$sub_id = $option_info['id'];
$new_params['id'] = $sub_id;
parent::update($new_params, $show_query);
parent::update($new_params, $showQuery);
}
foreach ($sub_options as $sub_option) {
if (!empty($sub_option)) {
$new_params = array(
'field_id' => $field_id,
'option_value' => $sub_id,
'option_display_text' => $sub_option,
'option_order' => 0,
'tms' => $time,
'field_id' => $field_id,
'option_value' => $sub_id,
'display_text' => $sub_option,
'option_order' => 0,
);
$option_info = self::get_field_option_by_field_id_and_option_display_text_and_option_value(
$option_info = self::getFieldOptionByFieldIdAndOptionDisplayTextAndOptionValue(
$field_id,
$sub_option,
$sub_id
);
if (empty($option_info)) {
parent::save($new_params, $show_query);
parent::save($new_params, $showQuery);
} else {
$new_params['id'] = $option_info['id'];
parent::update($new_params, $show_query);
parent::update($new_params, $showQuery);
}
}
}
}
}
@ -243,6 +247,7 @@ class ExtraFieldOption extends Model
if (!empty($list)) {
foreach ($list as $option) {
$option_info = self::get_field_option_by_field_and_option($field_id, $option);
// Use URLify only for new items
$optionValue = api_replace_dangerous_char($option);
$option = trim($option);
@ -251,13 +256,12 @@ class ExtraFieldOption extends Model
$order = self::get_max_order($field_id);
$new_params = array(
'field_id' => $field_id,
'option_value' => trim($optionValue),
'option_display_text' => trim($option),
'option_order' => $order,
'tms' => $time,
'field_id' => $field_id,
'option_value' => trim($optionValue),
'display_text' => trim($option),
'option_order' => $order,
);
parent::save($new_params, $show_query);
parent::save($new_params, $showQuery);
}
}
}
@ -286,13 +290,12 @@ class ExtraFieldOption extends Model
$params['option_value'] = trim($params['option_value']);
}
if (isset($params['option_display_text'])) {
$params['option_display_text'] = trim($params['option_display_text']);
if (isset($params['display_text'])) {
$params['display_text'] = trim($params['display_text']);
}
$params['tms'] = api_get_utc_datetime();
if (empty($params['option_order'])) {
$order = self::get_max_order($field_id);
$order = self::get_max_order($field_id);
$params['option_order'] = $order;
}
if ($insert_repeated) {
@ -319,11 +322,18 @@ class ExtraFieldOption extends Model
*/
public function get_field_option_by_field_and_option($field_id, $option_value)
{
$field_id = intval($field_id);
$field_id = intval($field_id);
$option_value = Database::escape_string($option_value);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$sql = "SELECT * FROM {$this->table}
WHERE field_id = $field_id AND option_value = '".$option_value."'";
$sql = "SELECT s.* FROM {$this->table} s
INNER JOIN {$this->tableExtraField} sf
ON (s.field_id = sf.id)
WHERE
field_id = $field_id AND
option_value = '".$option_value."' AND
sf.extra_field_type = ".$extraFieldType."
";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
return Database::store_result($result, 'ASSOC');
@ -343,9 +353,16 @@ class ExtraFieldOption extends Model
{
$field_id = intval($field_id);
$option_display_text = Database::escape_string($option_display_text);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$sql = "SELECT * FROM {$this->table}
WHERE field_id = $field_id AND option_display_text = '".$option_display_text."'";
$sql = "SELECT s.* FROM {$this->table} s
INNER JOIN {$this->tableExtraField} sf
ON (s.field_id = sf.id)
WHERE
field_id = $field_id AND
s.display_text = '".$option_display_text."' AND
sf.extra_field_type = ".$extraFieldType."
";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
return Database::fetch_array($result, 'ASSOC');
@ -359,23 +376,29 @@ class ExtraFieldOption extends Model
* @param int $field_id
* @param string $option_display_text Display value of the option
* @param string $option_value Value of the option
*
* @return mixed The row on success or false on failure
* @assert (0, '', '') === false
*/
public function get_field_option_by_field_id_and_option_display_text_and_option_value(
public function getFieldOptionByFieldIdAndOptionDisplayTextAndOptionValue(
$field_id,
$option_display_text,
$option_value
) {
$field_id = intval($field_id);
$field_id = intval($field_id);
$option_display_text = Database::escape_string($option_display_text);
$option_value = Database::escape_string($option_value);
$option_value = Database::escape_string($option_value);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$sql = "SELECT * FROM {$this->table}
$sql = "SELECT s.* FROM {$this->table} s
INNER JOIN {$this->tableExtraField} sf
ON (s.field_id = sf.id)
WHERE
field_id = $field_id AND
option_display_text = '".$option_display_text."' AND
option_value = '$option_value'";
sf.display_text = '".$option_display_text."' AND
option_value = '$option_value' AND
sf.extra_field_type = ".$extraFieldType."
";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
return Database::fetch_array($result, 'ASSOC');
@ -402,6 +425,7 @@ class ExtraFieldOption extends Model
if (!empty($ordered_by)) {
$sql .= " ORDER BY $ordered_by ";
}
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
if ($add_id_in_array) {
@ -428,13 +452,13 @@ class ExtraFieldOption extends Model
*/
public function get_second_select_field_options_by_field($field_id, $option_value_id, $to_json = false)
{
$field_id = intval($field_id);
$field_id = intval($field_id);
$option_value_id = intval($option_value_id);
$options = array();
$sql = "SELECT * FROM {$this->table}
$options = array();
$sql = "SELECT * FROM {$this->table}
WHERE field_id = $field_id AND option_value = $option_value_id
ORDER BY option_display_text";
$result = Database::query($sql);
ORDER BY display_text";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
$options = Database::store_result($result, 'ASSOC');
}
@ -444,7 +468,7 @@ class ExtraFieldOption extends Model
if (!empty($options)) {
$array = array();
foreach ($options as $option) {
$array[$option['id']] = $option['option_display_text'];
$array[$option['id']] = $option['display_text'];
}
$string = json_encode($array);
}
@ -464,10 +488,10 @@ class ExtraFieldOption extends Model
*/
public function get_field_options_by_field_to_string($field_id, $ordered_by = null)
{
$field = new ExtraField($this->type);
$field = new ExtraField($this->type);
$field_info = $field->get($field_id);
$options = self::get_field_options_by_field($field_id, false, $ordered_by);
$elements = array();
$options = self::get_field_options_by_field($field_id, false, $ordered_by);
$elements = array();
if (!empty($options)) {
switch ($field_info['field_type']) {
case ExtraField::FIELD_TYPE_DOUBLE_SELECT:
@ -496,9 +520,11 @@ class ExtraFieldOption extends Model
public function get_max_order($field_id)
{
$field_id = intval($field_id);
$sql = "SELECT MAX(option_order) FROM {$this->table} WHERE field_id = $field_id";
$res = Database::query($sql);
$max = 1;
$sql = "SELECT MAX(option_order)
FROM {$this->table}
WHERE field_id = $field_id";
$res = Database::query($sql);
$max = 1;
if (Database::num_rows($res) > 0) {
$row = Database::fetch_array($res);
$max = $row[0] + 1;
@ -525,13 +551,8 @@ class ExtraFieldOption extends Model
// action links
echo '<div class="actions">';
$field_id = isset($_REQUEST['field_id']) ? intval($_REQUEST['field_id']) : null;
echo '<a href="'.api_get_self(
).'?action=add&type='.$this->type.'&field_id='.$field_id.'">'.Display::return_icon(
'add_user_fields.png',
get_lang('Add'),
'',
ICON_SIZE_MEDIUM
).'</a>';
echo '<a href="'.api_get_self().'?action=add&type='.$this->type.'&field_id='.$field_id.'">'.
Display::return_icon('add_user_fields.png', get_lang('Add'), '', ICON_SIZE_MEDIUM ).'</a>';
echo '</div>';
echo Display::grid_html('extra_field_options');
}
@ -574,13 +595,14 @@ class ExtraFieldOption extends Model
* Returns an HTML form for the current field
* @param string URL to send the form to (action=...)
* @param string Type of action to offer through the form (edit, usually)
* @return string HTML form
*
* @return FormValidator
*/
public function return_form($url, $action)
{
$form_name = $this->type.'_field';
$form = new FormValidator($form_name, 'post', $url);
// Settting the form elements
// Setting the form elements
$header = get_lang('Add');
if ($action == 'edit') {
$header = get_lang('Modify');
@ -593,9 +615,9 @@ class ExtraFieldOption extends Model
$form->addElement('hidden', 'type', $this->type);
$form->addElement('hidden', 'field_id', $this->field_id);
$form->addElement('text', 'option_display_text', get_lang('Name'), array('class' => 'span5'));
$form->addElement('text', 'option_value', get_lang('Value'), array('class' => 'span5'));
$form->addElement('text', 'option_order', get_lang('Order'), array('class' => 'span2'));
$form->addElement('text', 'display_text', get_lang('Name'));
$form->addElement('text', 'option_value', get_lang('Value'));
$form->addElement('text', 'option_order', get_lang('Order'));
$form->addElement('select', 'priority', get_lang('Priority'), $this->getPriorityOptions());
$form->addElement('textarea', 'priority_message', get_lang('PriorityOfMessage'));
@ -605,16 +627,15 @@ class ExtraFieldOption extends Model
// Setting the defaults
$defaults = $this->get($id);
$form->freeze('option_value');
$form->addElement('button', 'submit', get_lang('Modify'), 'class="save"');
$form->addButtonUpdate(get_lang('Modify'));
} else {
$form->addElement('button', 'submit', get_lang('Add'), 'class="save"');
$form->addButtonCreate(get_lang('Add'));
}
$form->setDefaults($defaults);
// Setting the rules
$form->addRule('option_display_text', get_lang('ThisFieldIsRequired'), 'required');
//$form->addRule('field_variable', get_lang('ThisFieldIsRequired'), 'required');
$form->addRule('display_text', get_lang('ThisFieldIsRequired'), 'required');
$form->addRule('option_value', get_lang('ThisFieldIsRequired'), 'required');
return $form;

@ -1,77 +1,53 @@
<?php
/* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Entity\ExtraField as EntityExtraField;
/**
* Class ExtraFieldValue
* Declaration for the ExtraFieldValue class, managing the values in extra
* fields for any data type
*
* @package chamilo.library
*
*/
class ExtraFieldValue extends Model
{
public $type = null;
public $columns = array('id', 'field_id', 'field_value', 'tms', 'comment');
public $type = '';
public $columns = array(
'id',
'field_id',
'value',
'comment',
'item_id',
'created_at',
'updated_at',
);
/** @var string session_id, course_code, user_id, question id */
public $handler_id = null;
public $entityName;
public $extraField = null;
/**
* Formats the necessary elements for the given datatype
* @param string $type The type of data to which this extra field
* applies (user, course, session, ...)
* @return void (or false if unmanaged datatype)
*
* @assert (-1) === false
*/
public function __construct($type)
{
$this->type = $type;
$extra_field = new ExtraField($this->type);
$this->handler_id = $extra_field->handler_id;
switch ($this->type) {
case 'calendar_event':
$this->table = Database::get_main_table(TABLE_MAIN_CALENDAR_EVENT_VALUES);
$this->table_handler_field = Database::get_main_table(TABLE_MAIN_CALENDAR_EVENT_FIELD);
$this->author_id = 'user_id';
break;
case 'course':
$this->table = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$this->table_handler_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
$this->author_id = 'user_id';
$this->entityName = 'ChamiloLMS\Entity\CourseFieldValues';
break;
case 'user':
$this->table = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$this->table_handler_field = Database::get_main_table(TABLE_MAIN_USER_FIELD);
$this->author_id = 'author_id';
$this->entityName = 'ChamiloLMS\Entity\UserFieldValues';
break;
case 'session':
$this->table = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
$this->table_handler_field = Database::get_main_table(TABLE_MAIN_SESSION_FIELD);
$this->author_id = 'user_id';
$this->entityName = 'ChamiloLMS\Entity\SessionFieldValues';
break;
case 'question':
$this->table = Database::get_main_table(TABLE_MAIN_QUESTION_FIELD_VALUES);
$this->table_handler_field = Database::get_main_table(TABLE_MAIN_QUESTION_FIELD);
$this->author_id = 'user_id';
$this->entityName = 'ChamiloLMS\Entity\QuestionFieldValues';
break;
case 'lp':
$this->table = Database::get_main_table(TABLE_MAIN_LP_FIELD_VALUES);
$this->table_handler_field = Database::get_main_table(TABLE_MAIN_LP_FIELD);
$this->author_id = 'lp_id';
//$this->entityName = 'ChamiloLMS\Entity\QuestionFieldValues';
break;
default:
//unmanaged datatype, return false to let the caller know it
// didn't work
return false;
}
$this->columns[] = $this->handler_id;
$this->columns[] = $this->author_id;
$extraField = new ExtraField($this->type);
$this->extraField = $extraField;
$this->table = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$this->table_handler_field = Database::get_main_table(TABLE_EXTRA_FIELD);
}
/**
* @return ExtraField
*/
public function getExtraField()
{
return $this->extraField;
}
/**
@ -82,26 +58,29 @@ class ExtraFieldValue extends Model
*/
public function get_count()
{
$row = Database::select('count(*) as count', $this->table, array(), 'first');
/*$row = Database::select('count(*) as count', $this->table, array(), 'first');
return $row['count'];*/
return $row['count'];
$query = Database::getManager()->getRepository('ChamiloCoreBundle:ExtraFieldValues')->createQueryBuilder('e');
$query->select('count(e.id)');
$query->where('e.extraFieldType = :type');
$query->setParameter('type', $this->getExtraField()->getExtraFieldType());
return $query->getQuery()->getScalarResult();
}
/**
* Saves a series of records given as parameter into the corresponding table
* @param array $params array for the insertion into the *_field_values table
* Save the extra fields values
* In order to save this function needs a item_id (user id, course id, etc)
* This function is used with $extraField->addElements()
* @param array $params array for the insertion into the *_field_values table
*
* @return mixed false on empty params, void otherwise
* @assert (array()) === false
*/
public function save_field_values($params)
public function saveFieldValues($params)
{
$extra_field = new ExtraField($this->type);
if (empty($params[$this->handler_id])) {
return false;
}
foreach ($params as $key => $value) {
$found = strpos($key, '__persist__');
if ($found) {
@ -112,58 +91,77 @@ class ExtraFieldValue extends Model
}
}
if (empty($params['item_id'])) {
return false;
}
$type = $this->getExtraField()->getExtraFieldType();
// Parse params.
foreach ($params as $key => $value) {
if (substr($key, 0, 6) == 'extra_' || substr($key, 0, 7) == '_extra_') {
if (substr($key, 0, 6) == 'extra_' ||
substr($key, 0, 7) == '_extra_'
) {
// An extra field.
$field_variable = substr($key, 6);
$extraFieldInfo = $this->getExtraField()->get_handler_field_info_by_field_variable($field_variable);
$extra_field_info = $extra_field->get_handler_field_info_by_field_variable($field_variable);
if ($extra_field_info) {
if ($extraFieldInfo) {
$commentVariable = 'extra_'.$field_variable.'_comment';
$comment = isset($params[$commentVariable]) ? $params[$commentVariable] : null;
switch ($extra_field_info['field_type']) {
switch ($extraFieldInfo['field_type']) {
case ExtraField::FIELD_TYPE_TAG:
$old = self::getAllValuesByItemAndField(
$params[$this->handler_id],
$extra_field_info['id']
);
if ($type == EntityExtraField::USER_FIELD_TYPE) {
$deleteItems = array();
if (!empty($old)) {
$oldIds = array();
foreach ($old as $oldItem) {
$oldIds[] = $oldItem['field_value'];
}
$deleteItems = array_diff($oldIds, $value);
}
UserManager::delete_user_tags(
$params['item_id'],
$extraFieldInfo['id']
);
foreach ($value as $optionId) {
$newParams = array(
$this->handler_id => $params[$this->handler_id],
'field_id' => $extra_field_info['id'],
'field_value' => $optionId,
'comment' => $comment
UserManager::process_tags(
$value,
$params['item_id'],
$extraFieldInfo['id']
);
self::save($newParams);
}
} else {
/* $old = self::getAllValuesByItemAndField(
$params['item_id'],
$extraFieldInfo['id']
);
$deleteItems = array();
if (!empty($old)) {
$oldIds = array();
foreach ($old as $oldItem) {
$oldIds[] = $oldItem['value'];
}
$deleteItems = array_diff($oldIds, $value);
}
if (!empty($deleteItems)) {
foreach ($deleteItems as $deleteFieldValue) {
self::deleteValuesByHandlerAndFieldAndValue(
$params[$this->handler_id],
$extra_field_info['id'],
$deleteFieldValue
foreach ($value as $optionId) {
$newParams = array(
'item_id' => $params['item_id'],
'field_id' => $extraFieldInfo['id'],
'value' => $optionId,
'comment' => $comment
);
self::save($newParams);
}
if (!empty($deleteItems)) {
foreach ($deleteItems as $deleteFieldValue) {
self::deleteValuesByHandlerAndFieldAndValue(
$params['item_id'],
$extraFieldInfo['id'],
$deleteFieldValue
);
}
}*/
}
break;
case ExtraField::FIELD_TYPE_FILE_IMAGE:
$dirPermissions = api_get_permissions_for_new_directories();
switch ($this->type) {
case 'course':
$fileDir = api_get_path(SYS_UPLOAD_PATH)."courses/";
@ -172,11 +170,11 @@ class ExtraFieldValue extends Model
$fileDir = api_get_path(SYS_UPLOAD_PATH)."sessions/";
break;
case 'user':
$fileDir = UserManager::getUserPathById($this->handler_id, 'system');
$fileDir = UserManager::getUserPathById($params['item_id'], 'system');
break;
}
$fileName = ExtraField::FIELD_TYPE_FILE_IMAGE . "_{$params[$this->handler_id]}.png";
$fileName = ExtraField::FIELD_TYPE_FILE_IMAGE . "_{$params['item_id']}.png";
if (!file_exists($fileDir)) {
mkdir($fileDir, $dirPermissions, true);
@ -186,17 +184,14 @@ class ExtraFieldValue extends Model
$imageExtraField = new Image($value['tmp_name']);
$imageExtraField->send_image($fileDir . $fileName, -1, 'png');
$new_params = array(
$this->handler_id => $params[$this->handler_id],
'field_id' => $extra_field_info['id'],
'field_value' => $fileDir . $fileName
$newParams = array(
'item_id' => $params['item_id'],
'field_id' => $extraFieldInfo['id'],
'value' => $fileDir . $fileName,
'comment' => $comment
);
if ($this->type !== 'session' && $this->type !== 'course') {
$new_params['comment'] = $comment;
}
self::save($new_params);
self::save($newParams);
}
break;
case ExtraField::FIELD_TYPE_FILE:
@ -210,12 +205,12 @@ class ExtraFieldValue extends Model
$fileDir = api_get_path(SYS_UPLOAD_PATH)."sessions/";
break;
case 'user':
$fileDir = UserManager::getUserPathById($this->handler_id, 'system');
$fileDir = UserManager::getUserPathById($params['item_id'], 'system');
break;
}
$cleanedName = api_replace_dangerous_char($value['name']);
$fileName = ExtraField::FIELD_TYPE_FILE . "_{$params[$this->handler_id]}_$cleanedName";
$fileName = ExtraField::FIELD_TYPE_FILE . "_{$params['item_id']}_$cleanedName";
if (!file_exists($fileDir)) {
mkdir($fileDir, $dirPermissions, true);
@ -225,9 +220,9 @@ class ExtraFieldValue extends Model
moveUploadedFile($value, $fileDir . $fileName);
$new_params = array(
$this->handler_id => $params[$this->handler_id],
'field_id' => $extra_field_info['id'],
'field_value' => $fileDir . $fileName
'item_id' => $params['item_id'],
'field_id' => $extraFieldInfo['id'],
'value' => $fileDir . $fileName
);
if ($this->type !== 'session' && $this->type !== 'course') {
@ -237,20 +232,15 @@ class ExtraFieldValue extends Model
self::save($new_params);
}
break;
default;
$new_params = array(
$this->handler_id => $params[$this->handler_id],
'field_id' => $extra_field_info['id'],
'field_value' => $value
default:
$newParams = array(
'item_id' => $params['item_id'],
'field_id' => $extraFieldInfo['id'],
'value' => $value,
'comment' => $comment
);
if ($this->handler_id !== 'session_id' &&
$this->handler_id !== 'course_code'
) {
$new_params['comment'] = $comment;
}
self::save($new_params);
self::save($newParams);
}
}
}
@ -266,10 +256,10 @@ class ExtraFieldValue extends Model
*/
public function save($params, $show_query = false)
{
$extra_field = new ExtraField($this->type);
$extra_field = $this->getExtraField();
// Setting value to insert.
$value = $params['field_value'];
$value = $params['value'];
$value_to_insert = null;
if (is_array($value)) {
@ -278,15 +268,24 @@ class ExtraFieldValue extends Model
$value_to_insert = Database::escape_string($value);
}
$params['field_value'] = $value_to_insert;
$params['value'] = $value_to_insert;
//If field id exists
$extra_field_info = $extra_field->get($params['field_id']);
// If field id exists
if (isset($params['field_id'])) {
$extraFieldInfo = $extra_field->get($params['field_id']);
} else {
// Try the variable
$extraFieldInfo = $extra_field->get_handler_field_info_by_field_variable(
$params['variable']
);
$params['field_id'] = $extraFieldInfo['id'];
}
if ($extra_field_info) {
switch ($extra_field_info['field_type']) {
if ($extraFieldInfo) {
switch ($extraFieldInfo['field_type']) {
case ExtraField::FIELD_TYPE_RADIO:
case ExtraField::FIELD_TYPE_SELECT:
break;
case ExtraField::FIELD_TYPE_SELECT_MULTIPLE:
//$field_options = $session_field_option->get_field_options_by_field($params['field_id']);
//$params['field_value'] = split(';', $value_to_insert);
@ -311,10 +310,10 @@ class ExtraFieldValue extends Model
break;
case ExtraField::FIELD_TYPE_DOUBLE_SELECT:
if (is_array($value)) {
if (isset($value['extra_'.$extra_field_info['field_variable']]) &&
isset($value['extra_'.$extra_field_info['field_variable'].'_second'])
if (isset($value['extra_'.$extraFieldInfo['variable']]) &&
isset($value['extra_'.$extraFieldInfo['variable'].'_second'])
) {
$value_to_insert = $value['extra_'.$extra_field_info['field_variable']].'::'.$value['extra_'.$extra_field_info['field_variable'].'_second'];
$value_to_insert = $value['extra_'.$extraFieldInfo['variable']].'::'.$value['extra_'.$extraFieldInfo['variable'].'_second'];
} else {
$value_to_insert = null;
}
@ -324,30 +323,26 @@ class ExtraFieldValue extends Model
break;
}
if ($extra_field_info['field_type'] == ExtraField::FIELD_TYPE_TAG) {
if ($extraFieldInfo['field_type'] == ExtraField::FIELD_TYPE_TAG) {
$field_values = self::getAllValuesByItemAndFieldAndValue(
$params[$this->handler_id],
$params['item_id'],
$params['field_id'],
$value
);
} else {
$field_values = self::get_values_by_handler_and_field_id(
$params[$this->handler_id],
$params['item_id'],
$params['field_id']
);
}
$params['field_value'] = $value_to_insert;
$params['tms'] = api_get_utc_datetime();
if ($this->handler_id !== 'session_id' && $this->handler_id !== 'course_code') {
$params[$this->author_id] = api_get_user_id();
}
$params['value'] = $value_to_insert;
$params['author_id'] = api_get_user_id();
// Insert
if (empty($field_values)) {
/* Enable this when field_loggeable is introduced as a table field (2.0)
if ($extra_field_info['field_loggeable'] == 1) {
if ($extraFieldInfo['field_loggeable'] == 1) {
*/
if (false) {
global $app;
@ -374,9 +369,9 @@ class ExtraFieldValue extends Model
break;
}
if (isset($extraFieldValue)) {
if (!empty($params['field_value'])) {
if (!empty($params['value'])) {
$extraFieldValue->setComment($params['comment']);
$extraFieldValue->setFieldValue($params['field_value']);
$extraFieldValue->setFieldValue($params['value']);
$extraFieldValue->setFieldId($params['field_id']);
$extraFieldValue->setTms(api_get_utc_datetime(null, false, true));
$app['orm.ems']['db_write']->persist($extraFieldValue);
@ -384,21 +379,21 @@ class ExtraFieldValue extends Model
}
}
} else {
if ($extra_field_info['field_type'] == ExtraField::FIELD_TYPE_TAG) {
if ($extraFieldInfo['field_type'] == ExtraField::FIELD_TYPE_TAG) {
$option = new ExtraFieldOption($this->type);
$optionExists = $option->get($params['field_value']);
$optionExists = $option->get($params['value']);
if (empty($optionExists)) {
$optionParams = array(
'field_id' => $params['field_id'],
'option_value' => $params['field_value']
'option_value' => $params['value']
);
$optionId = $option->saveOptions($optionParams);
} else {
$optionId = $optionExists['id'];
}
$params['field_value'] = $optionId;
$params['value'] = $optionId;
if ($optionId) {
return parent::save($params, $show_query);
}
@ -409,7 +404,7 @@ class ExtraFieldValue extends Model
} else {
// Update
/* Enable this when field_loggeable is introduced as a table field (2.0)
if ($extra_field_info['field_loggeable'] == 1) {
if ($extraFieldInfo['field_loggeable'] == 1) {
*/
if (false) {
global $app;
@ -437,20 +432,20 @@ class ExtraFieldValue extends Model
}
if (isset($extraFieldValue)) {
if (!empty($params['field_value'])) {
if (!empty($params['value'])) {
/*
* If the field value is similar to the previous value then the comment will be the same
in order to no save in the log an empty record
*/
if ($extraFieldValue->getFieldValue() == $params['field_value']) {
if ($extraFieldValue->getFieldValue() == $params['value']) {
if (empty($params['comment'])) {
$params['comment'] = $extraFieldValue->getComment();
}
}
$extraFieldValue->setComment($params['comment']);
$extraFieldValue->setFieldValue($params['field_value']);
$extraFieldValue->setFieldValue($params['value']);
$extraFieldValue->setFieldId($params['field_id']);
$extraFieldValue->setTms(api_get_utc_datetime(null, false, true));
$app['orm.ems']['db_write']->persist($extraFieldValue);
@ -481,39 +476,43 @@ class ExtraFieldValue extends Model
$sql = "SELECT s.*, field_type FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf ON (s.field_id = sf.id)
WHERE {$this->handler_id} = '$item_id' AND
field_id = '".$field_id."'
WHERE
item_id = '$item_id' AND
field_id = '".$field_id."' AND
sf.extra_field_type = ".$this->getExtraField()->getExtraFieldType()."
ORDER BY id";
$result = Database::query($sql);
if (Database::num_rows($result)) {
$result = Database::fetch_array($result, 'ASSOC');
if ($transform) {
if (!empty($result['field_value'])) {
if (!empty($result['value'])) {
switch ($result['field_type']) {
case ExtraField::FIELD_TYPE_DOUBLE_SELECT:
$field_option = new ExtraFieldOption($this->type);
$options = explode('::', $result['field_value']);
$options = explode('::', $result['value']);
// only available for PHP 5.4 :( $result['field_value'] = $field_option->get($options[0])['id'].' -> ';
$result = $field_option->get($options[0]);
$result_second = $field_option->get($options[1]);
if (!empty($result)) {
$result['field_value'] = $result['option_display_text'].' -> ';
$result['field_value'] .= $result_second['option_display_text'];
$result['value'] = $result['display_text'].' -> ';
$result['value'] .= $result_second['display_text'];
}
break;
case ExtraField::FIELD_TYPE_SELECT:
$field_option = new ExtraFieldOption($this->type);
$extra_field_option_result = $field_option->get_field_option_by_field_and_option(
$result['field_id'],
$result['field_value']
$result['value']
);
if (isset($extra_field_option_result[0])) {
$result['field_value'] = $extra_field_option_result[0]['option_display_text'];
$result['value'] = $extra_field_option_result[0]['display_text'];
}
break;
}
}
}
return $result;
} else {
return false;
@ -522,22 +521,27 @@ class ExtraFieldValue extends Model
/**
* @param string $tag
* @param int $field_id
* @param int $limit
* @param int $field_id
* @param int $limit
*
* @return array
*/
public function searchValuesByField($tag, $field_id, $limit = 10)
{
$field_id = intval($field_id);
$limit = intval($limit);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$tag = Database::escape_string($tag);
$sql = "SELECT DISTINCT s.field_value, s.field_id
$sql = "SELECT DISTINCT s.value, s.field_id
FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf ON (s.field_id = sf.id)
INNER JOIN {$this->table_handler_field} sf
ON (s.field_id = sf.id)
WHERE
field_id = '".$field_id."' AND
field_value LIKE '%$tag%'
ORDER BY field_value
value LIKE '%$tag%' AND
sf.extra_field_type = ".$extraFieldType."
ORDER BY value
LIMIT 0, $limit
";
$result = Database::query($sql);
@ -545,6 +549,7 @@ class ExtraFieldValue extends Model
if (Database::num_rows($result)) {
$values = Database::store_result($result, 'ASSOC');
}
return $values;
}
@ -554,35 +559,49 @@ class ExtraFieldValue extends Model
* @param int $item_id Item ID from the original table
* @param string $field_variable The name of the field we are looking for
* @param bool $transform
* @param bool $allVisibility
*
* @return mixed Array of results, or false on error or not found
* @assert (-1,'') === false
*/
public function get_values_by_handler_and_field_variable($item_id, $field_variable, $transform = false)
{
public function get_values_by_handler_and_field_variable(
$item_id,
$field_variable,
$transform = false,
$filterByVisibility = false,
$visibility = 0
) {
$item_id = intval($item_id);
$field_variable = Database::escape_string($field_variable);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$sql = "SELECT s.*, field_type FROM {$this->table} s
$sql = "SELECT s.*, field_type
FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf
ON (s.field_id = sf.id)
WHERE
{$this->handler_id} = '$item_id' AND
field_variable = '".$field_variable."'
ORDER BY id";
item_id = '$item_id' AND
variable = '".$field_variable."' AND
sf.extra_field_type = $extraFieldType
";
if ($filterByVisibility) {
$visibility = intval($visibility);
$sql .= " AND visible = $visibility ";
}
$sql .= " ORDER BY id";
$result = Database::query($sql);
if (Database::num_rows($result)) {
$result = Database::fetch_array($result, 'ASSOC');
if ($transform) {
if ($result['field_type'] == ExtraField::FIELD_TYPE_DOUBLE_SELECT) {
if (!empty($result['field_value'])) {
if (!empty($result['value'])) {
$field_option = new ExtraFieldOption($this->type);
$options = explode('::', $result['field_value']);
// only available for PHP 5.4 :( $result['field_value'] = $field_option->get($options[0])['id'].' -> ';
$options = explode('::', $result['value']);
$result = $field_option->get($options[0]);
$result_second = $field_option->get($options[1]);
if (!empty($result)) {
$result['field_value'] = $result['option_display_text'].' -> ';
$result['field_value'] .= $result_second['option_display_text'];
$result['value'] = $result['display_text'].' -> ';
$result['value'] .= $result_second['display_text'];
}
}
}
@ -611,14 +630,16 @@ class ExtraFieldValue extends Model
) {
$field_value = Database::escape_string($field_value);
$field_variable = Database::escape_string($field_variable);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$sql = "SELECT {$this->handler_id} FROM {$this->table} s
$sql = "SELECT item_id FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf
ON (s.field_id = sf.id)
WHERE
field_value = '$field_value' AND
field_variable = '".$field_variable."'
ORDER BY {$this->handler_id}
value = '$field_value' AND
variable = '".$field_variable."' AND
sf.extra_field_type = $extraFieldType
ORDER BY item_id
";
if ($last) {
@ -638,26 +659,30 @@ class ExtraFieldValue extends Model
}
/**
* Get all values for a specific field id
* @param int $field_id
* @return mixed Array of values on success, false on failure or not found
* @assert (-1) === false
* @param $fieldId
* @return array|bool
*/
public function get_values_by_field_id($field_id)
public function getValuesByFieldId($fieldId)
{
$field_id = intval($field_id);
$sql = "SELECT s.*, field_type FROM {$this->table} s
$fieldId = intval($fieldId);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$sql = "SELECT s.* FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf
ON (s.field_id = sf.id)
WHERE field_id = '".$field_id."' ORDER BY id";
WHERE
field_id = '".$fieldId."' AND
sf.extra_field_type = $extraFieldType
ORDER BY s.value";
$result = Database::query($sql);
if (Database::num_rows($result)) {
return Database::store_result($result, 'ASSOC');
}
return false;
}
/**
/**
* @param int $itemId
* @param int $fieldId
* @return array
@ -666,14 +691,44 @@ class ExtraFieldValue extends Model
{
$fieldId = intval($fieldId);
$itemId = intval($itemId);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$sql = "SELECT s.* FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf
ON (s.field_id = sf.id)
WHERE
field_id = '".$fieldId."' AND
{$this->handler_id} = '$itemId'
ORDER BY field_value";
item_id = '$itemId' AND
sf.extra_field_type = $extraFieldType
ORDER BY s.value";
$result = Database::query($sql);
if (Database::num_rows($result)) {
return Database::store_result($result, 'ASSOC');
}
return false;
}
/**
* @param int $itemId
*
* @return array
*/
public function getAllValuesByItem($itemId)
{
$itemId = intval($itemId);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$sql = "SELECT s.value, sf.variable FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf
ON (s.field_id = sf.id)
WHERE
item_id = '$itemId' AND
sf.extra_field_type = $extraFieldType
ORDER BY s.value";
$result = Database::query($sql);
if (Database::num_rows($result)) {
return Database::store_result($result, 'ASSOC');
}
@ -690,15 +745,18 @@ class ExtraFieldValue extends Model
{
$fieldId = intval($fieldId);
$itemId = intval($itemId);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$fieldValue = Database::escape_string($fieldValue);
$sql = "SELECT s.* FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf
ON (s.field_id = sf.id)
WHERE
field_id = '".$fieldId."' AND
{$this->handler_id} = '$itemId' AND
field_value = $fieldValue
ORDER BY field_value";
field_id = '$fieldId' AND
item_id = '$itemId' AND
value = '$fieldValue' AND
sf.extra_field_type = $extraFieldType
ORDER BY value";
$result = Database::query($sql);
if (Database::num_rows($result)) {
@ -716,7 +774,9 @@ class ExtraFieldValue extends Model
public function delete_all_values_by_field_id($field_id)
{
$field_id = intval($field_id);
$sql = "DELETE FROM {$this->table} WHERE field_id = $field_id";
$sql = "DELETE FROM {$this->table}
WHERE
field_id = $field_id ";
Database::query($sql);
}
@ -731,8 +791,36 @@ class ExtraFieldValue extends Model
{
$field_id = intval($field_id);
$item_id = intval($item_id);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$sql = "DELETE FROM {$this->table}
WHERE {$this->handler_id} = '$item_id' AND field_id = '".$field_id."' ";
WHERE
item_id = '$item_id' AND
field_id = '".$field_id."' AND
extra_field_type = $extraFieldType
";
Database::query($sql);
}
/**
* Deletes all values from an item
* @param int $itemId (session id, course id, etc)
* @assert (-1,-1) == null
*/
public function deleteValuesByItem($itemId)
{
$itemId = intval($itemId);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$sql = "DELETE FROM {$this->table}
WHERE
item_id = '$itemId' AND
field_id IN (
SELECT id FROM {$this->table_handler_field}
WHERE extra_field_type = ".$extraFieldType."
)
";
Database::query($sql);
}
@ -746,12 +834,14 @@ class ExtraFieldValue extends Model
$itemId = intval($itemId);
$fieldId = intval($fieldId);
$fieldValue = Database::escape_string($fieldValue);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$sql = "DELETE FROM {$this->table}
WHERE
{$this->handler_id} = '$itemId' AND
item_id = '$itemId' AND
field_id = '".$fieldId."' AND
field_value = '$fieldValue'";
value = '$fieldValue'
";
Database::query($sql);
}
@ -759,9 +849,10 @@ class ExtraFieldValue extends Model
* Not yet implemented - Compares the field values of two items
* @param int $item_id Item 1
* @param int $item_to_compare Item 2
* @todo
* @return mixed Differential array generated from the comparison
*/
public function compare_item_values($item_id, $item_to_compare)
public function compareItemValues($item_id, $item_to_compare)
{
}
}

@ -115,7 +115,8 @@ class SessionManager
if (is_int($coach_username)) {
$id_coach = $coach_username;
} else {
$sql = 'SELECT user_id FROM ' . $tbl_user . ' WHERE username="' . Database::escape_string($coach_username) . '"';
$sql = 'SELECT user_id FROM ' . $tbl_user . '
WHERE username="' . Database::escape_string($coach_username) . '"';
$rs = Database::query($sql);
$id_coach = Database::result($rs, 0, 'user_id');
}
@ -213,7 +214,7 @@ class SessionManager
$extraFields['session_id'] = $session_id;
$sessionFieldValue = new ExtraFieldValue('session');
$sessionFieldValue->save_field_values($extraFields);
$sessionFieldValue->saveFieldValues($extraFields);
/*
Sends a message to the user_id = 1
@ -254,6 +255,7 @@ class SessionManager
$sql = "SELECT COUNT(*) as count FROM " . Database::get_main_table(TABLE_MAIN_SESSION) . "
WHERE name = '$name'";
$result = Database::fetch_array(Database::query($sql));
return $result['count'] > 0;
}
@ -285,7 +287,7 @@ class SessionManager
";
$extraJoin = " INNER JOIN $tbl_session_rel_user sru
ON sru.session_id = s.id ";
ON sru.session_id = s.id ";
}
$today = api_get_utc_datetime();
@ -397,9 +399,8 @@ class SessionManager
s.session_admin_id = $user_id OR
sru.user_id = '$user_id' AND
sru.relation_type = '" . SESSION_RELATION_TYPE_RRHH . "'
)
)
";
$extraJoin = " INNER JOIN $tbl_session_rel_user sru
ON sru.session_id = s.id ";
}
@ -488,11 +489,12 @@ class SessionManager
if ($access_url_id != -1) {
$query = " $select
FROM $tbl_session s
LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id
LEFT JOIN $tbl_user u ON s.id_coach = u.user_id
INNER JOIN $table_access_url_rel_session ar ON ar.session_id = s.id AND ar.access_url_id = $access_url_id
$courseCondition
$extraJoin
LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id
LEFT JOIN $tbl_user u ON s.id_coach = u.user_id
INNER JOIN $table_access_url_rel_session ar
ON ar.session_id = s.id AND ar.access_url_id = $access_url_id
$courseCondition
$extraJoin
$where $order $limit";
}
}
@ -508,7 +510,7 @@ class SessionManager
$session['coach_name'] = Display::url($session['coach_name'], "user_information.php?user_id=" . $session['user_id']);
if ($session['date_start'] == '0000-00-00' && $session['date_end'] == '0000-00-00') {
// $session['session_active'] = 1;
// $session['session_active'] = 1;
}
if ($session['session_active'] == 1) {
@ -538,6 +540,7 @@ class SessionManager
$formatted_sessions[] = $session;
}
}
return $formatted_sessions;
}
@ -736,12 +739,6 @@ class SessionManager
$order = " ORDER BY " . $options['order'];
}
/* $where_survey = '';
if (!empty($date_to) && !empty($date_from)) {
$where_survey = sprintf(" AND s.avail_from >= '%s'
AND s.avail_till <= '%s'", $date_from, $date_to);
} */
$sql = "SELECT u.user_id, u.lastname, u.firstname, u.username, u.email, s.c_id
FROM $session_course_user s
INNER JOIN $user u ON u.user_id = s.user_id
@ -837,17 +834,6 @@ class SessionManager
$table_stats_access = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ACCESS);
$course = api_get_course_info_by_id($courseId);
//getting all the students of the course
//we are not using this because it only returns user ids
/* if (empty($sessionId)
{
// Registered students in a course outside session.
$users = CourseManager :: get_student_list_from_course_code($course_code);
} else {
// Registered students in session.
$users = CourseManager :: get_student_list_from_course_code($course_code, true, $sessionId);
} */
$where = " WHERE c_id = '%s' AND s.status <> 2 ";
$limit = null;
@ -870,8 +856,8 @@ class SessionManager
$where .= ' AND session_id = %s';
$queryVariables[] = $sessionId;
$sql = "SELECT
u.user_id, u.lastname, u.firstname, u.username,
u.email, s.c_id, s.session_id
u.user_id, u.lastname, u.firstname, u.username,
u.email, s.c_id, s.session_id
FROM $session_course_user s
INNER JOIN $user u
ON u.user_id = s.user_id
@ -1005,7 +991,12 @@ class SessionManager
//Lessons
//TODO: Lessons done and left is calculated by progress per item in lesson, maybe we should calculate it only per completed lesson?
$lessons_progress = Tracking::get_avg_student_progress($user['user_id'], $course['code'], array(), $user['id_session']);
$lessons_progress = Tracking::get_avg_student_progress(
$user['user_id'],
$course['code'],
array(),
$user['id_session']
);
$lessons_done = ($lessons_progress * $lessons_total) / 100;
$lessons_left = $lessons_total - $lessons_done;
@ -1026,8 +1017,8 @@ class SessionManager
//Wiki
//total revisions per user
$sql = "SELECT count(*) as count
FROM $wiki
where c_id = %s and session_id = %s and user_id = %s";
FROM $wiki
WHERE c_id = %s and session_id = %s and user_id = %s";
$sql_query = sprintf($sql, $course['real_id'], $user['id_session'], $user['user_id']);
$result = Database::query($sql_query);
$row = Database::fetch_array($result);
@ -1136,10 +1127,14 @@ class SessionManager
return $table;
}
/**
* @return int
*/
public static function get_number_of_tracking_access_overview()
{
// database table definition
$track_e_course_access = Database :: get_main_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
return Database::count_rows($track_e_course_access);
}
@ -1230,7 +1225,6 @@ class SessionManager
u.lastname,
u.firstname,
") . "
a.logout_course_date,
a.counter,
c.title,
@ -1271,7 +1265,8 @@ class SessionManager
'clicks' => $info['counter'], //+ $clicks[$info['user_id']],
'ip' => '',
'timeLoggedIn' => gmdate("H:i:s", strtotime($info['logout_course_date']) - strtotime($info['login_course_date'])),
'session' => $session['name']);
'session' => $session['name']
);
}
foreach ($return as $key => $info) {
@ -1459,7 +1454,7 @@ class SessionManager
$extraFields['session_id'] = $id;
$sessionFieldValue = new ExtraFieldValue('session');
$sessionFieldValue->save_field_values($extraFields);
$sessionFieldValue->saveFieldValues($extraFields);
return $id;
}
@ -1480,7 +1475,6 @@ class SessionManager
$tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$tbl_url_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$t_sfv = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
$userId = api_get_user_id();
@ -1505,8 +1499,8 @@ class SessionManager
Database::query("DELETE FROM $tbl_url_session WHERE session_id IN($id_checked)");
Database::query("DELETE FROM $tbl_session WHERE id IN ($id_checked)");
$sql_delete_sfv = "DELETE FROM $t_sfv WHERE session_id = '$id_checked'";
Database::query($sql_delete_sfv);
$extraFieldValue = new ExtraFieldValue('session');
$extraFieldValue->deleteValuesByItem($id_checked);
// Add event to system log
Event::addEvent(
@ -2160,48 +2154,21 @@ class SessionManager
/**
* Creates a new extra field for a given session
* @param string Field's internal variable name
* @param int Field's type
* @param string Field's language var name
* @param string $variable Field's internal variable name
* @param int $fieldType Field's type
* @param string $displayText Field's language var name
* @return int new extra field id
*/
public static function create_session_extra_field($fieldvarname, $fieldtype, $fieldtitle)
public static function create_session_extra_field($variable, $fieldType, $displayText)
{
// database table definition
$t_sf = Database::get_main_table(TABLE_MAIN_SESSION_FIELD);
$fieldvarname = Database::escape_string($fieldvarname);
$fieldtitle = Database::escape_string($fieldtitle);
$fieldtype = (int) $fieldtype;
$time = time();
$sql_field = "SELECT id FROM $t_sf WHERE field_variable = '$fieldvarname'";
$res_field = Database::query($sql_field);
$r_field = Database::fetch_row($res_field);
if (Database::num_rows($res_field) > 0) {
$field_id = $r_field[0];
} else {
// save new fieldlabel into course_field table
$sql = "SELECT MAX(field_order) FROM $t_sf";
$res = Database::query($sql);
$order = 0;
if (Database::num_rows($res) > 0) {
$row = Database::fetch_row($res);
$order = $row[0] + 1;
}
$sql = "INSERT INTO $t_sf SET
field_type = '$fieldtype',
field_variable = '$fieldvarname',
field_display_text = '$fieldtitle',
field_order = '$order',
tms = FROM_UNIXTIME($time)";
Database::query($sql);
$field_id = Database::insert_id();
}
return $field_id;
$extraField = new ExtraField('session');
$params = [
'variable' => $variable,
'field_type' => $fieldType,
'display_text' => $displayText,
];
return $extraField->save($params);
}
/**
@ -2211,73 +2178,15 @@ class SessionManager
* @param string Field value
* @return boolean true if field updated, false otherwise
*/
public static function update_session_extra_field_value($session_id, $fname, $fvalue = '')
public static function update_session_extra_field_value($sessionId, $variable, $value = '')
{
$t_sf = Database::get_main_table(TABLE_MAIN_SESSION_FIELD);
$t_sfv = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
$fname = Database::escape_string($fname);
$session_id = (int) $session_id;
$fvalues = '';
if (is_array($fvalue)) {
foreach ($fvalue as $val) {
$fvalues .= Database::escape_string($val) . ';';
}
if (!empty($fvalues)) {
$fvalues = substr($fvalues, 0, -1);
}
} else {
$fvalues = Database::escape_string($fvalue);
}
$sqlsf = "SELECT * FROM $t_sf WHERE field_variable='$fname'";
$ressf = Database::query($sqlsf);
if (Database::num_rows($ressf) == 1) {
//ok, the field exists
// Check if enumerated field, if the option is available
$rowsf = Database::fetch_array($ressf);
$tms = time();
$sqlsfv = "SELECT * FROM $t_sfv
WHERE session_id = '$session_id' AND field_id = '" . $rowsf['id'] . "' ORDER BY id";
$ressfv = Database::query($sqlsfv);
$n = Database::num_rows($ressfv);
if ($n > 1) {
//problem, we already have to values for this field and user combination - keep last one
while ($rowsfv = Database::fetch_array($ressfv)) {
if ($n > 1) {
$sqld = "DELETE FROM $t_sfv WHERE id = " . $rowsfv['id'];
$resd = Database::query($sqld);
$n--;
}
$rowsfv = Database::fetch_array($ressfv);
if ($rowsfv['field_value'] != $fvalues) {
$sqlu = "UPDATE $t_sfv SET field_value = '$fvalues', tms = FROM_UNIXTIME($tms)
WHERE id = " . $rowsfv['id'];
$resu = Database::query($sqlu);
return($resu ? true : false);
}
return true;
}
} else if ($n == 1) {
//we need to update the current record
$rowsfv = Database::fetch_array($ressfv);
if ($rowsfv['field_value'] != $fvalues) {
$sqlu = "UPDATE $t_sfv SET field_value = '$fvalues', tms = FROM_UNIXTIME($tms)
WHERE id = " . $rowsfv['id'];
//error_log('UM::update_extra_field_value: '.$sqlu);
$resu = Database::query($sqlu);
return($resu ? true : false);
}
return true;
} else {
$sqli = "INSERT INTO $t_sfv (session_id,field_id,field_value,tms) " .
"VALUES ('$session_id'," . $rowsf['id'] . ",'$fvalues',FROM_UNIXTIME($tms))";
$resi = Database::query($sqli);
return $resi ? true : false;
}
} else {
return false; //field not found
}
$extraFieldValue = new ExtraFieldValue('session');
$params = [
'item_id' => $sessionId,
'variable' => $variable,
'value' => $value
];
$extraFieldValue->save($params);
}
/**
@ -3261,29 +3170,23 @@ class SessionManager
* Get the session id based on the original id and field name in the extra fields.
* Returns 0 if session was not found
*
* @param string $original_session_id_value Original session id
* @param string $original_session_id_name Original field name
* @param string $value Original session id
* @param string $variable Original field name
* @return int Session id
*/
public static function get_session_id_from_original_id($original_session_id_value, $original_session_id_name)
public static function getSessionIdFromOriginalId($value, $variable)
{
$t_sfv = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
$table_field = Database::get_main_table(TABLE_MAIN_SESSION_FIELD);
$original_session_id_value = Database::escape_string($original_session_id_value);
$original_session_id_name = Database::escape_string($original_session_id_name);
$extraFieldValue = new ExtraFieldValue('session');
$result = $extraFieldValue->get_item_id_from_field_variable_and_field_value(
$variable,
$value
);
$sql = "SELECT session_id
FROM $table_field sf INNER JOIN $t_sfv sfv ON sfv.field_id=sf.id
WHERE
field_variable='$original_session_id_name' AND
field_value='$original_session_id_value'";
$res_session = Database::query($sql);
$row = Database::fetch_object($res_session);
if ($row) {
return $row->session_id;
} else {
return 0;
if (!empty($result)) {
return $result['item_id'];
}
return 0;
}
/**
@ -3954,7 +3857,7 @@ class SessionManager
} else {
$sessionId = null;
if (isset($extraFields) && !empty($extraFields) && !empty($enreg['extra_'.$extraFieldId])) {
$sessionId = self::get_session_id_from_original_id($enreg['extra_'.$extraFieldId], $extraFieldId);
$sessionId = self::getSessionIdFromOriginalId($enreg['extra_'.$extraFieldId], $extraFieldId);
if (empty($sessionId)) {
$my_session_result = false;
} else {
@ -5666,7 +5569,8 @@ class SessionManager
* @param array $extraFields A list of fields to be scanned and returned
* @return mixed
*/
public static function getShortSessionListAndExtraByCategory($categoryId, $target, $extraFields = null) {
public static function getShortSessionListAndExtraByCategory($categoryId, $target, $extraFields = null)
{
// Init variables
$categoryId = (int) $categoryId;
$sessionList = array();
@ -5674,14 +5578,15 @@ class SessionManager
if ($categoryId > 0) {
$target = Database::escape_string($target);
$sTable = Database::get_main_table(TABLE_MAIN_SESSION);
$sfTable = Database::get_main_table(TABLE_MAIN_SESSION_FIELD);
$sfvTable = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
$sfTable = Database::get_main_table(TABLE_EXTRA_FIELD);
$sfvTable = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
// Join session field and session field values tables
$joinTable = $sfTable . ' sf INNER JOIN ' . $sfvTable . ' sfv ON sf.id = sfv.field_id';
$fieldsArray = array();
foreach ($extraFields as $field) {
$fieldsArray[] = Database::escape_string($field);
}
$extraFieldType = \Chamilo\CoreBundle\Entity\ExtraField::SESSION_FIELD_TYPE;
// Get the session list from session category and target
$sessionList = Database::select(
'id, name, date_start, date_end',
@ -5689,10 +5594,12 @@ class SessionManager
array(
'where' => array(
"session_category_id = ? AND id IN (
SELECT sfv.session_id FROM $joinTable WHERE
sfv.session_id = session.id
AND sf.field_variable = 'target'
AND sfv.field_value = ?
SELECT sfv.session_id FROM $joinTable
WHERE
sf.extra_field_type = $extraFieldType AND
sfv.item_id = session.id AND
sf.variable = 'target' AND
sfv.value = ?
)" => array($categoryId, $target)
)
)
@ -5707,18 +5614,18 @@ class SessionManager
for ($i = 1; $i < count($fieldsArray); $i++) {
$whereParams .= ', ?';
}
$whereFieldVariables = 'field_variable IN ( ' . $whereParams .' )';
$whereFieldVariables = ' variable IN ( ' . $whereParams .' )';
$whereFieldIds = 'field_id IN ( ' . $whereParams . ' )';
}
// Get session fields
$extraField = new ExtraField('session');
$questionMarks = substr(str_repeat('?, ', count($fieldsArray)), 0, -2);
$fieldsList = $extraField->get_all(array(
'field_variable IN ( ' . $questionMarks . ' )' => $fieldsArray
' variable IN ( ' . $questionMarks . ' )' => $fieldsArray
));
// Index session fields
foreach ($fieldsList as $field) {
$fields[$field['id']] = $field['field_variable'];
$fields[$field['id']] = $field['variable'];
}
// Get session field values
$extra = new ExtraFieldValue('session');
@ -5733,7 +5640,7 @@ class SessionManager
// Avoid overwriting the session's ID field
if ($fields[$sessionFieldValue['field_id']] != 'id') {
$var = $fields[$sessionFieldValue['field_id']];
$val = $sessionFieldValue['field_value'];
$val = $sessionFieldValue['value'];
// Assign session field value to session
$session[$var] = $val;
}
@ -5802,14 +5709,20 @@ class SessionManager
public static function getSessionListAndExtraByCategoryId($sessionCategoryId)
{
// Start error result
$errorResult = array('error' => true, 'errorMessage' => get_lang('ThereWasAnError'));
$errorResult = array(
'error' => true,
'errorMessage' => get_lang('ThereWasAnError'),
);
$sessionCategoryId = intval($sessionCategoryId);
// Check if sesssion category id is valid
if ($sessionCategoryId > 0) {
// Get table names
$sessionTable = Database::get_main_table(TABLE_MAIN_SESSION);
$sessionFieldTable = Database::get_main_table(TABLE_MAIN_SESSION_FIELD);
$sessionFieldValueTable = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
$sessionFieldTable = Database::get_main_table(TABLE_EXTRA_FIELD);
$sessionFieldValueTable = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$sessionCourseUserTable = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$userTable = Database::get_main_table(TABLE_MAIN_USER);
$courseTable = Database::get_main_table(TABLE_MAIN_COURSE);
@ -5824,24 +5737,37 @@ class SessionManager
)
)
);
$extraFieldType = \Chamilo\CoreBundle\Entity\ExtraField::SESSION_FIELD_TYPE;
// Check if session list query had result
if (!empty($sessionList)) {
// implode all session id
$sessionIdsString = '(' . implode(', ', array_keys($sessionList)) . ')';
// Get all field variables
$sessionFieldList = Database::select('id, field_variable', $sessionFieldTable);
// Get all field values
$sessionFieldValueList = Database::select(
'session_id, field_id, field_value',
$sessionFieldValueTable,
array('where' => array('session_id IN ?' => $sessionIdsString))
$sessionFieldList = Database::select(
'id, variable',
$sessionFieldTable,
array('extra_field_type = ? ' => array($extraFieldType))
);
// Get all field values
$sql = "SELECT item_id, field_id, value FROM
$sessionFieldValueTable v INNER JOIN $sessionFieldTable f
ON (f.id = v.field_id)
WHERE
item_id IN $sessionIdsString AND
extra_field_type = $extraFieldType
";
$result = Database::result($sql);
$sessionFieldValueList = Database::store_result($result, 'ASSOC');
// Check if session field values had result
if (!empty($sessionFieldValueList)) {
$sessionFieldValueListBySession = array();
foreach ($sessionFieldValueList as $key => $sessionFieldValue) {
// Create an array to index ids to session id
$sessionFieldValueListBySession[$sessionFieldValue['session_id']][] = $key;
$sessionFieldValueListBySession[$sessionFieldValue['item_id']][] = $key;
}
}
// Query used to find course-coaches from sessions
@ -5877,8 +5803,8 @@ class SessionManager
// If have an index array for session extra fields, use it to join arrays
foreach ($sessionFieldValueListBySession[$id] as $key) {
$row['extra'][$key] = array(
'field_name' => $sessionFieldList[$sessionFieldValueList[$key]['field_id']]['field_variable'],
'field_value' => $sessionFieldValueList[$key]['field_value'],
'field_name' => $sessionFieldList[$sessionFieldValueList[$key]['field_id']]['variable'],
'value' => $sessionFieldValueList[$key]['value'],
);
}
}
@ -5953,19 +5879,21 @@ class SessionManager
public static function searchSession($term, $extraFieldsToInclude = array())
{
$sTable = Database::get_main_table(TABLE_MAIN_SESSION);
$sfvTable = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
$extraFieldTable = Database::get_main_table(TABLE_EXTRA_FIELD);
$sfvTable = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$term = Database::escape_string($term);
$extraFieldType = \Chamilo\CoreBundle\Entity\ExtraField::SESSION_FIELD_TYPE;
if (is_array($extraFieldsToInclude) && count($extraFieldsToInclude) > 0) {
$resultData = Database::select('*', $sTable, array(
'where' => array(
"name LIKE %?% " => $term,
"OR description LIKE %?% " => $term,
"OR id IN (
SELECT session_id
FROM $sfvTable
WHERE field_value LIKE %?%
" OR description LIKE %?% " => $term,
" OR id IN (
SELECT item_id
FROM $sfvTable v INNER JOIN $extraFieldTable e
ON (v.field_id = e.id)
WHERE value LIKE %?% AND extra_field_type = $extraFieldType
) " => $term
)
));
@ -5987,6 +5915,11 @@ class SessionManager
return $resultData;
}
/**
* @param $sessionId
* @param array $extraFieldsToInclude
* @return array
*/
public static function getFilteredExtraFields($sessionId, $extraFieldsToInclude = array())
{
$extraData = array();
@ -6001,14 +5934,14 @@ class SessionManager
$sessionExtraField = new ExtraField('session');
$fieldList = $sessionExtraField->get_all(array(
"field_variable IN ( " . implode(", ", $variablePlaceHolders) . " ) " => $variables
"variable IN ( " . implode(", ", $variablePlaceHolders) . " ) " => $variables
));
$fields = array();
// Index session fields
foreach ($fieldList as $field) {
$fields[$field['id']] = $field['field_variable'];
$fields[$field['id']] = $field['variable'];
}
// Get session field values
@ -6021,7 +5954,7 @@ class SessionManager
foreach ($sessionFieldValueList as $sessionFieldValue) {
// Match session field values to session
if ($sessionFieldValue['session_id'] != $sessionId) {
if ($sessionFieldValue['item_id'] != $sessionId) {
continue;
}
@ -6031,7 +5964,7 @@ class SessionManager
}
$extrafieldVariable = $fields[$sessionFieldValue['field_id']];
$extrafieldValue = $sessionFieldValue['field_value'];
$extrafieldValue = $sessionFieldValue['value'];
$extraData[] = array(
'variable' => $extrafieldVariable,

@ -1,6 +1,7 @@
<?php
/* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Entity\ExtraField as EntityExtraField;
use CpChart\Classes\pCache as pCache;
use CpChart\Classes\pData as pData;
use CpChart\Classes\pImage as pImage;
@ -5920,16 +5921,21 @@ class TrackingCourseLog
{
// Database table definition
$table_user = Database::get_main_table(TABLE_MAIN_USER);
$table_user_field_values = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$sql = "SELECT user.user_id, field.field_value
FROM $table_user user, $table_user_field_values field
$table_user_field_values = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$extraFieldTable = Database::get_main_table(TABLE_EXTRA_FIELD);
$extraFieldType = EntityExtraField::USER_FIELD_TYPE;
$sql = "SELECT user.user_id, v.value
FROM $table_user user INNER JOIN $table_user_field_values v
ON (user.user_id = v.item_id
INNER JOIN $extraFieldTable f
ON (f.id = v.field_id)
WHERE
user.user_id = field.user_id AND
field.field_id='".intval($field_id)."'";
f.extra_field_type = $extraFieldType AND
v.field_id='".intval($field_id)."'";
$result = Database::query($sql);
while($row = Database::fetch_array($result)) {
$return[$row['user_id']][] = $row['field_value'];
$return[$row['item_id']][] = $row['value'];
}
return $return;
}
@ -5951,9 +5957,10 @@ class TrackingCourseLog
public static function get_addtional_profile_information_of_field_by_user($field_id, $users)
{
// Database table definition
$table_user = Database::get_main_table(TABLE_MAIN_USER);
$table_user_field_values = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$result_extra_field = UserManager::get_extra_field_information($field_id);
$table_user = Database::get_main_table(TABLE_MAIN_USER);
$table_user_field_values = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$extraField = Database::get_main_table(TABLE_EXTRA_FIELD);
$result_extra_field = UserManager::get_extra_field_information($field_id);
if (!empty($users)) {
if ($result_extra_field['field_type'] == UserManager::USER_FIELD_TYPE_TAG ) {
@ -5967,32 +5974,40 @@ class TrackingCourseLog
}
} else {
$new_user_array = array();
foreach($users as $user_id) {
foreach ($users as $user_id) {
$new_user_array[]= "'".$user_id."'";
}
$users = implode(',',$new_user_array);
//selecting only the necessary information NOT ALL the user list
$sql = "SELECT user.user_id, field.field_value
$extraFieldType = EntityExtraField::USER_FIELD_TYPE;
// Selecting only the necessary information NOT ALL the user list
$sql = "SELECT user.user_id, v.value
FROM $table_user user
INNER JOIN $table_user_field_values field
ON (user.user_id = field.user_id)
WHERE field.field_id=".intval($field_id)." AND user.user_id IN ($users)";
INNER JOIN $table_user_field_values v
ON (user.user_id = v.item_id)
INNER JOIN $extraField f
ON (f.id = v.field_id)
WHERE
f.extra_field_type = $extraFieldType AND
v.field_id=".intval($field_id)." AND
user.user_id IN ($users)";
$result = Database::query($sql);
while($row = Database::fetch_array($result)) {
// get option value for field type double select by id
if (!empty($row['field_value'])) {
if ($result_extra_field['field_type'] == USER_FIELD_TYPE_DOUBLE_SELECT) {
$id_double_select = explode(';',$row['field_value']);
if (!empty($row['value'])) {
if ($result_extra_field['field_type'] ==
ExtraField::FIELD_TYPE_DOUBLE_SELECT
) {
$id_double_select = explode(';', $row['value']);
if (is_array($id_double_select)) {
$value1 = $result_extra_field['options'][$id_double_select[0]]['option_value'];
$value2 = $result_extra_field['options'][$id_double_select[1]]['option_value'];
$row['field_value'] = ($value1.';'.$value2);
$row['value'] = ($value1.';'.$value2);
}
}
}
// get other value from extra field
$return[$row['user_id']][] = $row['field_value'];
$return[$row['user_id']][] = $row['value'];
}
}
}

File diff suppressed because it is too large Load Diff

@ -755,17 +755,17 @@ INSERT INTO extra_field (extra_field_type, field_type, variable, display_text, v
INSERT INTO extra_field (extra_field_type, field_type, variable, display_text, visible, changeable, default_value) VALUES (2, 1, 'special_course', 'Special course', 1 , 1, '');
INSERT INTO extra_field_options (field_id, option_value, option_display_text, option_order) VALUES (8, '1', 'AtOnce',1);
INSERT INTO extra_field_options (field_id, option_value, option_display_text, option_order) VALUES (8, '8', 'Daily',2);
INSERT INTO extra_field_options (field_id, option_value, option_display_text, option_order) VALUES (8, '0', 'No',3);
INSERT INTO extra_field_options (field_id, option_value, display_text, option_order) VALUES (8, '1', 'AtOnce',1);
INSERT INTO extra_field_options (field_id, option_value, display_text, option_order) VALUES (8, '8', 'Daily',2);
INSERT INTO extra_field_options (field_id, option_value, display_text, option_order) VALUES (8, '0', 'No',3);
INSERT INTO extra_field_options (field_id, option_value, option_display_text, option_order) VALUES (9, '1', 'AtOnce',1);
INSERT INTO extra_field_options (field_id, option_value, option_display_text, option_order) VALUES (9, '8', 'Daily',2);
INSERT INTO extra_field_options (field_id, option_value, option_display_text, option_order) VALUES (9, '0', 'No',3);
INSERT INTO extra_field_options (field_id, option_value, display_text, option_order) VALUES (9, '1', 'AtOnce',1);
INSERT INTO extra_field_options (field_id, option_value, display_text, option_order) VALUES (9, '8', 'Daily',2);
INSERT INTO extra_field_options (field_id, option_value, display_text, option_order) VALUES (9, '0', 'No',3);
INSERT INTO extra_field_options (field_id, option_value, option_display_text, option_order) VALUES (10, '1', 'AtOnce',1);
INSERT INTO extra_field_options (field_id, option_value, option_display_text, option_order) VALUES (10, '8', 'Daily',2);
INSERT INTO extra_field_options (field_id, option_value, option_display_text, option_order) VALUES (10, '0', 'No',3);
INSERT INTO extra_field_options (field_id, option_value, display_text, option_order) VALUES (10, '1', 'AtOnce',1);
INSERT INTO extra_field_options (field_id, option_value, display_text, option_order) VALUES (10, '8', 'Daily',2);
INSERT INTO extra_field_options (field_id, option_value, display_text, option_order) VALUES (10, '0', 'No',3);
INSERT INTO access_url(url, description, active, created_by) VALUES ('http://localhost/',' ',1,1);

@ -7,7 +7,7 @@
* @package chamilo.learnpath
* @author Yannick Warnier <ywarnier@beeznest.org>
*/
use \ChamiloSession as Session;
use ChamiloSession as Session;
// Flag to allow for anonymous user - needs to be set before global.inc.php.
$use_anonymous = true;
@ -908,7 +908,7 @@ switch ($action) {
$params = array(
'lp_id' => $_SESSION['oLP']->id
);
$extraFieldValue->save_field_values($_REQUEST);
$extraFieldValue->saveFieldValues($_REQUEST);
if ($_FILES['lp_preview_image']['size'] > 0)
$_SESSION['oLP']->upload_image($_FILES['lp_preview_image']);

@ -195,8 +195,6 @@ $form->addButtonSave(get_lang('SaveLPSettings'));
$form->addElement('hidden', 'action', 'update_lp');
$form->addElement('hidden', 'lp_id', $_SESSION['oLP']->get_id());
$htmlHeadXtra[] = '<script src="'.api_get_path(WEB_LIBRARY_PATH).'javascript/tag/jquery.fcbkcomplete.js" type="text/javascript" language="javascript"></script>';
$htmlHeadXtra[] = '<link href="'.api_get_path(WEB_LIBRARY_PATH).'javascript/tag/style.css" rel="stylesheet" type="text/css" />';
if ($enableLpExtraFields) {
$htmlHeadXtra[] = '<script>
$(function() {

@ -3,7 +3,7 @@
$reports_template['CourseArticulate'] = array(
'description' => 'CourseArticulate',
'getSQL' => 'reports_template_CourseArticulate_getSQL',
'wizard' =>
'wizard' =>
'
<span id="CourseArticulate" class="step">
<span class="font_normal_07em_black">This report does not need any particular settings</span><br />
@ -21,16 +21,16 @@ function reports_template_CourseArticulate_getSQL() {
$query .= ' where u.user_id in ('.reports_getVisibilitySQL().') ';
$query .= ' order by u.user_id ';
$queries[0] = $query;
$extraFieldType = \Chamilo\CoreBundle\Entity\ExtraField::USER_FIELD_TYPE;
// Custom Field
foreach (array("tags" => "tags") as $k => $v) { // FIXME
$query = 'select ufv.field_value as "'.$v.'" ';
$query = 'select ufv.value as "'.$v.'" ';
$query .= 'from '.Database::get_main_table(TABLE_MAIN_USER).' u ';
$query .= 'left join'.Database::get_main_table(TABLE_MAIN_USER_FIELD).' uf ';
$query .= ' on uf.field_variable="'.$k.'" ';
$query .= 'left outer join '.Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES).' ufv ';
$query .= ' on ufv.user_id = u.user_id and ufv.field_id = uf.id ';
$query .= 'where u.user_id in ('.reports_getVisibilitySQL().') ';
$query .= 'left join'.Database::get_main_table(TABLE_EXTRA_FIELD).' uf ';
$query .= ' on uf.variable ="'.$k.'" ';
$query .= 'left outer join '.Database::get_main_table(TABLE_EXTRA_FIELD_VALUES).' ufv ';
$query .= ' on ufv.item_id = u.user_id and ufv.field_id = uf.id ';
$query .= 'where ufv.extra_field_type = '.$extraFieldType.' AND u.user_id in ('.reports_getVisibilitySQL().') ';
$query .= ' order by u.user_id ';
$queries[] = $query;
}
@ -112,7 +112,7 @@ function reports_template_CourseArticulate_getSQL() {
$query .= ' group by u.user_id ';
$query .= ' order by u.user_id ';
$queries[] = $query;
}
}
return $queries;
}

@ -3,7 +3,7 @@
$reports_template['Generic'] = array(
'description' => 'Generic',
'getSQL' => 'reports_template_Generic_getSQL',
'wizard' =>
'wizard' =>
'
<span id="Generic" class="step">
<span class="font_normal_07em_black">This report does not need any particular settings</span><br />
@ -22,14 +22,12 @@ function reports_template_Generic_getSQL() {
$query .= ' order by u.user_id ';
$queries[0] = $query;
// Custom Field
foreach (array(10 => "description") as $k => $v) {
$query = 'select ufv.field_value as "'.$v.'" ';
foreach (array(10 => "description") as $k => $v) {
$query = 'select ufv.value as "'.$v.'" ';
$query .= 'from '.Database::get_main_table(TABLE_MAIN_USER).' u ';
$query .= 'left outer join '.Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES).' ufv ';
$query .= ' on ufv.user_id = u.user_id and ufv.field_id = '.$k;
$query .= 'left outer join '.Database::get_main_table(TABLE_EXTRA_FIELD_VALUES).' ufv ';
$query .= ' on ufv.item_id = u.user_id and ufv.field_id = '.$k;
$query .= ' where u.user_id in ('.reports_getVisibilitySQL().') ';
$query .= ' order by u.user_id ';
$queries[] = $query;
@ -46,7 +44,7 @@ function reports_template_Generic_getSQL() {
$query .= ' order by u.user_id ';
$queries[] = $query;
}
// premiere connexion
$query = 'select min(tel.login_date) as "First connection", max(tel.logout_date) as "Latest connection" ';
$query .= 'from '.Database::get_main_table(TABLE_MAIN_USER).' u ';

@ -88,14 +88,17 @@ if (!empty($_POST['social_wall_new_msg_main']) || !empty($_FILES['picture']['tmp
}
// It's me!
if (api_get_user_id() != $user_id) {
$user_info = UserManager::get_user_info_by_id($user_id);
$user_info = api_get_user_info($user_id);
$show_full_profile = false;
if (!$user_info) {
// user does no exist !!
api_not_allowed(true);
} else {
//checking the relationship between me and my friend
$my_status= SocialManager::get_relation_between_contacts(api_get_user_id(), $user_id);
$my_status = SocialManager::get_relation_between_contacts(
api_get_user_id(),
$user_id
);
if (in_array($my_status, array(
USER_RELATION_TYPE_PARENT,
USER_RELATION_TYPE_FRIEND,
@ -104,7 +107,10 @@ if (!empty($_POST['social_wall_new_msg_main']) || !empty($_FILES['picture']['tmp
$show_full_profile = true;
}
//checking the relationship between my friend and me
$my_friend_status = SocialManager::get_relation_between_contacts($user_id, api_get_user_id());
$my_friend_status = SocialManager::get_relation_between_contacts(
$user_id,
api_get_user_id()
);
if (in_array($my_friend_status, array(
USER_RELATION_TYPE_PARENT,
USER_RELATION_TYPE_FRIEND,
@ -117,14 +123,12 @@ if (!empty($_POST['social_wall_new_msg_main']) || !empty($_FILES['picture']['tmp
}
}
} else {
$user_info = UserManager::get_user_info_by_id($user_id);
$user_info = api_get_user_info($user_id);
}
} else {
$user_info = UserManager::get_user_info_by_id($user_id);
$user_info = api_get_user_info($user_id);
}
if ($user_info['user_id'] == api_get_user_id()) {
$isSelfUser = true;
} else {
@ -324,18 +328,14 @@ $socialAutoExtendLink = Display::url(
)
);
/* $socialRightInformation = SocialManager::social_wrapper_div($personal_info, 4); */
$socialRightInformation = null;
//$social_right_content .= SocialManager::social_wrapper_div($wallSocial, 5);
$social_right_content = null;
$show_full_profile = true;
if ($show_full_profile) {
// Block Extra information
$t_uf = Database :: get_main_table(TABLE_MAIN_USER_FIELD);
$t_ufo = Database :: get_main_table(TABLE_MAIN_USER_FIELD_OPTIONS);
$extra_user_data = UserManager::get_extra_user_data($user_id);
$t_ufo = Database :: get_main_table(TABLE_EXTRA_FIELD_OPTIONS);
$extra_user_data = UserManager::get_extra_user_data($user_id, false, true);
$extra_information = '';
if (is_array($extra_user_data) && count($extra_user_data)>0 ) {
@ -343,40 +343,51 @@ if ($show_full_profile) {
$extra_information .= '<div class="panel-heading">'.get_lang('ExtraInformation').'</div>';
$extra_information .='<div class="panel-body">';
$extra_information_value = '';
foreach($extra_user_data as $key=>$data) {
//Avoding parameters
if (in_array($key, array('mail_notify_invitation','mail_notify_message', 'mail_notify_group_message' ))) {
$extraField = new ExtraField('user');
foreach ($extra_user_data as $key => $data) {
// Avoiding parameters
if (in_array(
$key,
array(
'mail_notify_invitation',
'mail_notify_message',
'mail_notify_group_message',
)
)) {
continue;
}
// get display text, visibility and type from user_field table
$field_variable = str_replace('extra_','',$key);
$sql = "SELECT field_display_text,field_visible,field_type,id "
." FROM $t_uf WHERE field_variable ='$field_variable'";
$res_field = Database::query($sql);
$row_field = Database::fetch_row($res_field);
$field_display_text = $row_field[0];
$field_visible = $row_field[1];
$field_type = $row_field[2];
$field_id = $row_field[3];
if ($field_visible == 1) {
if (is_array($data)) {
$extra_information_value .= '<dt>'.ucfirst($field_display_text).'</dt>'
.'<dd> '.implode(',',$data).'</dd>';
} else {
if ($field_type == UserManager::USER_FIELD_TYPE_DOUBLE_SELECT) {
$id_options = explode(';',$data);
$extraFieldInfo = $extraField->get_handler_field_info_by_field_variable(
$field_variable
);
if ($extraFieldInfo['visible'] != 1) {
continue;
}
if (is_array($data)) {
$extra_information_value .= '<dt>'.ucfirst($extraFieldInfo['display_text']).'</dt>'
.'<dd> '.implode(',', $data).'</dd>';
} else {
switch ($extraFieldInfo['field_type']) {
case ExtraField::FIELD_TYPE_DOUBLE_SELECT:
$id_options = explode(';', $data);
$value_options = array();
// get option display text from user_field_options table
foreach ($id_options as $id_option) {
$sql = "SELECT option_display_text FROM $t_ufo WHERE id = '$id_option'";
$sql = "SELECT display_text FROM $t_ufo WHERE id = '$id_option'";
$res_options = Database::query($sql);
$row_options = Database::fetch_row($res_options);
$value_options[] = $row_options[0];
}
$extra_information_value .= '<dt>'.ucfirst($field_display_text).':</dt>'
.'<dd>'.implode(' ',$value_options).'</dd>';
} elseif ($field_type == UserManager::USER_FIELD_TYPE_TAG ) {
$user_tags = UserManager::get_user_tags($user_id, $field_id);
$extra_information_value .= '<dt>'.ucfirst($extraFieldInfo['display_text']).':</dt>'
.'<dd>'.implode(' ', $value_options).'</dd>';
break;
case ExtraField::FIELD_TYPE_TAG:
$user_tags = UserManager::get_user_tags($user_id, $extraFieldInfo['id']);
$tag_tmp = array();
foreach ($user_tags as $tags) {
$tag_tmp[] = '<a class="label label_tag"'
@ -385,10 +396,11 @@ if ($show_full_profile) {
.'</a>';
}
if (is_array($user_tags) && count($user_tags)>0) {
$extra_information_value .= '<dt>'.ucfirst($field_display_text).':</dt>'
$extra_information_value .= '<dt>'.ucfirst($extraFieldInfo['display_text']).':</dt>'
.'<dd>'.implode('', $tag_tmp).'</dd>';
}
} elseif ($field_type == UserManager::USER_FIELD_TYPE_SOCIAL_PROFILE) {
break;
case ExtraField::FIELD_TYPE_SOCIAL_PROFILE:
$icon_path = UserManager::get_favicon_from_url($data);
$bottom = '0.2';
//quick hack for hi5
@ -399,16 +411,18 @@ if ($show_full_profile) {
$data = '<a href="'.$data.'">'
.'<img src="'.$icon_path.'" alt="icon"'
.' style="margin-right:0.5em;margin-bottom:'.$bottom.'em;" />'
.$field_display_text
.$extraFieldInfo['display_text']
.'</a>';
$extra_information_value .= '<dd>'.$data.'</dd>';
} else {
break;
default:
if (!empty($data)) {
$extra_information_value .= '<dt>'.ucfirst($field_display_text).':</dt><dd>'.$data.'</dd>';
$extra_information_value .= '<dt>'.ucfirst($extraFieldInfo['display_text']).':</dt><dd>'.$data.'</dd>';
}
}
break;
}
}
}
// if there are information to show
if (!empty($extra_information_value)) {

@ -73,16 +73,9 @@ if ($surveyCode != "") {
// If is anonymous and it is allowed to take the survey as anonymous, mark survey as anonymous.
}
// Header
Display :: display_header(get_lang('ToolSurvey'));
// First we check if the needed parameters are present
if ((!isset($_GET['course']) || !isset($_GET['invitationcode'])) && !isset($_GET['user_id'])) {
echo '<div class="survey-block';
Display :: display_error_message(get_lang('SurveyParametersMissingUseCopyPaste'), false);
echo '</div>';
Display :: display_footer();
exit;
api_not_allowed(true, get_lang('SurveyParametersMissingUseCopyPaste'));
}
$invitationcode = $_GET['invitationcode'];
@ -133,9 +126,7 @@ $sql = "SELECT * FROM $table_survey_invitation
invitation_code = '".Database :: escape_string($invitationcode)."'";
$result = Database::query($sql);
if (Database::num_rows($result) < 1) {
Display :: display_error_message(get_lang('WrongInvitationCode'), false);
Display :: display_footer();
exit;
api_not_allowed(true, get_lang('WrongInvitationCode'));
}
$survey_invitation = Database::fetch_array($result, 'ASSOC');
@ -145,11 +136,7 @@ if ( !isset($_POST['finish_survey']) &&
($isAnonymous && isset($_SESSION['surveyuser'])) ||
($survey_invitation['answered'] == 1 && !isset($_GET['user_id']))
) {
echo '<div class="survey-block">';
Display :: display_error_message(get_lang('YouAlreadyFilledThisSurvey'), false);
echo '</div>';
Display :: display_footer();
exit;
api_not_allowed(true, get_lang('YouAlreadyFilledThisSurvey'));
}
// Checking if there is another survey with this code.
@ -160,10 +147,15 @@ $sql = "SELECT * FROM $table_survey
code='".Database::escape_string($survey_invitation['survey_code'])."'";
$result = Database::query($sql);
if (Database::num_rows($result) > 1) {
if ($_POST['language']) {
$survey_invitation['survey_id'] = $_POST['language'];
} else {
// Header
Display :: display_header(get_lang('ToolSurvey'));
echo '<form id="language" name="language" method="POST" action="'.api_get_self().'?course='.Security::remove_XSS($_GET['course']).'&invitationcode='.Security::remove_XSS($_GET['invitationcode']).'&cidReq='.Security::remove_XSS($_GET['cidReq']).'">';
echo '<select name="language">';
while ($row = Database::fetch_array($result, 'ASSOC')) {
@ -335,34 +327,6 @@ if (count($_POST) > 0) {
}
}
// Displaying the survey title and subtitle (appears on every page)
echo '<div class="survey-block">';
echo '<div id="survey_title">';
echo Display::return_icon(
'statistics.png',
get_lang('CreateNewSurvey'),
array('style'=>'display:inline-block; margin-right:5px;'),
ICON_SIZE_SMALL
);
echo strip_tags($survey_data['survey_title']).'</div>';
echo '<div id="survey_subtitle">'.strip_tags($survey_data['survey_subtitle']).'</div>';
// Checking time availability
check_time_availability($survey_data);
// Displaying the survey introduction
if (!isset($_GET['show'])) {
// The first thing we do is delete the session
unset($_SESSION['paged_questions']);
unset($_SESSION['page_questions_sec']);
$paged_questions_sec = array();
if (!empty($survey_data['survey_introduction'])) {
echo '<div id="survey_content" class="survey_content">'.$survey_data['survey_introduction'].'</div>';
}
$limit = 0;
}
$user_id = api_get_user_id();
if ($user_id == 0) {
@ -370,12 +334,14 @@ if ($user_id == 0) {
}
$user_data = api_get_user_info($user_id);
if ($survey_data['form_fields'] != '' && $survey_data['anonymous'] == 0 && is_array($user_data)) {
if ($survey_data['form_fields'] != '' &&
$survey_data['anonymous'] == 0 && is_array($user_data)
) {
$form_fields = explode('@', $survey_data['form_fields']);
$list = array();
foreach ($form_fields as $field) {
$field_value = explode(':', $field);
if ($field_value[1] == 1) {
if (isset($field_value[1]) && $field_value[1] == 1) {
if ($field_value[0] != '') {
$val = api_substr($field_value[0], 8, api_strlen($field_value[0]));
$list[$val] = 1;
@ -387,13 +353,11 @@ if ($survey_data['form_fields'] != '' && $survey_data['anonymous'] == 0 && is_ar
$form = new FormValidator(
'profile',
'post',
api_get_self()."?".str_replace('&show_form=1', '&show_form=1', $_SERVER['QUERY_STRING']),
null,
array('style' => 'width: 75%; float: '.($text_dir == 'rtl' ? 'right;' : 'left;'))
api_get_self()."?".str_replace('&show_form=1', '&show_form=1', $_SERVER['QUERY_STRING'])
);
if (api_is_western_name_order()) {
if ($list['firstname'] == 1) {
if (isset($list['firstname']) && $list['firstname'] == 1) {
//FIRST NAME
$form->addElement('text', 'firstname', get_lang('FirstName'), array('size' => 40));
if (api_get_setting('profile', 'name') !== 'true') {
@ -403,7 +367,7 @@ if ($survey_data['form_fields'] != '' && $survey_data['anonymous'] == 0 && is_ar
$form->applyFilter(array('firstname'), 'trim');
$form->addRule('firstname', get_lang('ThisFieldIsRequired'), 'required');
}
if ($list['lastname'] == 1) {
if (isset($list['lastname']) && $list['lastname'] == 1) {
// LAST NAME
$form->addElement('text', 'lastname', get_lang('LastName'), array('size' => 40));
if (api_get_setting('profile', 'name') !== 'true') {
@ -414,7 +378,7 @@ if ($survey_data['form_fields'] != '' && $survey_data['anonymous'] == 0 && is_ar
$form->addRule('lastname', get_lang('ThisFieldIsRequired'), 'required');
}
} else {
if ($list['lastname'] == 1) {
if (isset($list['lastname']) && $list['lastname'] == 1) {
// LAST NAME
$form->addElement('text', 'lastname', get_lang('LastName'), array('size' => 40));
if (api_get_setting('profile', 'name') !== 'true') {
@ -424,7 +388,7 @@ if ($survey_data['form_fields'] != '' && $survey_data['anonymous'] == 0 && is_ar
$form->applyFilter(array('lastname'), 'trim');
$form->addRule('lastname', get_lang('ThisFieldIsRequired'), 'required');
}
if ($list['firstname'] == 1) {
if (isset($list['firstname']) && $list['firstname'] == 1) {
//FIRST NAME
$form->addElement('text', 'firstname', get_lang('FirstName'), array('size' => 40));
if (api_get_setting('profile', 'name') !== 'true') {
@ -436,7 +400,7 @@ if ($survey_data['form_fields'] != '' && $survey_data['anonymous'] == 0 && is_ar
}
}
if ($list['official_code'] == 1) {
if (isset($list['official_code']) && $list['official_code'] == 1) {
// OFFICIAL CODE
if (CONFVAL_ASK_FOR_OFFICIAL_CODE) {
$form->addElement('text', 'official_code', get_lang('OfficialCode'), array('size' => 40));
@ -452,7 +416,8 @@ if ($survey_data['form_fields'] != '' && $survey_data['anonymous'] == 0 && is_ar
}
}
}
if ($list['email'] == 1) {
if (isset($list['email']) && $list['email'] == 1) {
// EMAIL
$form->addElement('text', 'email', get_lang('Email'), array('size' => 40));
if (api_get_setting('profile', 'email') !== 'true') {
@ -466,7 +431,7 @@ if ($survey_data['form_fields'] != '' && $survey_data['anonymous'] == 0 && is_ar
$form->addRule('email', get_lang('EmailWrong'), 'email');
}
if ($list['phone'] == 1) {
if (isset($list['phone']) && $list['phone'] == 1) {
// PHONE
$form->addElement('text', 'phone', get_lang('Phone'), array('size' => 20));
if (api_get_setting('profile', 'phone') !== 'true') {
@ -479,8 +444,8 @@ if ($survey_data['form_fields'] != '' && $survey_data['anonymous'] == 0 && is_ar
}
}
if ($list['language'] == 1) {
//LANGUAGE
if (isset($list['language']) && $list['language'] == 1) {
// LANGUAGE
$form->addElement('select_language', 'language', get_lang('Language'));
if (api_get_setting('profile', 'language') !== 'true') {
$form->freeze('language');
@ -491,14 +456,54 @@ if ($survey_data['form_fields'] != '' && $survey_data['anonymous'] == 0 && is_ar
}
// EXTRA FIELDS
$extra_data = UserManager :: get_extra_user_data($user_id, true);
UserManager::set_extra_fields_in_form($form, $extra_data);
$extraField = new ExtraField('user');
$returnParams = $extraField->addElements($form, api_get_user_id());
$jquery_ready_content = $returnParams['jquery_ready_content'];
// the $jquery_ready_content variable collects all functions that will be load in the $(document).ready javascript function
$htmlHeadXtra[] ='<script>
$(document).ready(function(){
'.$jquery_ready_content.'
});
</script>';
$form->addButtonNext(get_lang('Next'));
$user_data = array_merge($user_data, $extra_data);
$form->setDefaults($user_data);
}
// Checking time availability
check_time_availability($survey_data);
// Header
Display :: display_header(get_lang('ToolSurvey'));
// Displaying the survey title and subtitle (appears on every page)
echo '<div class="survey-block">';
echo '<div id="survey_title">';
echo Display::return_icon(
'statistics.png',
get_lang('CreateNewSurvey'),
array('style'=>'display:inline-block; margin-right:5px;'),
ICON_SIZE_SMALL
);
echo strip_tags($survey_data['survey_title']).'</div>';
echo '<div id="survey_subtitle">'.strip_tags($survey_data['survey_subtitle']).'</div>';
// Displaying the survey introduction
if (!isset($_GET['show'])) {
// The first thing we do is delete the session
unset($_SESSION['paged_questions']);
unset($_SESSION['page_questions_sec']);
$paged_questions_sec = array();
if (!empty($survey_data['survey_introduction'])) {
echo '<div id="survey_content" class="survey_content">'.$survey_data['survey_introduction'].'</div>';
}
$limit = 0;
}
if ($survey_data['form_fields'] &&
$survey_data['anonymous'] == 0 &&
is_array($user_data) &&
@ -511,24 +516,35 @@ if ($survey_data['form_fields'] &&
$extras = array();
// Build SQL query
$sql = "UPDATE $table_user SET";
$update = false;
$allowedFields = [
'firstname',
'lastname',
'official_code',
'email',
'phone',
'language'
];
foreach ($user_data as $key => $value) {
if (substr($key, 0, 6) == 'extra_') { //an extra field
$extras[substr($key, 6)] = $value;
} else {
if (in_array($key, $allowedFields)) {
$sql .= " $key = '".Database :: escape_string($value)."',";
$update = true;
}
}
// Remove trailing , from the query we have so far
$sql = rtrim($sql, ',');
$sql .= " WHERE user_id = '".$user_id."'";
Database::query($sql);
// Update the extra fields
if (is_array($extras)) {
foreach ($extras as $key => $value) {
$myres = UserManager :: update_extra_field_value($user_id, $key, $value);
}
if ($update) {
Database::query($sql);
}
echo '<div id="survey_content" class="survey_content">'.get_lang('InformationUpdated').' '.get_lang('PleaseFillSurvey').'</div>';
$extraFieldValue = new ExtraFieldValue('user');
$extraFieldValue->saveFieldValues($user_data);
echo '<div id="survey_content" class="survey_content">'.
get_lang('InformationUpdated').' '.get_lang('PleaseFillSurvey').'</div>';
}
}
$_GET['show'] = 0;
@ -1285,13 +1301,24 @@ function check_time_availability($surv_data) {
$cur_date = time();
if ($cur_date < $start_date) {
Display :: display_warning_message(get_lang('SurveyNotAvailableYet'), false);
Display :: display_footer();
exit;
api_not_allowed(
true,
Display:: return_message(
get_lang('SurveyNotAvailableYet'),
'warning',
false
)
);
}
if ($cur_date > $end_date) {
Display :: display_warning_message(get_lang('SurveyNotAvailableAnymore'), false);
Display :: display_footer();
exit;
api_not_allowed(
true,
Display:: return_message(
get_lang('SurveyNotAvailableAnymore'),
'warning',
false
)
);
}
}

@ -437,8 +437,8 @@ if (count($a_students) > 0) {
$table->set_header(13, get_lang('LatestLogin'), false);
$headers['latest_login'] = get_lang('LatestLogin');
if (isset($_GET['additional_profile_field']) and is_numeric($_GET['additional_profile_field'])) {
$table->set_header(14, $extra_info['field_display_text'], false);
$headers['field_display_text'] = $extra_info['field_display_text'];
$table->set_header(14, $extra_info['display_text'], false);
$headers['display_text'] = $extra_info['display_text'];
$table->set_header(15, get_lang('Details'), false);
$headers['details'] = get_lang('Details');
} else {
@ -452,8 +452,8 @@ if (count($a_students) > 0) {
$headers['latest_login'] = get_lang('LatestLogin');
if (isset($_GET['additional_profile_field']) and is_numeric($_GET['additional_profile_field'])) {
$table->set_header(13, $extra_info['field_display_text'], false);
$headers['field_display_text'] = $extra_info['field_display_text'];
$table->set_header(13, $extra_info['display_text'], false);
$headers['display_text'] = $extra_info['display_text'];
$table->set_header(14, get_lang('Details'), false);
$headers['Details'] = get_lang('Details');
} else {
@ -512,7 +512,7 @@ if ($export_csv) {
$csv_headers[] = get_lang('LatestLogin', '');
if (isset($_GET['additional_profile_field']) AND is_numeric($_GET['additional_profile_field'])) {
$csv_headers[] = $extra_info['field_display_text'];
$csv_headers[] = $extra_info['display_text'];
}
ob_end_clean();
array_unshift($csv_content, $csv_headers); // Adding headers before the content.

@ -239,10 +239,10 @@ function get_number_of_users()
global $_configuration;
// Database table definition
$user_table = Database::get_main_table(TABLE_MAIN_USER);
$course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$tbl_session_rel_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$table_user_field_values = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$user_table = Database::get_main_table(TABLE_MAIN_USER);
$course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$tbl_session_rel_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$table_user_field_values = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
if (isset($_REQUEST['type']) && $_REQUEST['type']=='teacher') {
@ -327,7 +327,7 @@ function get_number_of_users()
u.user_id = cu.user_id AND
c_id='".api_get_course_int_id()."' AND
session_id ='".api_get_session_id()."'
INNER JOIN $tbl_url_rel_user as url_rel_user
INNER JOIN $tbl_url_rel_user as url_rel_user
ON (url_rel_user.user_id = u.user_id)
WHERE
cu.user_id IS NULL AND
@ -343,17 +343,20 @@ function get_number_of_users()
ON u.user_id = cu.user_id AND c_id='".api_get_course_int_id()."'";
// we change the SQL when we have a filter
if (isset($_GET['subscribe_user_filter_value']) AND
!empty($_GET['subscribe_user_filter_value']) AND
if (isset($_GET['subscribe_user_filter_value']) &&
!empty($_GET['subscribe_user_filter_value']) &&
api_get_setting('ProfilingFilterAddingUsers') == 'true'
){
$field_identification = explode('*',$_GET['subscribe_user_filter_value']);
$sql .= "
LEFT JOIN $table_user_field_values field_values
ON field_values.user_id = u.user_id
WHERE cu.user_id IS NULL AND u.status<>".DRH."
AND field_values.field_id = '".intval($field_identification[0])."'
AND field_values.field_value = '".Database::escape_string($field_identification[1])."'";
ON field_values.item_id = u.user_id
WHERE
cu.user_id IS NULL AND
u.status <> ".DRH." AND
field_values.field_id = '".intval($field_identification[0])."' AND
field_values.value = '".Database::escape_string($field_identification[1])."'
";
} else {
$sql .= "WHERE cu.user_id IS NULL AND u.status<>".DRH." ";
}
@ -419,11 +422,10 @@ function get_user_data($from, $number_of_items, $column, $direction)
$courseId = api_get_course_int_id();
// Database table definitions
$user_table = Database::get_main_table(TABLE_MAIN_USER);
$course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$tbl_session_rel_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$table_user_field_values = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$user_table = Database::get_main_table(TABLE_MAIN_USER);
$course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$tbl_session_rel_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$table_user_field_values = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
// adding teachers
@ -474,13 +476,13 @@ function get_user_data($from, $number_of_items, $column, $direction)
$field_identification = explode('*',$_GET['subscribe_user_filter_value']);
$sql .= "
LEFT JOIN $table_user_field_values field_values
ON field_values.user_id = u.user_id
ON field_values.item_id = u.user_id
WHERE
cu.user_id IS NULL AND
u.status=1 AND
u.status = 1 AND
(u.official_code <> 'ADMIN' OR u.official_code IS NULL) AND
field_values.field_id = '".intval($field_identification[0])."' AND
field_values.field_value = '".Database::escape_string($field_identification[1])."'";
field_values.value = '".Database::escape_string($field_identification[1])."'";
} else {
$sql .= "WHERE cu.user_id IS NULL AND u.status=1 AND (u.official_code <> 'ADMIN' OR u.official_code IS NULL) ";
}
@ -502,11 +504,11 @@ function get_user_data($from, $number_of_items, $column, $direction)
$field_identification = explode('*',$_GET['subscribe_user_filter_value']);
$sql .= "
LEFT JOIN $table_user_field_values field_values
ON field_values.user_id = u.user_id
ON field_values.item_id = u.user_id
WHERE
cu.user_id IS NULL AND u.status<>".DRH." AND
field_values.field_id = '".intval($field_identification[0])."' AND
field_values.field_value = '".Database::escape_string($field_identification[1])."'";
field_values.value = '".Database::escape_string($field_identification[1])."'";
} else {
$sql .= "WHERE cu.user_id IS NULL AND u.status<>".DRH." ";
}
@ -529,12 +531,12 @@ function get_user_data($from, $number_of_items, $column, $direction)
$field_identification = explode('*', $_GET['subscribe_user_filter_value']);
$sql .= "
LEFT JOIN $table_user_field_values field_values
ON field_values.user_id = u.user_id
ON field_values.item_id = u.user_id
WHERE
cu.user_id IS NULL AND
u.status<>".DRH." AND
field_values.field_id = '".intval($field_identification[0])."' AND
field_values.field_value = '".Database::escape_string($field_identification[1])."'";
field_values.value = '".Database::escape_string($field_identification[1])."'";
} else {
$sql .= "WHERE cu.user_id IS NULL AND u.status<>".DRH." AND access_url_id= $url_access_id ";
}
@ -561,13 +563,13 @@ function get_user_data($from, $number_of_items, $column, $direction)
$field_identification = explode('*',$_GET['subscribe_user_filter_value']);
$sql .= "
LEFT JOIN $table_user_field_values field_values
ON field_values.user_id = u.user_id
ON field_values.item_id = u.user_id
WHERE
cu.user_id IS NULL AND
u.status<>".DRH." AND
(u.official_code <> 'ADMIN' OR u.official_code IS NULL) AND
field_values.field_id = '".intval($field_identification[0])."' AND
field_values.field_value = '".Database::escape_string($field_identification[1])."'";
field_values.value = '".Database::escape_string($field_identification[1])."'";
} else {
$sql .= "WHERE
cu.user_id IS NULL AND
@ -588,16 +590,16 @@ function get_user_data($from, $number_of_items, $column, $direction)
c_id ='".$courseId."'";
// applying the filter of the additional user profile fields
if (isset($_GET['subscribe_user_filter_value']) AND !empty($_GET['subscribe_user_filter_value'])){
if (isset($_GET['subscribe_user_filter_value']) && !empty($_GET['subscribe_user_filter_value'])){
$field_identification = explode('*',$_GET['subscribe_user_filter_value']);
$sql .= "
LEFT JOIN $table_user_field_values field_values
ON field_values.user_id = u.user_id
ON field_values.item_id = u.user_id
WHERE
cu.user_id IS NULL AND
u.status<>".DRH." AND
field_values.field_id = '".intval($field_identification[0])."' AND
field_values.field_value = '".Database::escape_string($field_identification[1])."'";
field_values.value = '".Database::escape_string($field_identification[1])."'";
} else {
$sql .= "WHERE cu.user_id IS NULL AND u.status<>".DRH." ";
}
@ -621,12 +623,14 @@ function get_user_data($from, $number_of_items, $column, $direction)
$field_identification = explode('*', $_GET['subscribe_user_filter_value']);
$sql .= "
LEFT JOIN $table_user_field_values field_values
ON field_values.user_id = u.user_id
ON field_values.item_id = u.user_id
WHERE
cu.user_id IS NULL AND u.status<>".DRH." AND
cu.user_id IS NULL AND
u.status<>".DRH." AND
field_values.field_id = '".intval($field_identification[0])."' AND
field_values.field_value = '".Database::escape_string($field_identification[1])."' AND
access_url_id= $url_access_id ";
field_values.value = '".Database::escape_string($field_identification[1])."' AND
access_url_id = $url_access_id
";
} else {
$sql .= "WHERE cu.user_id IS NULL AND u.status<>".DRH." AND access_url_id= $url_access_id ";
}
@ -649,11 +653,13 @@ function get_user_data($from, $number_of_items, $column, $direction)
";
if (api_get_setting('ProfilingFilterAddingUsers') == 'true') {
// we also want to search for users who have something in their profile fields that matches the keyword
// we also want to search for users who have something in
// their profile fields that matches the keyword
$additional_users = search_additional_profile_fields($keyword);
}
// getting all the users of the course (to make sure that we do not display users that are already in the course)
// getting all the users of the course (to make sure that we do not
// display users that are already in the course)
if (!empty($session_id)) {
$a_course_users = CourseManager :: get_user_list_from_course_code($course_code, $session_id);
} else {
@ -685,8 +691,18 @@ function get_user_data($from, $number_of_items, $column, $direction)
if (isset($_REQUEST['keyword'])){
if (is_array($additional_users)) {
foreach($additional_users as $additional_user_key=>$additional_user_value){
if (!in_array($additional_user_key, $_SESSION['session_user_id']) AND !in_array($additional_user_key,$users_of_course)){
$users[]= array($additional_user_value['col0'],$additional_user_value['col1'],$additional_user_value['col2'].'*',$additional_user_value['col3'].'*',$additional_user_value['col4'],$additional_user_value['col5'], $additional_user_value['col6']);
if (!in_array($additional_user_key, $_SESSION['session_user_id']) &&
!in_array($additional_user_key,$users_of_course)
){
$users[] = array(
$additional_user_value['col0'],
$additional_user_value['col1'],
$additional_user_value['col2'].'*',
$additional_user_value['col3'].'*',
$additional_user_value['col4'],
$additional_user_value['col5'],
$additional_user_value['col6'],
);
}
}
}
@ -707,7 +723,11 @@ function email_filter($email) {
* @return string Some HTML-code
*/
function reg_filter($user_id) {
if(isset($_REQUEST['type']) && $_REQUEST['type']=='teacher') $type='teacher'; else $type='student';
if (isset($_REQUEST['type']) && $_REQUEST['type'] == 'teacher') {
$type = 'teacher';
} else {
$type = 'student';
}
$result = '<a class="btn btn-small btn-primary" href="'.api_get_self().'?register=yes&type='.$type.'&user_id='.$user_id.'">'.get_lang("reg").'</a>';
return $result;
}
@ -734,7 +754,9 @@ function active_filter($active, $url_params, $row) {
$image='error';
}
$result = null;
if ($row['0']<>$_user['user_id']) { // you cannot lock yourself out otherwise you could disable all the accounts including your own => everybody is locked out and nobody can change it anymore.
if ($row['0']<>$_user['user_id']) {
// you cannot lock yourself out otherwise you could disable all the accounts
// including your own => everybody is locked out and nobody can change it anymore.
$result = Display::return_icon($image.'.png', get_lang(ucfirst($action)), array() , ICON_SIZE_TINY);
}
return $result;
@ -756,62 +778,79 @@ function active_filter($active, $url_params, $row) {
function search_additional_profile_fields($keyword)
{
// database table definitions
$table_user_field_options = Database :: get_main_table(TABLE_MAIN_USER_FIELD_OPTIONS);
$table_user_field_values = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$table_user = Database::get_main_table(TABLE_MAIN_USER);
$table_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
$table_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$table_user_field_options = Database :: get_main_table(TABLE_EXTRA_FIELD_OPTIONS);
$table_user_field_values = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$tableExtraField = Database::get_main_table(TABLE_EXTRA_FIELD);
$table_user = Database::get_main_table(TABLE_MAIN_USER);
$table_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
$table_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
// getting the field option text that match this keyword (for radio buttons and checkboxes)
$sql = "SELECT * FROM $table_user_field_options WHERE option_display_text LIKE '%".$keyword."%'";
$sql = "SELECT * FROM $table_user_field_options
WHERE display_text LIKE '%".$keyword."%'";
$result_profiling = Database::query($sql);
while ($profiling_field_options = Database::fetch_array($result_profiling)) {
$profiling_field_options_exact_values[] = $profiling_field_options;
}
$profiling_field_options_exact_values_sql = '';
foreach ($profiling_field_options_exact_values as $profilingkey=>$profilingvalue){
$profiling_field_options_exact_values_sql .= "OR (field_id = '".$profilingvalue['field_id']."' AND field_value='".$profilingvalue['option_value']."') ";
foreach ($profiling_field_options_exact_values as $profilingkey => $profilingvalue){
$profiling_field_options_exact_values_sql .= " OR (field_id = '".$profilingvalue['field_id']."' AND value='".$profilingvalue['option_value']."') ";
}
$extraFieldType = \Chamilo\CoreBundle\Entity\ExtraField::USER_FIELD_TYPE;
// getting all the user ids of the users who have chosen on of the predefined fields that contain the keyword
// or all the users who have entered the keyword in a free-form field
$sql_profiling_values = "SELECT user.user_id as col0, user.official_code as col1, user.lastname as col2, user.firstname as col3, user.email as col4, user.active as col5, user.user_id as col6
FROM $table_user user, $table_user_field_values user_values
WHERE user.user_id = user_values.user_id
AND ( field_value LIKE '%".$keyword."%'
".$profiling_field_options_exact_values_sql.")";
$result_profiling_values = Database::query($sql_profiling_values);
$sql = "SELECT
user.user_id as col0,
user.official_code as col1,
user.lastname as col2,
user.firstname as col3,
user.email as col4,
user.active as col5,
user.user_id as col6
FROM $table_user user, $table_user_field_values user_values, $tableExtraField e
WHERE
user.user_id = user_values.item_id AND
user_values.field_id = e.id AND
e.extra_field_type = $extraFieldType AND
(value LIKE '%".$keyword."%'".$profiling_field_options_exact_values_sql.")";
$result = Database::query($sql);
$additional_users = array();
while ($profiled_users = Database::fetch_array($result_profiling_values)) {
while ($profiled_users = Database::fetch_array($result)) {
$additional_users[$profiled_users['col0']] = $profiled_users;
}
return $additional_users;
}
/**
* This function displays a dropdown list with all the additional user profile fields defined by the platform administrator in
* platform administration > profiling. Only the fields that have predefined fields are usefull for such a filter.
* This function displays a dropdown list with all the additional user
* profile fields defined by the platform administrator in
* platform administration > profiling.
* Only the fields that have predefined fields are usefull for such a filter.
*
*/
function display_extra_profile_fields_filter() {
function display_extra_profile_fields_filter()
{
// getting all the additional user profile fields
$extra = UserManager::get_extra_fields(0,50,5,'ASC');
$return='<option value="">'.get_lang('SelectFilter').'</option>';
// looping through the additional user profile fields
foreach($extra as $id => $field_details) {
foreach ($extra as $id => $field_details) {
// $field_details[2] contains the type of the additional user profile field
switch($field_details[2]) {
switch ($field_details[2]) {
// text fields cannot be used as a filter
case UserManager::USER_FIELD_TYPE_TEXT:
case ExtraField::FIELD_TYPE_TEXT:
break;
// text area fields cannot be used as a filter
case UserManager::USER_FIELD_TYPE_TEXTAREA:
case ExtraField::FIELD_TYPE_TEXTAREA:
break;
case UserManager::USER_FIELD_TYPE_RADIO:
case UserManager::USER_FIELD_TYPE_SELECT:
case UserManager::USER_FIELD_TYPE_SELECT_MULTIPLE:
case ExtraField::FIELD_TYPE_RADIO:
case ExtraField::FIELD_TYPE_SELECT:
case ExtraField::FIELD_TYPE_SELECT_MULTIPLE:
$return .= '<optgroup label="'.$field_details[3].'">';
foreach($field_details[9] as $option_id => $option_details) {
if ($_GET['subscribe_user_filter_value'] == $field_details[0].'*'.$option_details[1]) {

@ -65,8 +65,7 @@ if (api_is_allowed_to_edit(null, true)) {
// Getting extra fields that have the filter option "on"
$extraField = new ExtraField('user');
$extraFields = $extraField->get_all(array('field_filter' => 1));
$extraFields = $extraField->get_all(array('filter = ?' => 1));
$user_image_pdf_size = 80;
if (api_is_allowed_to_edit(null, true)) {
@ -206,7 +205,7 @@ if (api_is_allowed_to_edit(null, true)) {
// users subscribed to the course through a session.
if (api_get_session_id()) {
$table_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$sql_query = "SELECT DISTINCT
$sql = "SELECT DISTINCT
user.user_id, ".($is_western_name_order ? "user.firstname, user.lastname" : "user.lastname, user.firstname").",
user.username,
$select_email_condition
@ -216,20 +215,20 @@ if (api_is_allowed_to_edit(null, true)) {
$legal
FROM $table_session_course_user as session_course_user, $table_users as user ";
if (api_is_multiple_url_enabled()) {
$sql_query .= ' , '.Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER).' au ';
$sql .= ' , '.Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER).' au ';
}
$sql_query .=" WHERE c_id = '$courseId' AND session_course_user.user_id = user.user_id ";
$sql_query .= ' AND session_id = '.$sessionId;
$sql .=" WHERE c_id = '$courseId' AND session_course_user.user_id = user.user_id ";
$sql .= ' AND session_id = '.$sessionId;
if (api_is_multiple_url_enabled()) {
$sql_query .= " AND user.user_id = au.user_id AND access_url_id = $current_access_url_id ";
$sql .= " AND user.user_id = au.user_id AND access_url_id = $current_access_url_id ";
}
//only users no coaches/teachers
$sql_query .= " AND session_course_user.status = 0 ";
$sql_query .= $sort_by_first_name ? ' ORDER BY user.firstname, user.lastname' : ' ORDER BY user.lastname, user.firstname';
$sql .= " AND session_course_user.status = 0 ";
$sql .= $sort_by_first_name ? ' ORDER BY user.firstname, user.lastname' : ' ORDER BY user.lastname, user.firstname';
$rs = Database::query($sql_query);
$rs = Database::query($sql);
$counter = 1;
while ($user = Database:: fetch_array($rs, 'ASSOC')) {
@ -288,32 +287,32 @@ if (api_is_allowed_to_edit(null, true)) {
// users directly subscribed to the course
$table_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
$sql_query = "SELECT DISTINCT
$sql = "SELECT DISTINCT
user.user_id, ".($is_western_name_order ? "user.firstname, user.lastname" : "user.lastname, user.firstname").",
user.username,
$select_email_condition
phone,
user.official_code,
active $legal
FROM $table_course_user as course_user, $table_users as user ";
FROM $table_course_user as course_user, $table_users as user ";
if (api_is_multiple_url_enabled()) {
$sql_query .= ' , '.Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER).' au ';
$sql .= ' , '.Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER).' au ';
}
$sql_query .= " WHERE
$sql .= " WHERE
c_id = '$courseId' AND
course_user.relation_type<>".COURSE_RELATION_TYPE_RRHH." AND
course_user.user_id = user.user_id ";
if (api_is_multiple_url_enabled()) {
$sql_query .= " AND user.user_id = au.user_id AND access_url_id = $current_access_url_id ";
$sql .= " AND user.user_id = au.user_id AND access_url_id = $current_access_url_id ";
}
//only users no teachers/coaches
$sql_query .= " AND course_user.status = 5 ";
$sql .= " AND course_user.status = 5 ";
$sql_query .= ($sort_by_first_name ? " ORDER BY user.firstname, user.lastname" : " ORDER BY user.lastname, user.firstname");
$sql .= ($sort_by_first_name ? " ORDER BY user.firstname, user.lastname" : " ORDER BY user.lastname, user.firstname");
$rs = Database::query($sql_query);
$rs = Database::query($sql);
$counter = 1;
while ($user = Database::fetch_array($rs, 'ASSOC')) {
if (isset($user['legal_agreement'])) {
@ -735,7 +734,7 @@ function get_user_data($from, $number_of_items, $column, $direction)
$user_id,
$extraField['id']
);
$temp[] = $data['field_value'];
$temp[] = $data['value'];
}
}
@ -783,21 +782,25 @@ function get_user_data($from, $number_of_items, $column, $direction)
* @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
* @param int $active the current state of the account
* @param int $user_id The user id
* @param string $url_params
* @param string $urlParams
*
* @return string Some HTML-code with the lock/unlock button
*/
function active_filter($active, $url_params, $row)
function active_filter($active, $urlParams, $row)
{
$userId = api_get_user_id();
if ($active=='1') {
$action='AccountActive';
$image='accept';
$action = '';
$image = '';
if ($active == '1') {
$action = 'AccountActive';
$image = 'accept';
}
if ($active=='0') {
$action='AccountInactive';
$image='error';
if ($active == '0') {
$action = 'AccountInactive';
$image = 'error';
}
$result = '';
/* you cannot lock yourself out otherwise you could disable all the accounts including your own => everybody is
locked out and nobody can change it anymore.*/
if ($row[count($row)-1] <> $userId) {
@ -935,7 +938,7 @@ if (api_is_allowed_to_edit(null, true)) {
}
foreach ($extraFields as $extraField) {
$table->set_header($header_nr++, $extraField['field_display_text'], false);
$table->set_header($header_nr++, $extraField['display_text'], false);
}
// Actions column

@ -219,12 +219,11 @@ class WSCM {
return new WSCMError(200, "Course not found");
}
} else {
$course_code = CourseManager::get_course_code_from_original_id($course_id_value, $course_id_field_name);
if($course_code == 0) {
$courseId = CourseManager::get_course_code_from_original_id($course_id_value, $course_id_field_name);
if (empty($courseId)) {
return new WSCMError(200, "Course not found");
} else {
$course_info = CourseManager::get_course_information($course_code);
return $course_info['id'];
return $courseId;
}
}
}
@ -237,8 +236,9 @@ class WSCM {
* @param string Session id value
* @return mixed System session id if the session was found, WSError otherwise
*/
protected function getSessionId($session_id_field_name, $session_id_value) {
if($session_id_field_name == "chamilo_session_id") {
protected function getSessionId($session_id_field_name, $session_id_value)
{
if ($session_id_field_name == "chamilo_session_id") {
$session = SessionManager::fetch((int)$session_id_value);
if(!empty($session)) {
return intval($session_id_value);
@ -246,7 +246,10 @@ class WSCM {
return new WSCMError(300, "Session not found");
}
} else {
$session_id = SessionManager::get_session_id_from_original_id($session_id_value, $session_id_field_name);
$session_id = SessionManager::getSessionIdFromOriginalId(
$session_id_value,
$session_id_field_name
);
if($session_id == 0) {
return new WSCMError(300, "Session not found");
} else {

@ -48,7 +48,7 @@ class WSCMAnnouncements extends WSCM
{
case 'sender':
$field_table = "insert_user_id";
$sender = UserManager::get_user_info_by_id($announcements[0][$field_table]);
$sender = api_get_user_info($announcements[0][$field_table]);
$announcements[0][$field_table] = $sender['firstname']." ".$sender['lastname'];
break;
case 'title' :

@ -105,8 +105,8 @@ class WSCMForum extends WSCM
$field_table = "insert_user_id";
break;
case 'sender_name' :
$user_id = $thread_info[insert_user_id];
$user_info = UserManager::get_user_info_by_id($user_id);
$user_id = $thread_info['insert_user_id'];
$user_info = api_get_user_info($user_id);
return $user_info['firstname'];
break;
default :

@ -66,8 +66,8 @@ class WSCMUser extends WSCM {
public function get_user_name($username, $password, $id, $field)
{
if($this->verifyUserPass($username, $password) == "valid") {
$userInfo = UserManager::get_user_info_by_id($id);
if ($this->verifyUserPass($username, $password) == "valid") {
$userInfo = api_get_user_info($id);
switch ($field) {
case 'firstname':
return $userInfo['firstname'];

@ -1,10 +1,10 @@
<?php
/**
* This script populates the user_extra_fields_value table with a new field which
* This script populates the user_extra_fields_value table with a new field which
* contains the username for each user. This allows you to use web
* services to update users based on their username (which is assumed
* to be the same as in the application which calls the webservice).
* This script should be called any time a new user (or a large group of new
* This script should be called any time a new user (or a large group of new
* users) is added to the database.
* @package chamilo.webservices
*/
@ -18,10 +18,11 @@ die();
$extra_field_id = 9;
require_once('../inc/global.inc.php');
$tuser = Database::get_main_table(TABLE_MAIN_USER);
$tuserfv = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$tuserfv = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$sql = "SELECT user_id, username FROM $tuser ORDER BY user_id";
$res = Database::query($sql);
while($row = Database::fetch_array($res)) {
$sql2 = "INSERT INTO $tuserfv (user_id, field_id, field_value) VALUES (".$row['user_id'].", 11,'".$row['username']."')";
$sql2 = "INSERT INTO $tuserfv (item_id, field_id, value)
VALUES (".$row['user_id'].", 11,'".$row['username']."')";
$res2 = Database::query($sql2);
}

File diff suppressed because it is too large Load Diff

@ -173,15 +173,12 @@ class WS {
return new WSError(200, "Course not found");
}
} else {
$course_code = CourseManager::get_course_code_from_original_id(
$courseId = CourseManager::get_course_code_from_original_id(
$course_id_value,
$course_id_field_name
);
if (!empty($course_code)) {
$course_info = CourseManager::get_course_information(
$course_code
);
return $course_info['id'];
if (!empty($courseId)) {
return $courseId;
} else {
return new WSError(200, "Course not found");
}
@ -197,17 +194,21 @@ class WS {
* @param string Session id value
* @return mixed System session id if the session was found, WSError otherwise
*/
protected function getSessionId($session_id_field_name, $session_id_value) {
if($session_id_field_name == "chamilo_session_id") {
protected function getSessionId($session_id_field_name, $session_id_value)
{
if ($session_id_field_name == "chamilo_session_id") {
$session = SessionManager::fetch((int)$session_id_value);
if(!empty($session)) {
if (!empty($session)) {
return intval($session_id_value);
} else {
return new WSError(300, "Session not found");
}
} else {
$session_id = SessionManager::get_session_id_from_original_id($session_id_value, $session_id_field_name);
if($session_id == 0) {
$session_id = SessionManager::getSessionIdFromOriginalId(
$session_id_value,
$session_id_field_name
);
if ($session_id == 0) {
return new WSError(300, "Session not found");
} else {
return $session_id;

@ -334,7 +334,21 @@ class WSUser extends WS {
* @param array Extra fields. An array with elements of the form ('field_name' => 'name_of_the_field', 'field_value' => 'value_of_the_field'). Leave empty if you don't want to update
* @return mixed True if user was successfully updated, WSError otherwise
*/
protected function editUserHelper($user_id_field_name, $user_id_value, $firstname, $lastname, $status, $loginname, $password, $encrypt_method, $email, $language, $phone, $expiration_date, $extras) {
protected function editUserHelper(
$user_id_field_name,
$user_id_value,
$firstname,
$lastname,
$status,
$loginname,
$password,
$encrypt_method,
$email,
$language,
$phone,
$expiration_date,
$extras
) {
global $api_failureList;
$user_id = $this->getUserId($user_id_field_name, $user_id_value);
if($user_id instanceof WSError) {
@ -343,11 +357,30 @@ class WSUser extends WS {
if($password == '') {
$password = null;
}
$user_info = UserManager::get_user_info_by_id($user_id);
if(count($extras) == 0) {
$user_info = api_get_user_info($user_id);
if (count($extras) == 0) {
$extras = null;
}
$result = UserManager::update_user($user_id, $firstname, $lastname, $loginname, $password, PLATFORM_AUTH_SOURCE, $email, $status, '', $phone, $user_info['picture_uri'], $expiration_date, $user_info['active'], null, $user_info['hr_dept_id'], $extras, $encrypt_method);
$result = UserManager::update_user(
$user_id,
$firstname,
$lastname,
$loginname,
$password,
PLATFORM_AUTH_SOURCE,
$email,
$status,
'',
$phone,
$user_info['picture_uri'],
$expiration_date,
$user_info['active'],
null,
$user_info['hr_dept_id'],
$extras,
$encrypt_method
);
if (!$result) {
$failure = $api_failureList[0];
if($failure == 'encrypt_method invalid') {

@ -82,24 +82,24 @@ if ($verified) {
$extraField = new ExtraField('session');
// Get session fields
$fieldList = $extraField->get_all(array(
'field_variable IN ( ?, ?, ?, ?, ?)' => $fieldsArray
'variable IN ( ?, ?, ?, ?, ?)' => $fieldsArray
));
// Index session fields
foreach ($fieldList as $field) {
$fields[$field['id']] = $field['field_variable'];
$fields[$field['id']] = $field['variable'];
}
$mergedArray = array_merge(array($data['sessionId']), array_keys($fields));
$sessionFieldValueList = $extraSession->get_all(
array(
'session_id = ? field_id IN ( ?, ?, ?, ?, ?, ?, ? )' => $mergedArray
'item_id = ? field_id IN ( ?, ?, ?, ?, ?, ?, ? )' => $mergedArray
)
);
foreach ($sessionFieldValueList as $sessionFieldValue) {
// Check if session field value is set in session field list
if (isset($fields[$sessionFieldValue['field_id']])) {
$var = $fields[$sessionFieldValue['field_id']];
$val = $sessionFieldValue['field_value'];
$val = $sessionFieldValue['value'];
// Assign session field value to session
$sessionArray[$var] = $val;
}
@ -240,11 +240,11 @@ if ($verified) {
$extraField = new ExtraField('session');
// Get session fields
$fieldList = $extraField->get_all(array(
'field_variable IN ( ?, ?, ?, ?, ?)' => $fieldsArray
'variable IN ( ?, ?, ?, ?, ?)' => $fieldsArray
));
// Index session fields
foreach ($fieldList as $field) {
$fields[$field['id']] = $field['field_variable'];
$fields[$field['id']] = $field['variable'];
}
$mergedArray = array_merge(array($data['sessionId']), array_keys($fields));
@ -255,7 +255,7 @@ if ($verified) {
// Check if session field value is set in session field list
if (isset($fields[$sessionFieldValue['field_id']])) {
$var = $fields[$sessionFieldValue['field_id']];
$val = $sessionFieldValue['field_value'];
$val = $sessionFieldValue['value'];
// Assign session field value to session
$sessionArray[$var] = $val;
}

@ -72,7 +72,7 @@ foreach ($queueList as $queueItem) {
$queueItem['session_id'],
'recommended_number_of_participants'
);
$sessionRecommendedNumber[$queueItem['session_id']] = $row['field_value'];
$sessionRecommendedNumber[$queueItem['session_id']] = $row['value'];
}
// Group student by superior and session
$queueBySuperior = array();

@ -79,13 +79,11 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface
private function addAreaField()
{
$result = Database::select(
'field_variable',
'variable',
'user_field',
array(
'where'=> array(
'field_variable = ? ' => array(
'area'
)
'variable = ? ' => array('area')
)
)
);
@ -94,13 +92,13 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface
$extraField = new ExtraField('user');
$extraField->save(array(
'field_type' => 1,
'field_variable' => 'area',
'field_display_text' => get_plugin_lang('Area', 'AdvancedSubscriptionPlugin'),
'field_default_value' => null,
'variable' => 'area',
'display_text' => get_plugin_lang('Area', 'AdvancedSubscriptionPlugin'),
'default_value' => null,
'field_order' => null,
'field_visible' => 1,
'field_changeable' => 1,
'field_filter' => null
'visible' => 1,
'changeable' => 1,
'filter' => null
));
}
}
@ -185,7 +183,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface
'uri' => $wsUrl
);
$client = new SoapClient(null, $options);
$userInfo = UserManager::get_user_info_by_id($userId);
$userInfo = api_get_user_info($userId);
try {
$profileCompleted = $client->__soapCall('getProfileCompletionPercentage', $userInfo['extra']['drupal_user_id']);
} catch (\Exception $e) {
@ -247,19 +245,19 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface
if (is_array($sessions) && count($sessions) > 0) {
foreach ($sessions as $session) {
$costField = $extra->get_values_by_handler_and_field_variable($session['id'], 'cost');
$userCost += $costField['field_value'];
$userCost += $costField['value'];
$teachingHoursField = $extra->get_values_by_handler_and_field_variable($session['id'], 'teaching_hours');
$expendedTime += $teachingHoursField['field_value'];
$expendedTime += $teachingHoursField['value'];
}
}
if (isset($params['sessionId'])) {
$costField = $extra->get_values_by_handler_and_field_variable($params['sessionId'], 'cost');
$userCost += $costField['field_value'];
$userCost += $costField['value'];
$teachingHoursField = $extra->get_values_by_handler_and_field_variable($params['sessionId'], 'teaching_hours');
$expendedTime += $teachingHoursField['field_value'];
$expendedTime += $teachingHoursField['value'];
}
if ($maxCost <= $userCost) {
@ -468,25 +466,15 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface
*/
public function isSessionOpen($sessionId, $fieldVariable = 'is_open_session')
{
$sessionId = (int) $sessionId;
$fieldVariable = Database::escape_string($fieldVariable);
$extraFieldValue = new ExtraFieldValue('session');
$result = $extraFieldValue->get_values_by_handler_and_field_variable(
$sessionId,
$fieldVariable
);
$isOpen = false;
if ($sessionId > 0 && !empty($fieldVariable)) {
$sfTable = Database::get_main_table(TABLE_MAIN_SESSION_FIELD);
$sfvTable = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
$joinTable = $sfvTable . ' sfv INNER JOIN ' . $sfTable . ' sf ON sfv.field_id = sf.id ';
$row = Database::select(
'sfv.field_value as field_value',
$joinTable,
array(
'where' => array(
'sfv.session_id = ? AND sf.field_variable = ?' => array($sessionId, $fieldVariable),
)
)
);
if (isset($row[0]) && is_array($row[0])) {
$isOpen = (bool) $row[0]['field_value'];
}
if (!empty($result)) {
$isOpen = (bool) $result['value'];
}
return $isOpen;
@ -908,7 +896,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface
if (!empty($sessionId)) {
$extra = new ExtraFieldValue('session');
$var = $extra->get_values_by_handler_and_field_variable($sessionId, 'vacancies');
$vacancy = intval($var['field_value']);
$vacancy = intval($var['value']);
if (!empty($vacancy)) {
$vacancy -= $this->countQueueByParams(
array(
@ -938,30 +926,38 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface
{
if (!empty($sessionId)) {
// Assign variables
$fieldsArray = array('code', 'cost', 'place', 'allow_visitors', 'teaching_hours', 'brochure', 'banner');
$fieldsArray = array(
'code',
'cost',
'place',
'allow_visitors',
'teaching_hours',
'brochure',
'banner',
);
$extraSession = new ExtraFieldValue('session');
$extraField = new ExtraField('session');
// Get session fields
$fieldList = $extraField->get_all(array(
'field_variable IN ( ?, ?, ?, ?, ?, ?, ? )' => $fieldsArray
'variable IN ( ?, ?, ?, ?, ?, ?, ? )' => $fieldsArray
));
// Index session fields
$fields = array();
foreach ($fieldList as $field) {
$fields[$field['id']] = $field['field_variable'];
$fields[$field['id']] = $field['variable'];
}
$mergedArray = array_merge(array($sessionId), array_keys($fields));
$sql = "SELECT * FROM " . Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES) .
" WHERE session_id = %d AND field_id IN (%d, %d, %d, %d, %d, %d, %d)";
$sql = "SELECT * FROM " . Database::get_main_table(TABLE_EXTRA_FIELD_VALUES) ."
WHERE item_id = %d AND field_id IN (%d, %d, %d, %d, %d, %d, %d)";
$sql = vsprintf($sql, $mergedArray);
$sessionFieldValueList = Database::query($sql);
while ($sessionFieldValue = Database::fetch_assoc($sessionFieldValueList)) {
// Check if session field value is set in session field list
if (isset($fields[$sessionFieldValue['field_id']])) {
$var = $fields[$sessionFieldValue['field_id']];
$val = $sessionFieldValue['field_value'];
$val = $sessionFieldValue['value'];
// Assign session field value to session
$sessionArray[$var] = $val;
}
@ -1078,25 +1074,25 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface
$extraField = new ExtraField('session');
// Get session fields
$fieldList = $extraField->get_all(array(
'field_variable IN ( ?, ?, ?, ?, ?)' => $fieldsArray
'variable IN ( ?, ?, ?, ?, ?)' => $fieldsArray
));
// Index session fields
$fields = array();
foreach ($fieldList as $field) {
$fields[$field['id']] = $field['field_variable'];
$fields[$field['id']] = $field['variable'];
}
$mergedArray = array_merge(array($sessionId), array_keys($fields));
$sessionFieldValueList = $extraSession->get_all(
array(
'session_id = ? field_id IN ( ?, ?, ?, ?, ?, ?, ? )' => $mergedArray
'item_id = ? field_id IN ( ?, ?, ?, ?, ?, ?, ? )' => $mergedArray
)
);
foreach ($sessionFieldValueList as $sessionFieldValue) {
// Check if session field value is set in session field list
if (isset($fields[$sessionFieldValue['field_id']])) {
$var = $fields[$sessionFieldValue['field_id']];
$val = $sessionFieldValue['field_value'];
$val = $sessionFieldValue['value'];
// Assign session field value to session
$sessionArray[$var] = $val;
}
@ -1314,16 +1310,17 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface
private function getApprovedInductionSessions($userId)
{
$tSession = Database::get_main_table(TABLE_MAIN_SESSION);
$tSessionField = Database::get_main_table(TABLE_MAIN_SESSION_FIELD);
$tSessionFieldValues = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
$tSessionField = Database::get_main_table(TABLE_EXTRA_FIELD);
$tSessionFieldValues = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$tSessionUser = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$extraFieldType = \Chamilo\CoreBundle\Entity\ExtraField::SESSION_FIELD_TYPE;
$sql = "SELECT s.id FROM $tSession AS s
INNER JOIN $tSessionFieldValues AS sfv ON s.id = sfv.session_id
INNER JOIN $tSessionFieldValues AS sfv ON s.id = sfv.item_id
INNER JOIN $tSessionField AS sf ON sfv.field_id = sf.id
INNER JOIN $tSessionUser AS su ON s.id = su.session_id
WHERE
sf.field_variable = 'is_induction_session' AND
sf.extra_field_type = $extraFieldType
sf.variable = 'is_induction_session' AND
su.relation_type = 0 AND
su.user_id = " . intval($userId);

@ -27,25 +27,32 @@ if (!empty($sessionId)) {
$sessionList[$sessionId]['selected'] = 'selected="selected"';
$studentList['session']['id'] = $sessionId;
// Assign variables
$fieldsArray = array('description', 'target', 'mode', 'publication_end_date', 'recommended_number_of_participants', 'vacancies');
$fieldsArray = array(
'description',
'target',
'mode',
'publication_end_date',
'recommended_number_of_participants',
'vacancies',
);
$sessionArray = api_get_session_info($sessionId);
$extraSession = new ExtraFieldValue('session');
$extraField = new ExtraField('session');
// Get session fields
$fieldList = $extraField->get_all(array(
'field_variable IN ( ?, ?, ?, ?, ?, ?)' => $fieldsArray
'variable IN ( ?, ?, ?, ?, ?, ?)' => $fieldsArray
));
// Index session fields
foreach ($fieldList as $field) {
$fields[$field['id']] = $field['field_variable'];
$fields[$field['id']] = $field['variable'];
}
$params = array(' session_id = ? ' => $sessionId);
$params = array(' item_id = ? ' => $sessionId);
$sessionFieldValueList = $extraSession->get_all(array('where' => $params));
foreach ($sessionFieldValueList as $sessionFieldValue) {
// Check if session field value is set in session field list
if (isset($fields[$sessionFieldValue['field_id']])) {
$var = $fields[$sessionFieldValue['field_id']];
$val = $sessionFieldValue['field_value'];
$val = $sessionFieldValue['value'];
// Assign session field value to session
$sessionArray[$var] = $val;
}

@ -14,64 +14,64 @@ api_protect_admin_script();
$teachingHours = new ExtraField('session');
$teachingHours->save(array(
'field_type' => ExtraField::FIELD_TYPE_INTEGER,
'field_variable' => 'teaching_hours',
'field_display_text' => get_lang('TeachingHours'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'teaching_hours',
'display_text' => get_lang('TeachingHours'),
'visible' => 1,
'changeable' => 1
));
$cost = new ExtraField('session');
$cost->save(array(
'field_type' => ExtraField::FIELD_TYPE_FLOAT,
'field_variable' => 'cost',
'field_display_text' => get_lang('Cost'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'cost',
'display_text' => get_lang('Cost'),
'visible' => 1,
'changeable' => 1
));
$vacancies = new ExtraField('session');
$vacancies->save(array(
'field_type' => ExtraField::FIELD_TYPE_INTEGER,
'field_variable' => 'vacancies',
'field_display_text' => get_lang('Vacancies'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'vacancies',
'display_text' => get_lang('Vacancies'),
'visible' => 1,
'changeable' => 1
));
$recommendedNumberOfParticipants = new ExtraField('session');
$recommendedNumberOfParticipants->save(array(
'field_type' => ExtraField::FIELD_TYPE_INTEGER,
'field_variable' => 'recommended_number_of_participants',
'field_display_text' => get_lang('RecommendedNumberOfParticipants'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'recommended_number_of_participants',
'display_text' => get_lang('RecommendedNumberOfParticipants'),
'visible' => 1,
'changeable' => 1
));
$place = new ExtraField('session');
$place->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'place',
'field_display_text' => get_lang('Place'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'place',
'display_text' => get_lang('Place'),
'visible' => 1,
'changeable' => 1
));
$schedule = new ExtraField('session');
$schedule->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'schedule',
'field_display_text' => get_lang('Schedule'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'schedule',
'display_text' => get_lang('Schedule'),
'visible' => 1,
'changeable' => 1
));
$allowVisitors = new ExtraField('session');
$allowVisitors->save(array(
'field_type' => ExtraField::FIELD_TYPE_CHECKBOX,
'field_variable' => 'allow_visitors',
'field_display_text' => get_lang('AllowVisitors'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'allow_visitors',
'display_text' => get_lang('AllowVisitors'),
'visible' => 1,
'changeable' => 1
));
$modeOptions = array(
@ -83,38 +83,38 @@ $modeOptions = array(
$mode = new ExtraField('session');
$mode->save(array(
'field_type' => ExtraField::FIELD_TYPE_SELECT,
'field_variable' => 'mode',
'field_display_text' => get_lang('Mode'),
'field_visible' => 1,
'field_changeable' => 1,
'variable' => 'mode',
'display_text' => get_lang('Mode'),
'visible' => 1,
'changeable' => 1,
'field_options' => implode('; ', $modeOptions)
));
$isInductionSession = new ExtraField('session');
$isInductionSession->save(array(
'field_type' => ExtraField::FIELD_TYPE_CHECKBOX,
'field_variable' => 'is_induction_session',
'field_display_text' => get_lang('IsInductionSession'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'is_induction_session',
'display_text' => get_lang('IsInductionSession'),
'visible' => 1,
'changeable' => 1
));
$isOpenSession = new ExtraField('session');
$isOpenSession->save(array(
'field_type' => ExtraField::FIELD_TYPE_CHECKBOX,
'field_variable' => 'is_open_session',
'field_display_text' => get_lang('IsOpenSession'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'is_open_session',
'display_text' => get_lang('IsOpenSession'),
'visible' => 1,
'changeable' => 1
));
$duration = new ExtraField('session');
$duration->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'human_text_duration',
'field_display_text' => get_lang('DurationInWords'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'human_text_duration',
'display_text' => get_lang('DurationInWords'),
'visible' => 1,
'changeable' => 1
));
$showStatusOptions = array(
@ -126,47 +126,47 @@ $showStatusOptions = array(
$showStatus = new ExtraField('session');
$showStatus->save(array(
'field_type' => ExtraField::FIELD_TYPE_SELECT,
'field_variable' => 'show_status',
'field_display_text' => get_lang('ShowStatus'),
'field_visible' => 1,
'field_changeable' => 1,
'variable' => 'show_status',
'display_text' => get_lang('ShowStatus'),
'visible' => 1,
'changeable' => 1,
'field_options' => implode('; ', $showStatusOptions)
));
$publicationStartDate = new ExtraField('session');
$publicationStartDate->save(array(
'field_type' => ExtraField::FIELD_TYPE_DATE,
'field_variable' => 'publication_start_date',
'field_display_text' => get_lang('PublicationStartDate'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'publication_start_date',
'display_text' => get_lang('PublicationStartDate'),
'visible' => 1,
'changeable' => 1
));
$publicationEndDate = new ExtraField('session');
$publicationEndDate->save(array(
'field_type' => ExtraField::FIELD_TYPE_DATE,
'field_variable' => 'publication_end_date',
'field_display_text' => get_lang('PublicationEndDate'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'publication_end_date',
'display_text' => get_lang('PublicationEndDate'),
'visible' => 1,
'changeable' => 1
));
$banner = new ExtraField('session');
$banner->save(array(
'field_type' => ExtraField::FIELD_TYPE_FILE_IMAGE,
'field_variable' => 'banner',
'field_display_text' => get_lang('SessionBanner'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'banner',
'display_text' => get_lang('SessionBanner'),
'visible' => 1,
'changeable' => 1
));
$brochure = new ExtraField('session');
$brochure->save(array(
'field_type' => ExtraField::FIELD_TYPE_FILE,
'field_variable' => 'brochure',
'field_display_text' => get_lang('Brochure'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'brochure',
'display_text' => get_lang('Brochure'),
'visible' => 1,
'changeable' => 1
));
$targetOptions = array(
@ -177,27 +177,27 @@ $targetOptions = array(
$target = new ExtraField('session');
$target->save(array(
'field_type' => ExtraField::FIELD_TYPE_SELECT,
'field_variable' => 'target',
'field_display_text' => get_lang('TargetAudience'),
'field_visible' => 1,
'field_changeable' => 1,
'variable' => 'target',
'display_text' => get_lang('TargetAudience'),
'visible' => 1,
'changeable' => 1,
'field_options' => implode('; ', $targetOptions)
));
$shortDescription = new ExtraField('session');
$shortDescription->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'short_description',
'field_display_text' => get_lang('ShortDescription'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'short_description',
'display_text' => get_lang('ShortDescription'),
'visible' => 1,
'changeable' => 1
));
$id = new ExtraField('session');
$id->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'code',
'field_display_text' => get_lang('Code'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'code',
'display_text' => get_lang('Code'),
'visible' => 1,
'changeable' => 1
));

@ -29,27 +29,35 @@ $data['studentUserId'] = 4;
// Prepare data
// Get session data
// Assign variables
$fieldsArray = array('description', 'target', 'mode', 'publication_end_date', 'recommended_number_of_participants');
$fieldsArray = array(
'description',
'target',
'mode',
'publication_end_date',
'recommended_number_of_participants',
);
$sessionArray = api_get_session_info($data['sessionId']);
$extraSession = new ExtraFieldValue('session');
$extraField = new ExtraField('session');
// Get session fields
$fieldList = $extraField->get_all(array(
'field_variable IN ( ?, ?, ?, ?, ?)' => $fieldsArray
'variable IN ( ?, ?, ?, ?, ?)' => $fieldsArray
));
$fields = array();
// Index session fields
foreach ($fieldList as $field) {
$fields[$field['id']] = $field['field_variable'];
$fields[$field['id']] = $field['variable'];
}
$mergedArray = array_merge(array($data['sessionId']), array_keys($fields));
$sessionFieldValueList = $extraSession->get_all(array('session_id = ? field_id IN ( ?, ?, ?, ?, ?, ?, ? )' => $mergedArray));
$sessionFieldValueList = $extraSession->get_all(
array('item_id = ? field_id IN ( ?, ?, ?, ?, ?, ?, ? )' => $mergedArray)
);
foreach ($sessionFieldValueList as $sessionFieldValue) {
// Check if session field value is set in session field list
if (isset($fields[$sessionFieldValue['field_id']])) {
$var = $fields[$sessionFieldValue['field_id']];
$val = $sessionFieldValue['field_value'];
$val = $sessionFieldValue['value'];
// Assign session field value to session
$sessionArray[$var] = $val;
}

@ -78,7 +78,7 @@ class Clockworksms implements SmsPluginLibraryInterface
$mobilePhoneNumberExtraFieldValue = new ExtraFieldValue('user');
$mobilePhoneNumberExtraFieldValue = $mobilePhoneNumberExtraFieldValue->get_values_by_handler_and_field_id($userId, $mobilePhoneNumberExtraField['id']);
return $mobilePhoneNumberExtraFieldValue['field_value'];
return $mobilePhoneNumberExtraFieldValue['value'];
}
/**

@ -36,26 +36,27 @@ class Skype extends Plugin implements HookPluginInterface
public function install()
{
$this->installHook();
$result = Database::select(
'field_variable',
Database::get_main_table(TABLE_MAIN_USER_FIELD),
'variable',
Database::get_main_table(TABLE_EXTRA_FIELD),
array(
'where'=> array(
'field_variable = ?' => array(
'variable = ?' => array(
'skype'
)
)
)
);
if (empty($result)) {
require_once api_get_path(LIBRARY_PATH).'extra_field.lib.php';
$extraField = new Extrafield('user');
$extraField->save(array(
'field_type' => UserManager::USER_FIELD_TYPE_TEXT,
'field_variable' => 'skype',
'field_display_text' => 'Skype',
'field_visible' => 1,
'field_changeable' => 1
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'variable' => 'skype',
'display_text' => 'Skype',
'visible' => 1,
'changeable' => 1
));
}
}

@ -155,12 +155,6 @@ class TestUserManager extends UnitTestCase {
$this->assertTrue(is_bool($res));
}
function testGetExtraFieldOptions() {
$res=UserManager::get_extra_field_options('field name');
//var_dump($res);
$this->assertTrue(!(bool)$res);
}
function testGetEextraFields() {
$res=UserManager::get_extra_fields(0, 0, 5, 'ASC', true);
$this->assertTrue($res);
@ -182,11 +176,6 @@ class TestUserManager extends UnitTestCase {
$this->assertTrue(is_array($res));
}
function testGetNumberOfExtraFields() {
$res=UserManager::get_number_of_extra_fields($all_visibility=true);
$this->assertFalse(!(bool)$res);
}
function testGetNumberOfUsers() {
$res=UserManager::get_number_of_users();
@ -215,15 +204,6 @@ class TestUserManager extends UnitTestCase {
$this->assertTrue(!(bool)$res);
}
function testGetUserInfoById() {
$res=UserManager::get_user_info_by_id(2);
if(isset($user_id) && ($user_fields = false)){
$this->assertTrue(is_array($res));
} else {
$this->assertTrue($res);
}
}
function testGetUserList() {
$res=UserManager::get_user_list(null,null);
$this->assertTrue(is_array($res));
@ -286,17 +266,6 @@ class TestUserManager extends UnitTestCase {
$this->assertNull($res);
}
function testSaveExtraFieldChanges() {
$fieldid='1';
$fieldvarname='name';
$fieldtype='1';
$fieldtitle='title';
$fielddefault='5';
$res=UserManager::save_extra_field_changes($fieldid, $fieldvarname, $fieldtype, $fieldtitle, $fielddefault, null);
$this->assertFalse(is_a($res,UserManager));
$this->assertNotNull($res,'');
$this->assertTrue($res);
}
function testSendMessageInOutbox() {
$email_administrator='arthur@dokeos.com';
@ -328,13 +297,6 @@ class TestUserManager extends UnitTestCase {
$this->assertNull(null,$res);
}
function testUpdateExtraField() {
$fid=5;
$columns=array();
$res=UserManager::update_extra_field($fid,$columns);
$this->assertTrue(is_bool($res));
}
function testUpdateExtraFieldValue() {
$user_id='121';
$fname='name';
@ -349,4 +311,3 @@ class TestUserManager extends UnitTestCase {
$this->assertTrue(is_bool($res));
}
}
?>

@ -12,64 +12,64 @@ api_protect_admin_script();
$teachingHours = new ExtraField('session');
$teachingHours->save(array(
'field_type' => ExtraField::FIELD_TYPE_INTEGER,
'field_variable' => 'teaching_hours',
'field_display_text' => get_lang('TeachingHours'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'teaching_hours',
'display_text' => get_lang('TeachingHours'),
'visible' => 1,
'changeable' => 1
));
$cost = new ExtraField('session');
$cost->save(array(
'field_type' => ExtraField::FIELD_TYPE_FLOAT,
'field_variable' => 'cost',
'field_display_text' => get_lang('Cost'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'cost',
'display_text' => get_lang('Cost'),
'visible' => 1,
'changeable' => 1
));
$vacancies = new ExtraField('session');
$vacancies->save(array(
'field_type' => ExtraField::FIELD_TYPE_INTEGER,
'field_variable' => 'vacancies',
'field_display_text' => get_lang('Vacancies'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'vacancies',
'display_text' => get_lang('Vacancies'),
'visible' => 1,
'changeable' => 1
));
$recommendedNumberOfParticipants = new ExtraField('session');
$recommendedNumberOfParticipants->save(array(
'field_type' => ExtraField::FIELD_TYPE_INTEGER,
'field_variable' => 'recommended_number_of_participants',
'field_display_text' => get_lang('RecommendedNumberOfParticipants'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'recommended_number_of_participants',
'display_text' => get_lang('RecommendedNumberOfParticipants'),
'visible' => 1,
'changeable' => 1
));
$place = new ExtraField('session');
$place->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'place',
'field_display_text' => get_lang('Place'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'place',
'display_text' => get_lang('Place'),
'visible' => 1,
'changeable' => 1
));
$schedule = new ExtraField('session');
$schedule->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'schedule',
'field_display_text' => get_lang('Schedule'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'schedule',
'display_text' => get_lang('Schedule'),
'visible' => 1,
'changeable' => 1
));
$allowVisitors = new ExtraField('session');
$allowVisitors->save(array(
'field_type' => ExtraField::FIELD_TYPE_CHECKBOX,
'field_variable' => 'allow_visitors',
'field_display_text' => get_lang('AllowVisitors'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'allow_visitors',
'display_text' => get_lang('AllowVisitors'),
'visible' => 1,
'changeable' => 1
));
$modeOptions = array(
@ -81,38 +81,38 @@ $modeOptions = array(
$mode = new ExtraField('session');
$mode->save(array(
'field_type' => ExtraField::FIELD_TYPE_SELECT,
'field_variable' => 'mode',
'field_display_text' => get_lang('Mode'),
'field_visible' => 1,
'field_changeable' => 1,
'variable' => 'mode',
'display_text' => get_lang('Mode'),
'visible' => 1,
'changeable' => 1,
'field_options' => implode('; ', $modeOptions)
));
$isInductionSession = new ExtraField('session');
$isInductionSession->save(array(
'field_type' => ExtraField::FIELD_TYPE_CHECKBOX,
'field_variable' => 'is_induccion_session',
'field_display_text' => get_lang('IsInductionSession'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'is_induccion_session',
'display_text' => get_lang('IsInductionSession'),
'visible' => 1,
'changeable' => 1
));
$isOpenSession = new ExtraField('session');
$isOpenSession->save(array(
'field_type' => ExtraField::FIELD_TYPE_CHECKBOX,
'field_variable' => 'is_open_session',
'field_display_text' => get_lang('IsOpenSession'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'is_open_session',
'display_text' => get_lang('IsOpenSession'),
'visible' => 1,
'changeable' => 1
));
$duration = new ExtraField('session');
$duration->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'human_text_duration',
'field_display_text' => get_lang('DurationInWords'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'human_text_duration',
'display_text' => get_lang('DurationInWords'),
'visible' => 1,
'changeable' => 1
));
$showStatusOptions = array(
@ -124,47 +124,47 @@ $showStatusOptions = array(
$showStatus = new ExtraField('session');
$showStatus->save(array(
'field_type' => ExtraField::FIELD_TYPE_SELECT,
'field_variable' => 'show_status',
'field_display_text' => get_lang('ShowStatus'),
'field_visible' => 1,
'field_changeable' => 1,
'variable' => 'show_status',
'display_text' => get_lang('ShowStatus'),
'visible' => 1,
'changeable' => 1,
'field_options' => implode('; ', $showStatusOptions)
));
$publicationStartDate = new ExtraField('session');
$publicationStartDate->save(array(
'field_type' => ExtraField::FIELD_TYPE_DATE,
'field_variable' => 'publication_start_date',
'field_display_text' => get_lang('PublicationStartDate'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'publication_start_date',
'display_text' => get_lang('PublicationStartDate'),
'visible' => 1,
'changeable' => 1
));
$publicationEndDate = new ExtraField('session');
$publicationEndDate->save(array(
'field_type' => ExtraField::FIELD_TYPE_DATE,
'field_variable' => 'publication_end_date',
'field_display_text' => get_lang('PublicationEndDate'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'publication_end_date',
'display_text' => get_lang('PublicationEndDate'),
'visible' => 1,
'changeable' => 1
));
$banner = new ExtraField('session');
$banner->save(array(
'field_type' => ExtraField::FIELD_TYPE_FILE_IMAGE,
'field_variable' => 'banner',
'field_display_text' => get_lang('SessionBanner'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'banner',
'display_text' => get_lang('SessionBanner'),
'visible' => 1,
'changeable' => 1
));
$brochure = new ExtraField('session');
$brochure->save(array(
'field_type' => ExtraField::FIELD_TYPE_FILE,
'field_variable' => 'brochure',
'field_display_text' => get_lang('Brochure'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'brochure',
'display_text' => get_lang('Brochure'),
'visible' => 1,
'changeable' => 1
));
$targetOptions = array(
@ -175,27 +175,27 @@ $targetOptions = array(
$target = new ExtraField('session');
$target->save(array(
'field_type' => ExtraField::FIELD_TYPE_SELECT,
'field_variable' => 'target',
'field_display_text' => get_lang('Target'),
'field_visible' => 1,
'field_changeable' => 1,
'variable' => 'target',
'display_text' => get_lang('Target'),
'visible' => 1,
'changeable' => 1,
'field_options' => implode('; ', $targetOptions)
));
$shortDescription = new ExtraField('session');
$shortDescription->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'short_description',
'field_display_text' => get_lang('ShortSescription'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'short_description',
'display_text' => get_lang('ShortSescription'),
'visible' => 1,
'changeable' => 1
));
$id = new ExtraField('session');
$id->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'code',
'field_display_text' => get_lang('Code'),
'field_visible' => 1,
'field_changeable' => 1
'variable' => 'code',
'display_text' => get_lang('Code'),
'visible' => 1,
'changeable' => 1
));

@ -12,38 +12,39 @@ require __DIR__ . '/../../main/inc/global.inc.php';
// relationship.
$referenceFields = array('razon_social', 'ruc');
$tUserField = Database::get_main_table(TABLE_MAIN_USER_FIELD);
$tUserFieldValue = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$tUserField = Database::get_main_table(TABLE_EXTRA_FIELD);
$tUserFieldValue = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$tUser = Database::get_main_table(TABLE_MAIN_USER);
$tGroup = Database::get_main_table(TABLE_MAIN_GROUP);
$tGroupUser = Database::get_main_table(TABLE_MAIN_USER_REL_GROUP);
// First get the IDs of the selected fields
$sql = "SELECT id, field_type, field_variable FROM $tUserField";
$sql = "SELECT id, field_type, variable FROM $tUserField";
$result = Database::query($sql);
$foundFields = array();
$fieldsNames = array();
while ($row = Database::fetch_assoc($result)) {
if ($row['field_type'] == 1 && in_array($row['field_variable'], $referenceFields)) {
$foundFields[$row['field_variable']] = array('id' => $row['id']);
$fieldsNames[$row['id']] = $row['field_variable'];
if ($row['field_type'] == 1 && in_array($row['variable'], $referenceFields)) {
$foundFields[$row['variable']] = array('id' => $row['id']);
$fieldsNames[$row['id']] = $row['variable'];
}
}
// Second get all the possible values of this field (in user data)
$usersData = array();
foreach ($foundFields as $key => $value) {
$sql = "SELECT user_id, field_value FROM $tUserFieldValue WHERE field_id = " . $value['id'];
$sql = "SELECT item_id as user_id, value FROM $tUserFieldValue WHERE field_id = " . $value['id'];
$result = Database::query($sql);
while ($row = Database::fetch_assoc($result)) {
$foundFields[$key]['options'][$row['field_value']][] = $row['user_id'];
$foundFields[$key]['options'][$row['value']][] = $row['user_id'];
if (empty($usersData[$row['user_id']])) {
$usersData[$row['user_id']] = '';
}
if ($referenceFields[0] == $key) {
$usersData[$row['user_id']] = $row['field_value'] . ' - ' . $usersData[$row['user_id']];
$usersData[$row['user_id']] = $row['value'] . ' - ' . $usersData[$row['user_id']];
} else {
$usersData[$row['user_id']] .= $row['field_value'] . ' - ';
$usersData[$row['user_id']] .= $row['value'] . ' - ';
}
}
}

Loading…
Cancel
Save