Пример #1
0
 /**
  * Set up an ELIS custom field category.
  * @return field_category The created field category.
  */
 protected function set_up_elis_field_category()
 {
     $data = new stdClass();
     $data->name = \local_eliscore\context\helper::get_class_for_level(CONTEXT_ELIS_USER) . ' Test';
     $category = new field_category($data);
     $category->save();
     $categorycontext = new field_category_contextlevel();
     $categorycontext->categoryid = $category->id;
     $categorycontext->contextlevel = CONTEXT_ELIS_USER;
     $categorycontext->save();
     return $category;
 }
 /**
  * Test that the function will return the existing category if one exists for the given name and contextlevel.
  */
 public function test_return_existing()
 {
     global $DB;
     $name = 'Test Category';
     $contextlevel = CONTEXT_ELIS_USER;
     $cat = new field_category();
     $cat->name = $name;
     $cat->save();
     $catctx = new field_category_contextlevel();
     $catctx->categoryid = $cat->id;
     $catctx->contextlevel = $contextlevel;
     $catctx->save();
     $this->assertNotEmpty($this->get_for_name_and_contextlevel($name, $contextlevel));
     $cat2 = field_category::ensure_exists_for_contextlevel($name, $contextlevel);
     $this->assertNotEmpty($cat2);
     $this->assertEquals($cat->id, $cat2->id);
     $this->assertEquals($cat->name, $cat2->name);
 }
 /**
  * Create the test custom profile field, category and owner
  *
  * @param string $contextlevelname The name of the custom context level to create the field at
  * @param string $datatype The string identifier of the data type to use
  * @param string $uitype The string identifier of the UI / control type to use
  * @param boolean $multivalued Set to true to make field multivalued, otherwise false
  * @param mixed $options Array of menu options, or null for none
  * @param int $maxlength The maximum data length, or null for none
  * @return int The id of the created field
  */
 private function create_test_field($contextlevelname, $datatype, $uitype, $multivalued, $options, $maxlength, $inctime)
 {
     global $CFG;
     require_once $CFG->dirroot . '/local/elisprogram/lib/setup.php';
     require_once elis::lib('data/customfield.class.php');
     // Category.
     $fieldcategory = new field_category(array('name' => 'testcategoryname'));
     $fieldcategory->save();
     // Category contextlevel.
     $contextlevel = \local_eliscore\context\helper::get_level_from_name($contextlevelname);
     $fieldcategorycontextlevel = new field_category_contextlevel(array('categoryid' => $fieldcategory->id, 'contextlevel' => $contextlevel));
     $fieldcategorycontextlevel->save();
     // Field.
     $field = new field(array('shortname' => 'testfieldshortname', 'name' => 'testfieldname', 'categoryid' => $fieldcategory->id, 'datatype' => $datatype));
     if ($multivalued) {
         // Enable multivalued ability.
         $field->multivalued = true;
     }
     $field->save();
     // Field contextlevel.
     $fieldcontextlevel = new field_contextlevel(array('fieldid' => $field->id, 'contextlevel' => $contextlevel));
     $fieldcontextlevel->save();
     // Field owner.
     $ownerdata = array('control' => $uitype);
     if ($options !== null) {
         // Set options.
         $ownerdata['options'] = implode("\n", $options);
     }
     if ($maxlength !== null) {
         // Set max length.
         $ownerdata['maxlength'] = $maxlength;
     }
     if ($inctime !== null) {
         $ownerdata['inctime'] = $inctime;
     }
     field_owner::ensure_field_owner_exists($field, 'manual', $ownerdata);
     return $field->id;
 }
Пример #4
0
/**
 * Function to move any custom fields with an invalid category
 * into a category called Miscellaneous
 *
 */
function pm_fix_orphaned_fields()
{
    global $DB;
    $misc_cat = get_string('misc_category', 'local_elisprogram');
    //set up context array
    $context_array = \local_eliscore\context\helper::get_all_levels();
    foreach ($context_array as $contextlevel => $contextname) {
        //find all fields with non existant category assignments
        $sql = "SELECT field.id\n                  FROM {" . field::TABLE . "} field\n                  JOIN {" . field_contextlevel::TABLE . "} ctx ON ctx.fieldid = field.id AND ctx.contextlevel = ?\n                  WHERE NOT EXISTS (\n                    SELECT 'x' FROM {" . field_category::TABLE . "} category\n                    WHERE category.id = field.categoryid)";
        $params = array($contextlevel);
        $rs = $DB->get_recordset_sql($sql, $params);
        //if any are found - then check if miscellaneous category exists - if not, create it
        foreach ($rs as $field) {
            $sql = "SELECT category.id\n                    FROM {" . field_category::TABLE . "} category\n                    JOIN {" . field_category_contextlevel::TABLE . "} categorycontext\n                      ON categorycontext.categoryid = category.id\n                    WHERE categorycontext.contextlevel = ?\n                      AND category.name = ?";
            $params = array($contextlevel, $misc_cat);
            $categoryid = $DB->get_field_sql($sql, $params);
            //create a miscellaneous category if it doesn't already exist
            if (!$categoryid) {
                // create an empty category
                $category = new field_category(array('name' => $misc_cat));
                $category->save();
                $categorycontext = new field_category_contextlevel();
                $categorycontext->categoryid = $category->id;
                $categorycontext->contextlevel = $contextlevel;
                $categorycontext->save();
                $categoryid = $category->id;
            }
            $field = new field($field->id);
            // set the field category to the Miscellaneous category
            $field->categoryid = $categoryid;
            $field->save();
        }
        $rs->close();
    }
}
 /**
  * Create the test custom profile field and owner
  *
  * @param string $contextlevelname The name of the custom context level to create the field at
  * @param string $name PM custom field shortname
  * @param string $datatype The string identifier of the data type to use
  * @param string $uitype The string identifier of the UI / control type to use
  * @param int $categoryid PM custom field category id
  * @param string $options Extra parameter, used for select options
  * @param string $defaultdata Default value.
  *
  * @return int The id of the created field
  */
 private function create_test_field($contextlevelname = 'user', $name = 'testfieldname', $datatype, $uitype, $categoryid, $options = null, $defaultdata = null)
 {
     global $CFG;
     require_once $CFG->dirroot . '/local/elisprogram/lib/setup.php';
     require_once elis::lib('data/customfield.class.php');
     // Category contextlevel.
     $contextlevel = \local_eliscore\context\helper::get_level_from_name($contextlevelname);
     $fieldcategorycontextlevel = new field_category_contextlevel(array('categoryid' => $categoryid, 'contextlevel' => $contextlevel));
     $fieldcategorycontextlevel->save();
     // Field.
     $field = new field(array('shortname' => 'testfieldshortname', 'name' => $name, 'categoryid' => $categoryid, 'datatype' => $datatype));
     $field->save();
     // Field_data if a default value needs to be set.
     if ($defaultdata !== null) {
         $classname = 'field_data_' . $datatype;
         $fielddata = new $classname(array('fieldid' => $field->id, 'data' => $defaultdata));
         $fielddata->save();
     }
     // Field contextlevel.
     $fieldcontextlevel = new field_contextlevel(array('fieldid' => $field->id, 'contextlevel' => $contextlevel));
     $fieldcontextlevel->save();
     // Field owner.
     $ownerdata = array('control' => $uitype);
     if ($options !== null) {
         // Set options.
         $options = is_array($options) ? implode("\n", $options) : $options;
         $ownerdata['options'] = $options;
     }
     field_owner::ensure_field_owner_exists($field, 'manual', $ownerdata);
     return $field;
 }
Пример #6
0
 /**
  * Create a test custom field category.
  * @return field_category The test category.
  */
 protected function create_field_category($context)
 {
     $data = new stdClass();
     $data->name = \local_eliscore\context\helper::get_class_for_level($context) . ' Test';
     $category = new field_category($data);
     $category->save();
     $categorycontext = new field_category_contextlevel();
     $categorycontext->categoryid = $category->id;
     $categorycontext->contextlevel = $context;
     $categorycontext->save();
     return $category;
 }
Пример #7
0
 /**
  * Ensure a category exists with a given name for a given contextlevel.
  * @param string $name The name of the category.
  * @param int $contextlevel The contextlevel.
  * @return field_category Either the existing or the new field_category object.
  */
 public static function ensure_exists_for_contextlevel($name, $contextlevel)
 {
     if (empty($name)) {
         return null;
     }
     if (empty($contextlevel) || !is_int($contextlevel)) {
         return null;
     }
     global $DB;
     $sql = 'SELECT cat.id
               FROM {' . static::TABLE . '} cat
               JOIN {' . field_category_contextlevel::TABLE . '} catctx ON cat.id = catctx.categoryid
              WHERE cat.name = ?
                    AND catctx.contextlevel = ?';
     $existingcat = $DB->get_records_sql($sql, array($name, $contextlevel));
     if (!empty($existingcat)) {
         $existingcat = current($existingcat);
         $category = new field_category($existingcat->id);
         $category->load();
         return $category;
     } else {
         $category = new field_category();
         $category->name = $name;
         $category->save();
         $catctx = new field_category_contextlevel();
         $catctx->categoryid = $category->id;
         $catctx->contextlevel = $contextlevel;
         $catctx->save();
         return $category;
     }
 }
Пример #8
0
 function display_editcategory()
 {
     require_once elispm::file('form/fieldcategoryform.class.php');
     $level = $this->required_param('level', PARAM_ACTION);
     $ctxlvl = \local_eliscore\context\helper::get_level_from_name($level);
     if (!$ctxlvl) {
         print_error('invalid_context_level', 'local_elisprogram');
     }
     $id = $this->optional_param('id', 0, PARAM_INT);
     $tmppage = new customfieldpage(array('level' => $level, 'id' => $id, 'action' => 'editcategory', 'level' => $level));
     $form = new fieldcategoryform($tmppage->url);
     if ($form->is_cancelled()) {
         $tmppage = new customfieldpage(array('level' => $level));
         redirect($tmppage->url, get_string('edit_cancelled', 'local_elisprogram'));
     } else {
         if ($data = $form->get_data()) {
             $data->id = $id;
             $category = new field_category($data);
             if ($category->id) {
                 $category->save();
             } else {
                 $category->save();
                 // assume each category only belongs to one context level (for now)
                 $categorycontext = new field_category_contextlevel();
                 $categorycontext->categoryid = $category->id;
                 $categorycontext->contextlevel = $ctxlvl;
                 $categorycontext->save();
             }
             $tmppage = new customfieldpage(array('level' => $level));
             redirect($tmppage->url, get_string('field_category_saved', 'local_elisprogram', $category->name));
         } else {
             if ($id) {
                 $category = new field_category($id);
                 $form->set_data($category);
             }
             $form->display();
         }
     }
 }