Uploaded image for project: 'Moodle'
  1. Moodle
  2. MDL-70058

Textarea custom field can't be updated by core_course_update_courses webservice

XMLWordPrintable

    • MOODLE_39_STABLE, MOODLE_402_STABLE, MOODLE_403_STABLE
    • MOODLE_402_STABLE, MOODLE_403_STABLE
    • MDL-70058-403
    • Hide

      Setup

      1. Log in as admin
      2. Navigate to Courses > Course custom fields in site administration
      3. Add a new category (if none exists)
      4. Add a new Text area custom field:
        • Name: My text area
        • Shortname: mytextarea
      5. Add a new Short text custom field:
        • Name: My short text
        • Shortname: myshorttext
      6. Enable web services (Site admin > General > Advanced features > Enable web services)
      7. Create a new custom external service: (Site admin > Server > Web services > External services)
        • Name: Course management
        • Enabled: Yes
      8. Add the following functions to the new service:
        • core_course_create_courses
        • core_course_update_courses
      9. Create a token for the admin user to use the new service

      Create course with custom fields

      1. Execute the following:

        $ curl --silent "<WWWROOT>/webservice/rest/server.php?moodlewsrestformat=json" --data "wstoken=<TOKEN>&wsfunction=core_course_create_courses&courses[0][shortname]=ENG&courses[0][fullname]=English&courses[0][categoryid]=1&courses[0][customfields][0][shortname]=mytextarea&courses[0][customfields][0][value]=Textarea&courses[0][customfields][1][shortname]=myshorttext&courses[0][customfields][1][value]=Shorttext" | python -m "json.tool"
        

      2. Confirm you get back the following (make a note of the returned course ID):

        [
            {
                "id": 3,
                "shortname": "ENG"
            }
        ]
        

      3. Manually navigate to

        <WWWROOT>/course/index.php

      4. Confirm the course you just created has the following values:
        • My text area: Textarea
        • My short text: Shorttext

      Update course with custom fields

      1. Execute the following:

        $ curl --silent "<WWWROOT>/webservice/rest/server.php?moodlewsrestformat=json" --data "wstoken=<TOKEN>&wsfunction=core_course_update_courses&courses[0][id]=<COURSEID>&courses[0][customfields][0][shortname]=mytextarea&courses[0][customfields][0][value]=Potatoes&courses[0][customfields][1][shortname]=myshorttext&courses[0][customfields][1][value]=Carrots" | python -m "json.tool"
        

      2. Confirm you get back the following:

        {
            "warnings": []
        }
        

      3. Manually navigate to

        <WWWROOT>/course/index.php

      4. Confirm the course you just created has the following values:
        • My text area: Potatoes
        • My short text: Carrots
      Show
      Setup Log in as admin Navigate to Courses > Course custom fields in site administration Add a new category (if none exists) Add a new Text area custom field: Name: My text area Shortname: mytextarea Add a new Short text custom field: Name: My short text Shortname: myshorttext Enable web services (Site admin > General > Advanced features > Enable web services) Create a new custom external service: (Site admin > Server > Web services > External services) Name: Course management Enabled: Yes Add the following functions to the new service: core_course_create_courses core_course_update_courses Create a token for the admin user to use the new service Create course with custom fields Execute the following: $ curl --silent "<WWWROOT>/webservice/rest/server.php?moodlewsrestformat=json" --data "wstoken=<TOKEN>&wsfunction=core_course_create_courses&courses[0][shortname]=ENG&courses[0][fullname]=English&courses[0][categoryid]=1&courses[0][customfields][0][shortname]=mytextarea&courses[0][customfields][0][value]=Textarea&courses[0][customfields][1][shortname]=myshorttext&courses[0][customfields][1][value]=Shorttext" | python -m "json.tool" Confirm you get back the following (make a note of the returned course ID): [ { "id": 3, "shortname": "ENG" } ] Manually navigate to <WWWROOT>/course/index.php Confirm the course you just created has the following values: My text area: Textarea My short text: Shorttext Update course with custom fields Execute the following: $ curl --silent "<WWWROOT>/webservice/rest/server.php?moodlewsrestformat=json" --data "wstoken=<TOKEN>&wsfunction=core_course_update_courses&courses[0][id]=<COURSEID>&courses[0][customfields][0][shortname]=mytextarea&courses[0][customfields][0][value]=Potatoes&courses[0][customfields][1][shortname]=myshorttext&courses[0][customfields][1][value]=Carrots" | python -m "json.tool" Confirm you get back the following: { "warnings": [] } Manually navigate to <WWWROOT>/course/index.php Confirm the course you just created has the following values: My text area: Potatoes My short text: Carrots

      Custom fields of type textarea are not updated when calling course update core webservice without a warning. They are just ignored.

      Looking into the code, textarea data_controller looks for {customfieldshortname}_editor param to be an array with text and format keys, but webservice allows only external value of PARAM_ALPHANUMEXT type.

      I'm not sure if the bug belongs to core webservice or to customfield handler, but as textarea is kind of special type (ie. wants _editor appended to shortname) I think it should care of being able to update through webservice.

            pholden Paul Holden
            carreraj Juan Carrera
            Carlos Escobedo Carlos Escobedo
            Jun Pataleta Jun Pataleta
            Kim Jared Lucas Kim Jared Lucas
            Votes:
            6 Vote for this issue
            Watchers:
            29 Start watching this issue

              Created:
              Updated:
              Resolved:

                Estimated:
                Original Estimate - 0 minutes
                0m
                Remaining:
                Remaining Estimate - 0 minutes
                0m
                Logged:
                Time Spent - 5 hours, 35 minutes
                5h 35m

                  Error rendering 'clockify-timesheets-time-tracking-reports:timer-sidebar'. Please contact your Jira administrators.