Browse Source

Add manage for course extra field - refs BT#9063

Angel Fernando Quiroz Campos 10 years ago
parent
commit
e10f34fb79

+ 275 - 0
main/admin/course_fields.php

@@ -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();

+ 3 - 0
main/admin/index.php

@@ -140,6 +140,9 @@ if (api_is_platform_admin()) {
     if (isset($extAuthSource) && isset($extAuthSource['ldap']) && count($extAuthSource['ldap']) > 0) {
         $items[] = array('url'=>'ldap_import_students.php', 'label' => get_lang('ImportLDAPUsersIntoCourse'));
     }
+
+    $items[] = array('url'=>'course_fields.php', 	'label' => get_lang('ManageCourseFields'));
+
     $blocks['courses']['items'] = $items;
     $blocks['courses']['extra'] = null;
 

+ 105 - 0
main/inc/lib/CourseField.class.php

@@ -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;
+    }
+}

+ 8 - 0
main/inc/lib/CourseFieldOption.class.php

@@ -0,0 +1,8 @@
+<?php
+/* For licensing terms, see /license.txt */
+
+class CourseFieldOption extends ExtraFieldOption {
+    public function __construct() {
+        parent::__construct('course');        
+    }     
+}

+ 11 - 0
main/inc/lib/CourseFieldValue.class.php

@@ -0,0 +1,11 @@
+<?php
+
+class CourseFieldValue extends ExtraFieldValue
+{
+
+    public function __construct()
+    {
+        parent::__construct('course');
+    }
+
+}

+ 3 - 0
main/inc/lib/autoload.class.php

@@ -134,6 +134,9 @@ class Autoload
         $result['CourseDescription\UploadFileForm'] = '/main/course_description/upload_file_form.class.php';
         $result['CourseEntity'] = '/main/inc/lib/course_entity.class.php';
         $result['CourseEntityRepository'] = '/main/inc/lib/course_entity_repository.class.php';
+        $result['CourseField'] = '/main/inc/lib/CourseField.class.php';
+        $result['CourseFieldOption'] = '/main/inc/lib/CourseFieldOption.class.php';
+        $result['CourseFieldValue'] = '/main/inc/lib/CourseFieldValue.class.php';
         $result['CourseHome'] = '/main/inc/lib/course_home.lib.php';
         $result['CourseManager'] = '/main/inc/lib/course.lib.php';
         $result['CourseNoticeController'] = '/main/course_notice/course_notice_controller.class.php';

+ 1 - 0
main/inc/lib/database.constants.inc.php

@@ -106,6 +106,7 @@ 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');
 define('TABLE_MAIN_SESSION_FIELD',          'session_field');
 define('TABLE_MAIN_SESSION_FIELD_OPTIONS',  'session_field_options');