Add system template feature see BT#10851

pull/2487/head
jmontoyaa 8 years ago
parent 35c44d226d
commit 8acc91a93c
  1. 30
      main/inc/ajax/session.ajax.php
  2. 17
      main/inc/lib/extra_field.lib.php
  3. 3
      main/inc/lib/extra_field_value.lib.php
  4. 21
      main/inc/lib/sessionmanager.lib.php
  5. 175
      main/session/session_add.php

@ -113,6 +113,36 @@ switch ($action) {
echo json_encode($json);
}
break;
case 'session_info':
$sessionId = isset($_GET['session_id']) ? $_GET['session_id'] : '';
$sessionInfo = api_get_session_info($sessionId);
$extraFieldValues = new ExtraFieldValue('session');
$extraField = new ExtraField('session');
$values = $extraFieldValues->getAllValuesByItem($sessionId);
$load = isset($_GET['load_empty_extra_fields']) ? true : false;
if ($load) {
$allExtraFields = $extraField->get_all();
$valueList = array_column($values, 'id');
foreach ($allExtraFields as $extra) {
if (!in_array($extra['id'], $valueList)) {
$values[] = [
'id' => $extra['id'],
'variable' => $extra['variable'],
'value' => '',
'field_type' => $extra['field_type'],
];
}
}
}
$sessionInfo['extra_fields'] = $values;
if (!empty($sessionInfo)) {
echo json_encode($sessionInfo);
}
break;
case 'get_description':
if (isset($_GET['session'])) {
$sessionInfo = api_get_session_info($_GET['session']);

@ -2,6 +2,8 @@
/* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Entity\ExtraField as EntityExtraField;
use Chamilo\CoreBundle\Entity\ExtraFieldRelTag;
use Chamilo\CoreBundle\Entity\Tag;
/**
* Class ExtraField
@ -1757,16 +1759,17 @@ class ExtraField extends Model
$url = api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php';
} else {
$em = Database::getManager();
$fieldTags = $em
->getRepository('ChamiloCoreBundle:ExtraFieldRelTag')
->findBy([
'fieldId' => $field_id,
'itemId' => $itemId
]);
/** @var \Chamilo\CoreBundle\Entity\ExtraFieldRelTag $fieldTag */
->findBy(
[
'fieldId' => $field_id,
'itemId' => $itemId,
]
);
/** @var ExtraFieldRelTag $fieldTag */
foreach ($fieldTags as $fieldTag) {
/** @var \Chamilo\CoreBundle\Entity\Tag $tag */
/** @var Tag $tag */
$tag = $em->find('ChamiloCoreBundle:Tag', $fieldTag->getTagId());
if (empty($tag)) {

@ -862,7 +862,8 @@ class ExtraFieldValue extends Model
$itemId = intval($itemId);
$extraFieldType = $this->getExtraField()->getExtraFieldType();
$sql = "SELECT s.value, sf.variable FROM {$this->table} s
$sql = "SELECT s.value, sf.variable, sf.field_type, sf.id
FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf
ON (s.field_id = sf.id)
WHERE

@ -499,8 +499,9 @@ class SessionManager
if ($showCountUsers) {
$select .= ', count(su.user_id) users';
}
$isMakingOrder = strpos($options['order'], 'category_name') === 0;
if (isset($options['order'])) {
$isMakingOrder = strpos($options['order'], 'category_name') === 0;
}
}
$isFilteringSessionCategory = strpos($where, 'category_name') !== false;
@ -7446,6 +7447,22 @@ class SessionManager
$form->addButtonAdvancedSettings('advanced_params');
$form->addElement('html', '<div id="advanced_params_options" style="display:none">');
if (empty($sessionId)) {
$sessions = SessionManager::get_sessions_admin();
$sessionList = [];
$sessionList[] = '';
foreach ($sessions as $session) {
$sessionList[$session['id']] = $session['name'];
}
$form->addSelect(
'session_template',
get_lang('SessionTemplate'),
$sessionList,
['id' => 'system_template']
);
}
$form->addSelect(
'session_category',
get_lang('SessionCategory'),

@ -47,8 +47,8 @@ function search_coachs($needle)
OR firstname LIKE "'.$needle.'%"
OR lastname LIKE "'.$needle.'%")
AND status=1'.
$order_clause.
' LIMIT 10';
$order_clause.
' LIMIT 10';
if (api_is_multiple_url_enabled()) {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
@ -66,7 +66,7 @@ function search_coachs($needle)
lastname LIKE "'.$needle.'%"
)
AND status=1'.
$order_clause.'
$order_clause.'
LIMIT 10';
}
}
@ -138,13 +138,171 @@ $form = new FormValidator('add_session', 'post', $urlAction);
$form->addElement('header', $tool_name);
$result = SessionManager::setForm($form);
$htmlHeadXtra[] = '
$url = api_get_path(WEB_AJAX_PATH).'session.ajax.php';
$urlAjaxExtraField = api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php?1=1';
$htmlHeadXtra[] ="
<script>
$(function() {
'.$result['js'].'
});
</script>';
// @todo add an html element
".$result['js']."
$('#system_template').on('change', function() {
var sessionId = $(this).find('option:selected').val();
$.ajax({
type: 'GET',
dataType: 'json',
url: '".$url."',
data: 'a=session_info&load_empty_extra_fields=true&session_id=' + sessionId,
success: function(data) {
//console.log(data);
if (data.session_category_id > 0) {
$('#session_category').val(data.session_category_id);
$('#session_category').selectpicker('render');
} else {
$('#session_category').val(0);
$('#session_category').selectpicker('render');
}
CKEDITOR.instances.description.setData(data.description);
if (data.duration > 0) {
$('#access').val(0);
$('#access').selectpicker('render');
$('#duration').val(data.duration);
}
$.each(data.extra_fields, function(i, item) {
var fieldName = 'extra_'+item.variable;
/*
const FIELD_TYPE_TEXT = 1;
const FIELD_TYPE_TEXTAREA = 2;
const FIELD_TYPE_RADIO = 3;
const FIELD_TYPE_SELECT = 4;
const FIELD_TYPE_SELECT_MULTIPLE = 5;
const FIELD_TYPE_DATE = 6;
const FIELD_TYPE_DATETIME = 7;
const FIELD_TYPE_DOUBLE_SELECT = 8;
const FIELD_TYPE_DIVIDER = 9;
const FIELD_TYPE_TAG = 10;
const FIELD_TYPE_TIMEZONE = 11;
const FIELD_TYPE_SOCIAL_PROFILE = 12;
const FIELD_TYPE_CHECKBOX = 13;
const FIELD_TYPE_MOBILE_PHONE_NUMBER = 14;
const FIELD_TYPE_INTEGER = 15;
const FIELD_TYPE_FILE_IMAGE = 16;
const FIELD_TYPE_FLOAT = 17;
const FIELD_TYPE_FILE = 18;
const FIELD_TYPE_VIDEO_URL = 19;
const FIELD_TYPE_LETTERS_ONLY = 20;
const FIELD_TYPE_ALPHANUMERIC = 21;
const FIELD_TYPE_LETTERS_SPACE = 22;
const FIELD_TYPE_ALPHANUMERIC_SPACE = 23;*/
switch (item.field_type) {
case '1': // text
case '6': // date
case '7': // datetime
case '15': // integer
case '17': // float
case '20': // letters only
case '21': // alphanum
$('input[name='+fieldName+']').val(item.value);
break;
case '2': // textarea
CKEDITOR.instances[fieldName].setData(item.value);
break;
case '3': // radio
var radio = fieldName+'['+fieldName+']';
$('[name=\''+radio+'\']').val([item.value]);
break;
case '4': // simple select
case '5': // multiple select
$('#'+fieldName+'').val(item.value);
$('#'+fieldName+'').selectpicker('render');
break;
case '8': // double
var first = 'first_'+fieldName;
var second = 'second_'+fieldName;
// item.value has format : 85::86
if (item.value) {
var values = item.value.split('::');
var firstFieldId = values[0];
var secondFieldId = values[1];
$('#'+first+'').val(firstFieldId);
$('#'+first+'').selectpicker('render');
// Remove all options
$('#'+second+'')
.find('option')
.remove()
.end();
// Load items for this item then update:
$.ajax({
url: '".$urlAjaxExtraField."&a=get_second_select_options',
dataType: 'json',
data: 'type=session&field_id='+item.id+'&option_value_id='+firstFieldId,
success: function(data) {
$.each(data, function(index, value) {
var my_select = $('#'+second+'');
my_select.append($(\"<option/>\", {
value: index,
text: value
}));
});
$('#'+second+'').selectpicker('refresh');
}
});
$('#'+second+'').val(secondFieldId);
$('#'+second+'').selectpicker('render');
}
break;
case '10': // tags
// Remove all options
$('#'+fieldName+' option').each(function(i, optionItem) {
$(this).remove();
});
$('#'+fieldName).next().find('.bit-box').each(function(i, optionItem) {
$(this).remove();
});
// Add new options
if (item.value) {
$.each(item.value, function(i, tagItem) {
// Select2 changes
//console.log(tagItem.value);
//$('#'+fieldName)[0].addItem(tagItem.value, tagItem.value);
var option = new Option(tagItem.value, tagItem.value);
option.selected = true;
$('#'+fieldName).append(option);
$('#'+fieldName).trigger(\"change\");
});
}
break;
case '13': // check
var check = fieldName+'['+fieldName+']';
// Default is uncheck
$('[name=\''+check+'\']').prop('checked', false);
if (item.value == 1) {
$('[name=\''+check+'\']').prop('checked', true);
}
break;
}
});
}
});
})
})
</script>";
$form->addButtonNext(get_lang('NextStep'));
if (!$formSent) {
@ -158,6 +316,7 @@ $form->setDefaults($formDefaults);
if ($form->validate()) {
$params = $form->getSubmitValues();
$name = $params['name'];
$startDate = $params['access_start_date'];
$endDate = $params['access_end_date'];

Loading…
Cancel
Save