Exemple #1
0
/**
 * Run all upgrade steps from before elis 2.6.
 *
 * @param int $oldversion The currently installed version of the old component.
 * @return bool Success/Failure.
 */
function elisprogram_usetclassify_pre26upgradesteps($oldversion)
{
    global $CFG, $THEME, $DB;
    $dbman = $DB->get_manager();
    $result = true;
    if ($oldversion < 2011071400) {
        // Rename field.
        $field = field::find(new field_filter('shortname', '_elis_cluster_classification'));
        if ($field->valid()) {
            $field = $field->current();
            $field->shortname = USERSET_CLASSIFICATION_FIELD;
            if ($field->name == 'Cluster classification') {
                // Rhe field name hasn't been changed from the old default.
                $field->name = get_string('classification_field_name', 'elisprogram_usetclassify');
            }
            $field->save();
            $category = $field->category;
            if ($category->name == 'Cluster classification') {
                // The field name hasn't been changed from the old default.
                $category->name = get_string('classification_category_name', 'elisprogram_usetclassify');
                $category->save();
            }
        }
        upgrade_plugin_savepoint($result, 2011071400, 'pmplugins', 'userset_classification');
    }
    if ($result && $oldversion < 2011101200) {
        $field = field::find(new field_filter('shortname', USERSET_CLASSIFICATION_FIELD));
        if ($field->valid()) {
            $field = $field->current();
            if ($owner = new field_owner(!isset($field->owners) || !isset($field->owners['manual']) ? false : $field->owners['manual'])) {
                $owner->fieldid = $field->id;
                $owner->plugin = 'manual';
                //$owner->exclude = 0; // TBD
                $owner->param_help_file = 'elisprogram_usetclassify/cluster_classification';
                $owner->save();
            }
        }
        upgrade_plugin_savepoint($result, 2011101200, 'pmplugins', 'userset_classification');
    }
    if ($result && $oldversion < 2011101800) {
        // Userset -> 'User Set'.
        $field = field::find(new field_filter('shortname', USERSET_CLASSIFICATION_FIELD));
        if ($field->valid()) {
            $field = $field->current();
            if (stripos($field->name, 'Userset') !== false) {
                $field->name = str_ireplace('Userset', 'User Set', $field->name);
                $field->save();
            }
            $category = $field->category;
            if (stripos($category->name, 'Userset') !== false) {
                $category->name = str_ireplace('Userset', 'User Set', $category->name);
                $category->save();
            }
        }
        upgrade_plugin_savepoint($result, 2011101800, 'pmplugins', 'userset_classification');
    }
    if ($result && $oldversion < 2011110300) {
        // Make sure to rename the default classification name from "Cluster" to "User set".
        require_once elispm::file('plugins/usetclassify/usersetclassification.class.php');
        // Make sure there are no custom fields with invalid categories.
        pm_fix_orphaned_fields();
        $field = field::find(new field_filter('shortname', USERSET_CLASSIFICATION_FIELD));
        if ($field->valid()) {
            $field = $field->current();
            $category = $field->category;
            $default = usersetclassification::find(new field_filter('shortname', 'regular'));
            if ($default->valid()) {
                $default = $default->current();
                $default->name = get_string('cluster', 'local_elisprogram');
                $default->save();
            }
            // Upgrade field owner data for the default User Set field.
            $field = field::ensure_field_exists_for_context_level($field, CONTEXT_ELIS_USERSET, $category);
            $owners = field_owner::find(new field_filter('fieldid', $field->id));
            if ($owners->valid()) {
                foreach ($owners as $owner) {
                    if ($owner->plugin == 'cluster_classification') {
                        $owner->plugin = 'userset_classification';
                        $owner->save();
                    } else {
                        if ($owner->plugin == 'manual') {
                            $owner->param_options_source = 'userset_classifications';
                            $owner->param_help_file = 'elisprogram_usetclassify/cluster_classification';
                            $owner->save();
                        }
                    }
                }
            }
            upgrade_plugin_savepoint($result, 2011110300, 'pmplugins', 'userset_classification');
        }
    }
    return $result;
}
 /**
  * Validate that an invalid category for a field causes a field
  * to be moved to the Miscellaneous category
  */
 public function test_orphanedcustomfieldsmovedtomiscellaneouscategory()
 {
     global $CFG, $DB;
     $contextlevel = CONTEXT_ELIS_USERSET;
     $misccat = get_string('misc_category', 'local_elisprogram');
     // Set up a custom field with an invalid category.
     $field = new field(array('name' => 'testcustomfieldname', 'datatype' => 'char', 'categoryid' => '99', 'multivalued' => 1));
     $field->save();
     // Set up the default data.
     $defaultparams = array('fieldid' => $field->id, 'contextid' => $contextlevel, 'data' => 'value1');
     $defaultdata = new field_data_char($defaultparams);
     $defaultdata->save();
     // Also create a contextlevel record for the field.
     $fieldcontext = new field_contextlevel();
     $fieldcontext->fieldid = $field->id;
     $fieldcontext->contextlevel = $contextlevel;
     $fieldcontext->save();
     // Call function to check if this is an orphaned field.
     pm_fix_orphaned_fields();
     // Assert that the field exists.
     $result = $DB->get_field(field::TABLE, 'id', array('id' => $field->id));
     $this->assertEquals($field->id, $result);
     // Assert that the field is in the correct context still.
     $sql = "SELECT field.id\n                  FROM {" . field::TABLE . "} field\n                  JOIN {" . field_contextlevel::TABLE . "} ctx\n                    ON ctx.fieldid = field.id\n                 WHERE ctx.contextlevel = ?\n                   AND field.id = ?";
     $params = array($contextlevel, $field->id);
     $result = $DB->get_field_sql($sql, $params);
     $this->assertEquals($field->id, $result);
     // Assert that the Miscellaneous category exists.
     $result = $DB->get_field(field_category::TABLE, 'name', array('name' => $misccat));
     $this->assertEquals($misccat, $result);
     // Assert that the Miscellaneous category is in the correct context.
     $sql = "SELECT category.name\n                  FROM {" . field_category::TABLE . "} category\n                  JOIN {" . field_category_contextlevel::TABLE . "} category_context\n                    ON category.id = category_context.categoryid\n                 WHERE category_context.contextlevel = ?\n                   AND category.name = ?";
     $params = array($contextlevel, $misccat);
     $result = $DB->get_field_sql($sql, $params);
     $this->assertEquals($misccat, $result);
     // Assert that the field is in the Miscellaneous category.
     $sql = "SELECT field.id\n                  FROM {" . field::TABLE . "} field\n                  JOIN {" . field_category::TABLE . "} category\n                    ON category.id = field.categoryid\n                 WHERE field.id = ?\n                   AND category.name = ?";
     $params = array($field->id, $misccat);
     $result = $DB->get_field_sql($sql, $params);
     $this->assertEquals($field->id, $result);
     // Now check that an invalid field will be moved to the existing Miscellaneous category
     // and not create a second Miscellaneous category.
     // Set up a custom field with an invalid category.
     $field = new field(array('name' => 'testcustomfieldname2', 'datatype' => 'char', 'categoryid' => '109'));
     $field->save();
     // Set up the default data.
     $defaultparams = array('fieldid' => $field->id, 'contextid' => $contextlevel, 'data' => 'value2');
     $defaultdata = new field_data_char($defaultparams);
     $defaultdata->save();
     // Also create a contextlevel record for the field.
     $fieldcontext = new field_contextlevel();
     $fieldcontext->fieldid = $field->id;
     $fieldcontext->contextlevel = $contextlevel;
     $fieldcontext->save();
     // Call function to check if this is an orphaned field.
     pm_fix_orphaned_fields();
     // Assert that only one Miscellaneous category exists.
     $result = $DB->get_records(field_category::TABLE, array('name' => $misccat));
     $this->assertEquals(1, count($result));
     // Assert that the field is in the Miscellaneous category.
     $sql = "SELECT field.id\n                  FROM {" . field::TABLE . "} field\n                  JOIN {" . field_category::TABLE . "} category\n                    ON category.id = field.categoryid\n                 WHERE field.id = ?\n                   AND category.name = ?";
     $params = array($field->id, $misccat);
     $result = $DB->get_field_sql($sql, $params);
     $this->assertEquals($field->id, $result);
 }