Improving extra field management, with 1 script we can manage all extra fields (course, session, question) see BT#6098
parent
b5acc6cb3b
commit
3b60576f0c
@ -0,0 +1,185 @@ |
||||
<?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')); |
||||
|
||||
$tool_name = null; |
||||
|
||||
$action = isset($_GET['action']) ? $_GET['action'] : null; |
||||
|
||||
$extraFieldType = isset($_REQUEST['type']) ? $_REQUEST['type'] : null; |
||||
|
||||
if (!in_array($extraFieldType, ExtraField::getValidExtraFieldTypes())) { |
||||
api_not_allowed(); |
||||
} |
||||
|
||||
$check = Security::check_token('request'); |
||||
$token = Security::get_token(); |
||||
|
||||
$obj = new ExtraField($extraFieldType); |
||||
|
||||
$obj->setupBreadcrumb($interbreadcrumb, $action); |
||||
|
||||
//jqgrid will use this URL to do the selects |
||||
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_extra_fields&type='.$extraFieldType; |
||||
|
||||
//The order is important you need to check the the $column variable in the model.ajax.php file |
||||
$columns = $obj->getJqgridColumnNames(); |
||||
|
||||
//Column config |
||||
$column_model = $obj->getJqgridColumnModel(); |
||||
|
||||
//Autowidth |
||||
$extra_params['autowidth'] = 'true'; |
||||
//height auto |
||||
$extra_params['height'] = 'auto'; |
||||
$extra_params['sortname'] = 'field_order'; |
||||
|
||||
$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).' |
||||
|
||||
$("#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($tool_name); |
||||
|
||||
// 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().'?type='.$obj->type.'&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().'?type='.$obj->type.'">'.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().'?type='.$obj->type.'&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['name']), false); |
||||
} |
||||
$obj->display(); |
||||
} else { |
||||
echo '<div class="actions">'; |
||||
echo '<a href="'.api_get_self().'?type='.$obj->type.'">'.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 '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(); |
||||
@ -1,200 +0,0 @@ |
||||
<?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')); |
||||
|
||||
$tool_name = null; |
||||
|
||||
$action = isset($_GET['action']) ? $_GET['action'] : null; |
||||
|
||||
$check = Security::check_token('request'); |
||||
$token = Security::get_token(); |
||||
|
||||
if ($action == 'add') { |
||||
$interbreadcrumb[]=array('url' => 'session_fields.php','name' => get_lang('SessionFields')); |
||||
$interbreadcrumb[]=array('url' => '#','name' => get_lang('Add')); |
||||
} elseif ($action == 'edit') { |
||||
$interbreadcrumb[]=array('url' => 'session_fields.php','name' => get_lang('SessionFields')); |
||||
$interbreadcrumb[]=array('url' => '#','name' => get_lang('Edit')); |
||||
} else { |
||||
$interbreadcrumb[]=array('url' => '#','name' => get_lang('SessionFields')); |
||||
} |
||||
|
||||
//jqgrid will use this URL to do the selects |
||||
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_extra_fields&type=session'; |
||||
|
||||
//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) |
||||
$action_links = '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('session_fields', $url, $columns, $column_model, $extra_params, array(), $action_links,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($tool_name); |
||||
|
||||
$obj = new SessionField(); |
||||
|
||||
// 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['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(); |
||||
} |
||||
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(); |
||||
@ -1,105 +1,10 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
class SessionField extends ExtraField { |
||||
|
||||
public function __construct() { |
||||
class SessionField extends ExtraField |
||||
{ |
||||
public function __construct() |
||||
{ |
||||
parent::__construct('session'); |
||||
} |
||||
|
||||
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('session_fields'); |
||||
} |
||||
|
||||
public function return_form($url, $action) { |
||||
$form = new FormValidator('session_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=session&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 SessionFieldOption('session'); |
||||
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; |
||||
} |
||||
} |
||||
Loading…
Reference in new issue