parent
543dc56eae
commit
e10f34fb79
@ -0,0 +1,275 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
/** |
||||
* @package chamilo.admin |
||||
*/ |
||||
// Language files that need to be included. |
||||
$language_file = array('admin'); |
||||
|
||||
$cidReset = true; |
||||
require_once '../inc/global.inc.php'; |
||||
|
||||
$this_section = SECTION_PLATFORM_ADMIN; |
||||
|
||||
api_protect_admin_script(); |
||||
|
||||
//Add the JS needed to use the jqgrid |
||||
$htmlHeadXtra[] = api_get_jqgrid_js(); |
||||
|
||||
// setting breadcrumbs |
||||
$interbreadcrumb[] = array('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); |
||||
|
||||
$action = isset($_GET['action']) ? $_GET['action'] : null; |
||||
|
||||
$check = Security::check_token('request'); |
||||
$token = Security::get_token(); |
||||
|
||||
if ($action == 'add') { |
||||
$interbreadcrumb[] = array('url' => 'course_fields.php', 'name' => get_lang('CourseFields')); |
||||
$interbreadcrumb[] = array('url' => '#', 'name' => get_lang('Add')); |
||||
} elseif ($action == 'edit') { |
||||
$interbreadcrumb[] = array('url' => 'course_fields.php', 'name' => get_lang('CourseFields')); |
||||
$interbreadcrumb[] = array('url' => '#', 'name' => get_lang('Edit')); |
||||
} else { |
||||
$interbreadcrumb[] = array('url' => '#', 'name' => get_lang('CourseFields')); |
||||
} |
||||
|
||||
//jqgrid will use this URL to do the selects |
||||
$url = api_get_path(WEB_AJAX_PATH) . 'model.ajax.php?a=get_extra_fields&type=course'; |
||||
|
||||
//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('FieldLabel'), |
||||
get_lang('Type'), |
||||
get_lang('FieldChangeability'), |
||||
get_lang('Visibility'), |
||||
get_lang('Filter'), |
||||
get_lang('FieldOrder'), |
||||
get_lang('Actions') |
||||
); |
||||
|
||||
//Column config |
||||
$column_model = array( |
||||
array( |
||||
'name' => 'field_display_text', |
||||
'index' => 'field_display_text', |
||||
'width' => '180', |
||||
'align' => 'left' |
||||
), |
||||
array( |
||||
'name' => 'field_variable', |
||||
'index' => 'field_variable', |
||||
'width' => '', |
||||
'align' => 'left', |
||||
'sortable' => 'true' |
||||
), |
||||
array( |
||||
'name' => 'field_type', |
||||
'index' => 'field_type', |
||||
'width' => '', |
||||
'align' => 'left', |
||||
'sortable' => 'true' |
||||
), |
||||
array( |
||||
'name' => 'field_changeable', |
||||
'index' => 'field_changeable', |
||||
'width' => '50', |
||||
'align' => 'left', |
||||
'sortable' => 'true' |
||||
), |
||||
array( |
||||
'name' => 'field_visible', |
||||
'index' => 'field_visible', |
||||
'width' => '40', |
||||
'align' => 'left', |
||||
'sortable' => 'true' |
||||
), |
||||
array( |
||||
'name' => 'field_filter', |
||||
'index' => 'field_filter', |
||||
'width' => '30', |
||||
'align' => 'left', |
||||
'sortable' => 'true' |
||||
), |
||||
array( |
||||
'name' => 'field_order', |
||||
'index' => 'field_order', |
||||
'width' => '40', |
||||
'align' => 'left', |
||||
'sortable' => 'true' |
||||
), |
||||
array( |
||||
'name' => 'actions', |
||||
'index' => 'actions', |
||||
'width' => '100', |
||||
'align' => 'left', |
||||
'formatter' => 'action_formatter', |
||||
'sortable' => 'false' |
||||
) |
||||
); |
||||
|
||||
//Autowidth |
||||
$extra_params['autowidth'] = 'true'; |
||||
//height auto |
||||
$extra_params['height'] = 'auto'; |
||||
$extra_params['sortname'] = 'field_order'; |
||||
|
||||
//With this function we can add actions to the jgrid (edit, delete, etc) |
||||
$actionLinks = ' |
||||
function action_formatter(cellvalue, options, rowObject) { |
||||
return \'<a href="?action=edit&id=\'+options.rowId+\'">' |
||||
. Display::return_icon('edit.png', get_lang('Edit'), '', ICON_SIZE_SMALL) . '</a>' |
||||
. ' <a onclick="javascript:if(!confirm(' . "\'" |
||||
. addslashes(api_htmlentities(get_lang("ConfirmYourChoice"), ENT_QUOTES)) . "\'" |
||||
. ')); return false;" href="?sec_token=' . $token |
||||
. '&action=delete&id=\'+options.rowId+\'">' |
||||
. Display::return_icon('delete.png', get_lang('Delete'), '', ICON_SIZE_SMALL) . '</a>\'; |
||||
}'; |
||||
|
||||
$htmlHeadXtra[] = ' |
||||
<script> |
||||
$(function() { |
||||
// grid definition see the $obj->display() function |
||||
' . Display::grid_js('course_fields', $url, $columns, $column_model, $extra_params, array(), $actionLinks, true) . ' |
||||
|
||||
$("#field_type").on("change", function() { |
||||
id = $(this).val(); |
||||
switch(id) { |
||||
case "1": |
||||
$("#example").html("' . addslashes(Display::return_icon('userfield_text.png')) . '"); |
||||
break; |
||||
case "2": |
||||
$("#example").html("' . addslashes(Display::return_icon('userfield_text_area.png')) . '"); |
||||
break; |
||||
case "3": |
||||
$("#example").html("' . addslashes(Display::return_icon('add_user_field_howto.png')) . '"); |
||||
break; |
||||
case "4": |
||||
$("#example").html("' . addslashes(Display::return_icon('userfield_drop_down.png')) . '"); |
||||
break; |
||||
case "5": |
||||
$("#example").html("' . addslashes(Display::return_icon('userfield_multidropdown.png')) . '"); |
||||
break; |
||||
case "6": |
||||
$("#example").html("' . addslashes(Display::return_icon('userfield_data.png')) . '"); |
||||
break; |
||||
case "7": |
||||
$("#example").html("' . addslashes(Display::return_icon('userfield_date_time.png')) . '"); |
||||
break; |
||||
case "8": |
||||
$("#example").html("' . addslashes(Display::return_icon('userfield_doubleselect.png')) . '"); |
||||
break; |
||||
case "9": |
||||
$("#example").html("' . addslashes(Display::return_icon('userfield_divider.png')) . '"); |
||||
break; |
||||
case "10": |
||||
$("#example").html("' . addslashes(Display::return_icon('userfield_user_tag.png')) . '"); |
||||
break; |
||||
case "11": |
||||
$("#example").html("' . addslashes(Display::return_icon('userfield_data.png')) . '"); |
||||
break; |
||||
} |
||||
}); |
||||
|
||||
var value = 1; |
||||
$("#advanced_parameters").on("click", function() { |
||||
$("#options").toggle(function() { |
||||
if (value == 1) { |
||||
$("#advanced_parameters").addClass("btn-hide"); |
||||
value = 0; |
||||
} else { |
||||
$("#advanced_parameters").removeClass("btn-hide"); |
||||
value = 1; |
||||
} |
||||
}); |
||||
}); |
||||
}); |
||||
</script>'; |
||||
|
||||
// The header. |
||||
Display::display_header(null); |
||||
|
||||
$obj = new CourseField(); |
||||
|
||||
// Action handling: Add |
||||
switch ($action) { |
||||
case 'add': |
||||
if (api_get_session_id() != 0 && !api_is_allowed_to_session_edit(false, true)) { |
||||
api_not_allowed(); |
||||
} |
||||
|
||||
$url = api_get_self() . '?action=' . Security::remove_XSS($_GET['action']); |
||||
$form = $obj->return_form($url, 'add'); |
||||
|
||||
// The validation or display |
||||
if ($form->validate()) { |
||||
if ($check) { |
||||
$values = $form->exportValues(); |
||||
$res = $obj->save($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(); |
||||
} |
||||
break; |
||||
case 'edit': |
||||
// Action handling: Editing |
||||
$url = api_get_self() . '?action=' . Security::remove_XSS($_GET['action']) . '&id=' . intval($_GET['id']); |
||||
$form = $obj->return_form($url, 'edit'); |
||||
|
||||
// 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_display_text']), |
||||
false |
||||
); |
||||
} |
||||
$obj->display(); |
||||
} else { |
||||
echo '<div class="actions">'; |
||||
echo '<a href="' . api_get_self() . '">'; |
||||
echo Display::return_icon('back.png', get_lang('Back'), '', ICON_SIZE_MEDIUM); |
||||
echo '</a>'; |
||||
echo '</div>'; |
||||
|
||||
$form->addElement('hidden', 'sec_token'); |
||||
$form->setConstants(array('sec_token' => $token)); |
||||
$form->display(); |
||||
} |
||||
break; |
||||
case 'delete': |
||||
// Action handling: delete |
||||
if ($check) { |
||||
$res = $obj->delete($_GET['id']); |
||||
|
||||
if ($res) { |
||||
Display::display_confirmation_message(get_lang('ItemDeleted')); |
||||
} |
||||
} |
||||
|
||||
$obj->display(); |
||||
break; |
||||
default: |
||||
$obj->display(); |
||||
break; |
||||
} |
||||
|
||||
Display :: display_footer(); |
||||
@ -0,0 +1,105 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
class CourseField extends ExtraField { |
||||
|
||||
public function __construct() { |
||||
parent::__construct('course'); |
||||
} |
||||
|
||||
function display() { |
||||
// action links |
||||
echo '<div class="actions">'; |
||||
echo '<a href="../admin/index.php">' . Display::return_icon('back.png', get_lang('BackTo') . ' ' . get_lang('PlatformAdmin'), '', ICON_SIZE_MEDIUM) . '</a>'; |
||||
echo '<a href="' . api_get_self() . '?action=add">' . Display::return_icon('add_user_fields.png', get_lang('Add'), '', ICON_SIZE_MEDIUM) . '</a>'; |
||||
|
||||
echo '</div>'; |
||||
echo Display::grid_html('course_fields'); |
||||
} |
||||
|
||||
public function return_form($url, $action) { |
||||
$form = new FormValidator('course_field', 'post', $url); |
||||
$id = isset($_GET['id']) ? intval($_GET['id']) : null; |
||||
$form->addElement('hidden', 'id', $id); |
||||
|
||||
// Settting the form elements |
||||
$header = get_lang('Add'); |
||||
$defaults = array(); |
||||
|
||||
if ($action == 'edit') { |
||||
$header = get_lang('Modify'); |
||||
// Setting the defaults |
||||
$defaults = $this->get($id); |
||||
} |
||||
|
||||
$form->addElement('header', $header); |
||||
$form->addElement('text', 'field_display_text', get_lang('Name'), array('class' => 'span5')); |
||||
|
||||
// Field type |
||||
$types = self::get_field_types(); |
||||
|
||||
$form->addElement('select', 'field_type', get_lang('FieldType'), $types, array('id' => 'field_type', 'class' => 'chzn-select', 'data-placeholder' => get_lang('Select'))); |
||||
$form->addElement('label', get_lang('Example'), '<div id="example">-</div>'); |
||||
|
||||
//$form->addElement('advanced_settings','<a class="btn btn-show" id="advanced_parameters" href="javascript://">'.get_lang('AdvancedParameters').'</a>'); |
||||
//$form->addElement('html','<div id="options" style="display:none">'); |
||||
|
||||
$form->addElement('text', 'field_variable', get_lang('FieldLabel'), array('class' => 'span5')); |
||||
$form->addElement('text', 'field_options', get_lang('FieldPossibleValues'), array('id' => 'field_options', 'class' => 'span6')); |
||||
if ($action == 'edit') { |
||||
if (in_array($defaults['field_type'], array(ExtraField::FIELD_TYPE_SELECT, ExtraField::FIELD_TYPE_DOUBLE_SELECT))) { |
||||
$url = Display::url(get_lang('EditExtraFieldOptions'), 'extra_field_options.php?type=course&field_id=' . $id); |
||||
$form->addElement('label', null, $url); |
||||
$form->freeze('field_options'); |
||||
} |
||||
} |
||||
$form->addElement('text', 'field_default_value', get_lang('FieldDefaultValue'), array('id' => 'field_default_value', 'class' => 'span5')); |
||||
|
||||
$group = array(); |
||||
$group[] = $form->createElement('radio', 'field_visible', null, get_lang('Yes'), 1); |
||||
$group[] = $form->createElement('radio', 'field_visible', null, get_lang('No'), 0); |
||||
$form->addGroup($group, '', get_lang('Visible'), '', false); |
||||
|
||||
$group = array(); |
||||
$group[] = $form->createElement('radio', 'field_changeable', null, get_lang('Yes'), 1); |
||||
$group[] = $form->createElement('radio', 'field_changeable', null, get_lang('No'), 0); |
||||
$form->addGroup($group, '', get_lang('FieldChangeability'), '', false); |
||||
|
||||
$group = array(); |
||||
$group[] = $form->createElement('radio', 'field_filter', null, get_lang('Yes'), 1); |
||||
$group[] = $form->createElement('radio', 'field_filter', null, get_lang('No'), 0); |
||||
$form->addGroup($group, '', get_lang('FieldFilter'), '', false); |
||||
|
||||
$form->addElement('text', 'field_order', get_lang('FieldOrder'), array('class' => 'span1')); |
||||
|
||||
if ($action == 'edit') { |
||||
$option = new CourseFieldOption('course'); |
||||
if ($defaults['field_type'] == ExtraField::FIELD_TYPE_DOUBLE_SELECT) { |
||||
$form->freeze('field_options'); |
||||
} |
||||
$defaults['field_options'] = $option->get_field_options_by_field_to_string($id); |
||||
$form->addElement('button', 'submit', get_lang('Modify'), 'class="save"'); |
||||
} else { |
||||
$defaults['field_visible'] = 0; |
||||
$defaults['field_changeable'] = 0; |
||||
$defaults['field_filter'] = 0; |
||||
$form->addElement('button', 'submit', get_lang('Add'), 'class="save"'); |
||||
} |
||||
|
||||
/*if (!empty($defaults['created_at'])) { |
||||
$defaults['created_at'] = api_convert_and_format_date($defaults['created_at']); |
||||
} |
||||
if (!empty($defaults['updated_at'])) { |
||||
$defaults['updated_at'] = api_convert_and_format_date($defaults['updated_at']); |
||||
}*/ |
||||
$form->setDefaults($defaults); |
||||
|
||||
// Setting the rules |
||||
$form->addRule('field_display_text', get_lang('ThisFieldIsRequired'), 'required'); |
||||
//$form->addRule('field_variable', get_lang('ThisFieldIsRequired'), 'required'); |
||||
$form->addRule('field_type', get_lang('ThisFieldIsRequired'), 'required'); |
||||
|
||||
return $form; |
||||
} |
||||
} |
||||
@ -0,0 +1,8 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
class CourseFieldOption extends ExtraFieldOption { |
||||
public function __construct() { |
||||
parent::__construct('course'); |
||||
} |
||||
} |
||||
@ -0,0 +1,11 @@ |
||||
<?php |
||||
|
||||
class CourseFieldValue extends ExtraFieldValue |
||||
{ |
||||
|
||||
public function __construct() |
||||
{ |
||||
parent::__construct('course'); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue