Skip to content

Commit

Permalink
Added some functions for the admin GUI
Browse files Browse the repository at this point in the history
  • Loading branch information
ikawhero committed Jan 12, 2007
1 parent 1a4f426 commit d052a81
Showing 1 changed file with 156 additions and 7 deletions.
163 changes: 156 additions & 7 deletions user/profile/lib.php
Expand Up @@ -13,7 +13,9 @@
define ('PROFILE_LOCKED_NO', '0');



/**
* Base class for the cusomisable profile fields.
*/
class profile_field_base {

var $datatype = ''; /// data type of this field
Expand Down Expand Up @@ -77,10 +79,8 @@ function profile_field_base($fieldid=0, $userid=0) {
}



/***** The following methods must be overwritten in the child classes *****/


/**
* Set the data type for this profile field
*/
Expand Down Expand Up @@ -178,10 +178,10 @@ function init() {
* @param object instance of the moodleform class
*/
function edit_field (&$form) {
$form->addElement('header', 'commonsettings', get_string('common'));
$form->addElement('header', '_commonsettings', get_string('profilecommonsettings'));
$this->edit_field_common($form);

$form->addElement('header', 'specificsettings', get_string('specific'));
$form->addElement('header', '_specificsettings', get_string('profilespecificsettings'));
$this->edit_field_specific($form);
}

Expand Down Expand Up @@ -221,7 +221,7 @@ function edit_field_common (&$form) {

unset($choices);
$choices = profile_list_categories();
$form->addElement('select', 'categoryid', get_string('category'), $choices);
$form->addElement('select', 'categoryid', get_string('profilecategory'), $choices);
$form->setType('categoryid', PARAM_INT);
}

Expand Down Expand Up @@ -470,6 +470,86 @@ function profile_list_datatypes() {
// return get_directory_list($CFG->dirroot.'/user/profile/field', '', false, true, false);
}

/**
* Change the sortorder of a field
* @param integer id of the field
* @param string direction of move
* @return boolean success of operation
*/
function profile_move_field ($id, $move='down') {
/// Get the field object
if (!($field = get_record('user_info_field', 'id', $id))) {
return false;
}
/// Count the number of fields in this category
$fieldcount = count_records_select('user_info_field', 'categoryid='.$field->categoryid);

/// Calculate the new sortorder
if ( ($move == 'up') and ($field->sortorder > 1)) {
$neworder = $field->sortorder - 1;
} elseif ( ($move == 'down') and ($field->sortorder < $fieldcount)) {
$neworder = $field->sortorder + 1;
} else {
return false;
}

/// Retrieve the field object that is currently residing in the new position
if ($swapfield = get_record('user_info_field', 'categoryid', $field->categoryid, 'sortorder', $neworder)) {

/// Swap the sortorders
$swapfield->sortorder = $field->sortorder;
$field->sortorder = $neworder;

/// Update the field records
if (update_record('user_info_field', $field) and update_record('user_info_field', $swapfield)) {
return true;
}
}

return false;
}

/**
* Change the sortorder of a category
* @param integer id of the category
* @param string direction of move
* @return boolean success of operation
*/
function profile_move_category ($id, $move='down') {
/// Get the category object
if (!($category = get_record('user_info_category', 'id', $id))) {
return false;
}

/// Count the number of categories
$categorycount = count_records_select('user_info_category', '1');

/// Calculate the new sortorder
if ( ($move == 'up') and ($category->sortorder > 1)) {
$neworder = $category->sortorder - 1;
} elseif ( ($move == 'down') and ($category->sortorder < $categorycount)) {
$neworder = $category->sortorder + 1;
} else {
return false;
}

/// Retrieve the category object that is currently residing in the new position
if ($swapcategory = get_record('user_info_category', 'sortorder', $neworder)) {

/// Swap the sortorders
$swapcategory->sortorder = $category->sortorder;
$category->sortorder = $neworder;

/// Update the category records
if (update_record('user_info_category', $category) and update_record('user_info_category', $swapcategory)) {
return true;
}
}

return false;
}


/**
* Retrieve a list of categories and ids suitable for use in a form
* @return array
Expand All @@ -481,12 +561,60 @@ function profile_list_categories() {
return $categories;
}

/**
* Delete a profile category
* @param integer id of the category to be deleted
* @return boolean success of operation
*/
function profile_delete_category ($id) {
/// Retrieve the category
if (!($category = get_record('user_info_category', 'id', $id))) {
return false;
}

/// Retrieve the next category up
if ( !($newcategory = get_record('user_info_category', 'sortorder', ($category->sortorder - 1))) ) {

/// Retrieve the next category down
if (!($newcategory = get_record('user_info_category', 'sortorder', ($category->sortorder + 1))) ) {

/// We cannot find any other categories next to current one:
/// 1. The sortorder values are incongruous which means a bug somewhere
/// 2. We are the only category => cannot delete this category!
return false;
}
}

/// Does the category contain any fields
if (count_records('user_info_field', 'categoryid', $category->id) > 0) {
/// Move fields to the new category
$sortorder = count_records('user_info_field', 'categoryid', $newcategory->id);

if ($fields = get_records('user_info_field', 'categoryid', $category->id)) {
foreach ($fields as $field) {
$sortorder++;
$field->sortorder = $sortorder;
$field->categoryid = $newcategory->id;
update_record('user_info_field', $field);
}
}
}

/// Finally we get to delete the category
if (delete_records('user_info_category', 'id', $category->id) !== false) {
profile_reorder_categories();
return true;
} else {
return false;
}
}

/**
* Reorder the profile fields within a given category starting
* at the field at the given startorder
* @param integer id of the category
* @param integer starting order
* $return integer number of fields reordered
* @return integer number of fields reordered
*/
function profile_reorder_fields($categoryid, $startorder=1) {
$count = 0;
Expand All @@ -503,4 +631,25 @@ function profile_reorder_fields($categoryid, $startorder=1) {
return $count;
}

/**
* Reorder the profile categoriess starting at the category
* at the given startorder
* @param integer starting order
* @return integer number of categories reordered
*/
function profile_reorder_categories($startorder=1) {
$count = 0;
$sortorder = $startorder;

if ($categories = get_records_select('user_info_category', 'sortorder>='.$startorder, 'sortorder ASC')) {
foreach ($categories as $cat) {
$cat->sortorder = $sortorder;
update_record('user_info_category', $cat);
$sortorder++;
$count++;
}
}
return $count;
}

?>

0 comments on commit d052a81

Please sign in to comment.