Example #1
0
 public static function delete_for_curriculum($id)
 {
     //look up and delete associated tracks
     if ($tracks = track_get_listing('name', 'ASC', 0, 0, '', '', $id)) {
         foreach ($tracks as $track) {
             $record = new track($track->id);
             $record->delete();
         }
     }
 }
Example #2
0
/**
 * Dynamically loads child menu items for a curriculum entity
 *
 * @param   int             $id                    The entity id
 * @param   int             $parent_cluster_id     The last cluster passed going down the elisadmin tree, or 0 if none
 * @param   int             $parent_curriculum_id  The last curriculum passed going down the elisadmin tree, or 0 if none
 * @param   int             $num_block_icons       Max number of entries to display
 * @param   string          $parent_path           Path of parent curriculum elements in the tree
 * @return  menuitem array                         The appropriate child items
 */
function block_elisadmin_load_menu_children_curriculum($id, $parent_cluster_id, $parent_curriculum_id, $num_block_icons, $parent_path = '')
{
    global $CFG;
    //page dependencies
    require_once elispm::file('pmclasspage.class.php');
    $result_items = array();
    /*****************************************
     * Curriculum - Course Associations
     *****************************************/
    $course_css_class = block_elisadmin_get_item_css_class('course_instance');
    //permissions filter
    $course_filter = array('contexts' => coursepage::get_contexts('local/elisprogram:course_view'));
    $listing = curriculumcourse_get_listing($id, 'position', 'ASC', 0, $num_block_icons, '', '', $course_filter);
    foreach ($listing as $item) {
        $item->id = $item->courseid;
        $params = array('id' => $item->id, 'action' => 'view');
        //count associated classes
        $class_contexts = pmclasspage::get_contexts('local/elisprogram:class_view');
        $class_count = pmclass_count_records('', '', $item->id, false, $class_contexts, $parent_cluster_id);
        $isLeaf = empty($class_count);
        $result_items[] = block_elisadmin_get_menu_item('course', $item, 'root', $course_css_class, $parent_cluster_id, $parent_curriculum_id, $params, $isLeaf, $parent_path);
    }
    unset($listing);
    //summary item
    $num_records = curriculumcourse_count_records($id, '', '', $course_filter);
    if ($num_block_icons < $num_records) {
        $params = array('id' => $id);
        $result_items[] = block_elisadmin_get_menu_summary_item('curriculumcourse', $course_css_class, $num_records - $num_block_icons, $params, '', $parent_path);
    }
    /*****************************************
     * Curriculum - Track Associations
     *****************************************/
    $track_css_class = block_elisadmin_get_item_css_class('track_instance');
    //permissions filter
    $track_contexts = trackpage::get_contexts('local/elisprogram:track_view');
    if ($track_records = track_get_listing('name', 'ASC', 0, $num_block_icons, '', '', $id, $parent_cluster_id, $track_contexts)) {
        foreach ($track_records as $track_record) {
            $params = array('id' => $track_record->id, 'action' => 'view');
            //count associated classes
            $class_contexts = array('contexts' => pmclasspage::get_contexts('local/elisprogram:class_view'));
            $class_count = track_assignment_count_records($track_record->id, '', '', $class_contexts);
            //count associated clusters
            $cluster_filter = array('contexts' => usersetpage::get_contexts('local/elisprogram:userset_view'));
            $cluster_count = clustertrack::count_clusters($track_record->id, $parent_cluster_id, $cluster_filter);
            $isLeaf = empty($class_count) && empty($cluster_count);
            $result_items[] = block_elisadmin_get_menu_item('track', $track_record, 'root', $track_css_class, $parent_cluster_id, $parent_curriculum_id, $params, $isLeaf, $parent_path);
        }
    }
    //summary item
    $num_records = track_count_records('', '', $id, $parent_cluster_id, $track_contexts);
    if ($num_block_icons < $num_records) {
        $params = array('id' => $id);
        //add extra param if appropriate
        if (!empty($parent_cluster_id)) {
            $params['parent_clusterid'] = $parent_cluster_id;
        }
        $result_items[] = block_elisadmin_get_menu_summary_item('track', $track_css_class, $num_records - $num_block_icons, $params, '', $parent_path);
    }
    /*****************************************
     * Curriculum - Cluster Associations
     *****************************************/
    $cluster_css_class = block_elisadmin_get_item_css_class('cluster_instance');
    //permissions filter
    $cluster_filter = array('contexts' => usersetpage::get_contexts('local/elisprogram:userset_view'));
    $clusters = clustercurriculum::get_clusters($id, $parent_cluster_id, 'name', 'ASC', 0, $num_block_icons, $cluster_filter);
    //$clusters = clustercurriculum::get_clusters($id, $parent_cluster_id, 'priority, name', 'ASC', 0, $num_block_icons);
    if (!empty($clusters)) {
        foreach ($clusters as $cluster) {
            $cluster->id = $cluster->clusterid;
            $params = array('id' => $cluster->id, 'action' => 'view');
            $result_items[] = block_elisadmin_get_menu_item('userset', $cluster, 'root', $cluster_css_class, $cluster->id, $parent_curriculum_id, $params, false, $parent_path);
        }
    }
    //summary item
    $num_records = clustercurriculum::count_clusters($id, $parent_cluster_id, $cluster_filter);
    if ($num_block_icons < $num_records) {
        $params = array('id' => $id);
        //add extra param if appropriate
        if (!empty($parent_cluster_id)) {
            $params['parent_clusterid'] = $parent_cluster_id;
        }
        $result_items[] = block_elisadmin_get_menu_summary_item('curriculumcluster', $cluster_css_class, $num_records - $num_block_icons, $params, 'clustercurriculumpage.class.php', $parent_path);
    }
    return $result_items;
}
 function action_default()
 {
     global $USER, $CURMAN;
     $id = required_param('id', PARAM_INT);
     $contexts = clone trackpage::get_contexts('block/curr_admin:track:enrol');
     //look up student's cluster assignments with necessary capability
     $cluster_contexts = cm_context_set::for_user_with_capability('cluster', 'block/curr_admin:track:enrol_cluster_user', $USER->id);
     //calculate our filter condition based on cluster accessibility
     $cluster_filter = $cluster_contexts->sql_filter_for_context_level('clst.id', 'cluster');
     //query for getting tracks based on clusters
     $sql = "SELECT trk.id\n                FROM {$CURMAN->db->prefix_table(CLSTTABLE)} clst\n                JOIN {$CURMAN->db->prefix_table(CLSTTRKTABLE)} clsttrk\n                ON clst.id = clsttrk.clusterid\n                JOIN {$CURMAN->db->prefix_table(TRACKTABLE)} trk\n                ON clsttrk.trackid = trk.id\n                WHERE {$cluster_filter}";
     //assign the appropriate track ids
     $recordset = get_recordset_sql($sql);
     if ($recordset && $recordset->RecordCount() > 0) {
         if (!isset($contexts->contexts['track'])) {
             $contexts->contexts['track'] = array();
         }
         $new_tracks = array();
         while ($record = rs_fetch_next_record($recordset)) {
             $new_tracks[] = $record->id;
         }
         $contexts->contexts['track'] = array_merge($contexts->contexts['track'], $new_tracks);
     }
     $columns = array('idnumber' => get_string('track_idnumber', 'block_curr_admin'), 'name' => get_string('track_name', 'block_curr_admin'), 'description' => get_string('track_description', 'block_curr_admin'), 'numclasses' => get_string('num_classes', 'block_curr_admin'), 'manage' => '');
     $items = usertrack::get_tracks($id);
     $formatters = $this->create_link_formatters(array('idnumber', 'name'), 'trackpage', 'trackid');
     $this->print_list_view($items, $columns, $formatters, 'tracks');
     //get the listing specifically for this user
     $this->print_dropdown(track_get_listing('name', 'ASC', 0, 0, '', '', 0, 0, $contexts, $id), $items, 'userid', 'trackid', 'savenew', 'idnumber');
 }
 /**
  * Clone a curriculum.
  * @param array $options options for cloning.  Valid options are:
  * - 'tracks': whether or not to clone tracks (default: false)
  * - 'courses': whether or not to clone courses (default: false)
  * - 'classes': whether or not to clone classes (default: false)
  * - 'moodlecourses': whether or not to clone Moodle courses (if they were
  *   autocreated).  Values can be (default: "copyalways"):
  *   - "copyalways": always copy course
  *   - "copyautocreated": only copy autocreated courses
  *   - "autocreatenew": autocreate new courses from course template
  *   - "link": link to existing course
  * - 'targetcluster': the cluster id or cluster object (if any) to
  *   associate the clones with (default: none)
  * @return array array of array of object IDs created.  Key in outer array
  * is type of object (plural).  Key in inner array is original object ID,
  * value is new object ID.  Outer array also has an entry called 'errors',
  * which is an array of any errors encountered when duplicating the
  * object.
  */
 function duplicate($options = array())
 {
     require_once CURMAN_DIRLOCATION . '/lib/track.class.php';
     $objs = array('errors' => array());
     if (isset($options['targetcluster'])) {
         $cluster = $options['targetcluster'];
         if (!is_object($cluster) || !is_a($cluster, 'cluster')) {
             $options['targetcluster'] = $cluster = new cluster($cluster);
         }
     }
     // clone main curriculum object
     $clone = new curriculum($this);
     unset($clone->id);
     if (isset($cluster)) {
         // if cluster specified, append cluster's name to curriculum
         $clone->name = $clone->name . ' - ' . $cluster->name;
         $clone->idnumber = $clone->idnumber . ' - ' . $cluster->name;
     }
     $clone = new curriculum(addslashes_recursive($clone));
     if (!$clone->add()) {
         $objs['errors'][] = get_string('failclustcpycurr', 'block_curr_admin', $this);
         return $objs;
     }
     $objs['curricula'] = array($this->id => $clone->id);
     $options['targetcurriculum'] = $clone->id;
     // associate with target cluster (if any)
     if (isset($cluster)) {
         clustercurriculum::associate($cluster->id, $clone->id);
     }
     if (!empty($options['courses'])) {
         // copy courses
         $currcrs = curriculumcourse_get_list_by_curr($this->id);
         if (!empty($currcrs)) {
             $objs['courses'] = array();
             $objs['classes'] = array();
             foreach ($currcrs as $currcrsdata) {
                 $course = new course($currcrsdata->courseid);
                 $rv = $course->duplicate($options);
                 if (isset($rv['errors']) && !empty($rv['errors'])) {
                     $objs['errors'] = array_merge($objs['errors'], $rv['errors']);
                 }
                 if (isset($rv['courses'])) {
                     $objs['courses'] = $objs['courses'] + $rv['courses'];
                 }
                 if (isset($rv['classes'])) {
                     $objs['classes'] = $objs['classes'] + $rv['classes'];
                 }
                 // associate with curriculum
                 if (isset($rv['courses'][$course->id])) {
                     $curcrs = new curriculumcourse($currcrsdata);
                     unset($curcrs->id);
                     $curcrs->courseid = $rv['courses'][$course->id];
                     $curcrs->curriculumid = $clone->id;
                     $curcrs->add();
                 }
             }
         }
     }
     if (!empty($objs['errors'])) {
         return $objs;
     }
     if (!empty($options['tracks'])) {
         // copy tracks
         $tracks = track_get_listing('name', 'ASC', 0, 0, '', '', $this->id);
         if (isset($objs['courses'])) {
             $options['coursemap'] = $objs['courses'];
         }
         if (!empty($tracks)) {
             $objs['tracks'] = array();
             if (isset($objs['courses'])) {
                 $options['coursemap'] = $objs['courses'];
             }
             if (!isset($objs['classes'])) {
                 $objs['classes'] = array();
             }
             foreach ($tracks as $track) {
                 $track = new track($track);
                 $options['classmap'] = $objs['classes'];
                 $rv = $track->duplicate($options);
                 if (isset($rv['errors']) && !empty($rv['errors'])) {
                     $objs['errors'] = array_merge($objs['errors'], $rv['errors']);
                 }
                 if (isset($rv['tracks'])) {
                     $objs['tracks'] = $objs['tracks'] + $rv['tracks'];
                 }
                 if (isset($rv['classes'])) {
                     $objs['classes'] = $objs['classes'] + $rv['classes'];
                 }
             }
         }
     }
     return $objs;
 }
 /**
  * Load the options into the track selection boxes based on the
  * selected course.
  */
 function definition_after_data()
 {
     $mform =& $this->_form;
     $courseid = $mform->getElementValue('courseid');
     if ($courseid) {
         $courseid = (int) array_shift($courseid);
     } else {
         if (!empty($this->_customdata['obj']->courseid)) {
             $courseid = $this->_customdata['obj']->courseid;
         } else {
             if (!empty($this->firstcourse)) {
                 $courseid = $this->firstcourse->id;
             }
         }
     }
     if ($courseid) {
         $unassigned = array();
         $assigned = array();
         // Multi select box for choosing tracks
         $tracks = track_get_listing();
         $tracks = empty($tracks) ? array() : $tracks;
         $curcrsassign = curriculumcourse_get_list_by_course($courseid);
         $curcrsassign = empty($curcrsassign) ? array() : $curcrsassign;
         foreach ($curcrsassign as $recid => $curcrsrec) {
             foreach ($tracks as $trackid => $trackrec) {
                 if ($trackrec->curid == $curcrsrec->curriculumid) {
                     if (!empty($this->_customdata['obj']->id)) {
                         $trkobj = new trackassignmentclass(array('classid' => $this->_customdata['obj']->id, 'trackid' => $trackid));
                         if (!$trkobj->is_class_assigned_to_track()) {
                             $unassigned[$trackid] = $trackrec->name;
                         } else {
                             // Create list for currently assigned tracks
                             $assigned[$trackid] = $trackrec->name;
                         }
                     } else {
                         $unassigned[$trackid] = $trackrec->name;
                     }
                 }
             }
         }
         $temp = array('assignedtrack' => array_keys($assigned));
         $this->set_data($temp);
         $track_el =& $mform->getElement('assignedtrack');
         $track_el->load($assigned);
         $track_el =& $mform->getElement('track');
         $track_el->load($unassigned);
     }
 }
 function action_default()
 {
     $id = $this->required_param('id', PARAM_INT);
     $sort = $this->optional_param('sort', 'name', PARAM_CLEAN);
     $dir = $this->optional_param('dir', 'ASC', PARAM_CLEAN);
     $columns = array('idnumber' => get_string('track_idnumber', 'block_curr_admin'), 'name' => get_string('track_name', 'block_curr_admin'), 'description' => get_string('track_description', 'block_curr_admin'), 'autoenrol' => get_string('auto_enrol', 'block_curr_admin'), 'buttons' => '');
     $items = clustertrack::get_tracks($id, $sort, $dir);
     $formatters = $this->create_link_formatters(array('idnumber', 'name'), 'trackpage', 'trackid');
     $this->print_list_view($items, $columns, $formatters, 'tracks');
     // find the tracks that the user can associate with this cluster
     $contexts = trackpage::get_contexts('block/curr_admin:associate');
     $tracks = track_get_listing('name', 'ASC', 0, 0, '', '', 0, 0, $contexts);
     if (empty($tracks)) {
         $num_tracks = track_count_records();
         if (!empty($num_tracks)) {
             // some tracks exist, but don't have associate capability on
             // any of them
             echo '<div align="center"><br />';
             print_string('no_associate_caps_track', 'block_curr_admin');
             echo '</div>';
         } else {
             // no tracks at all
             echo '<div align="center"><br />';
             print_string('all_items_assigned', 'block_curr_admin');
             echo '</div>';
         }
     } else {
         $this->print_dropdown($tracks, $items, 'clusterid', 'trackid');
     }
 }
Example #7
0
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @package    elis
 * @subpackage curriculummanagement
 * @author     Remote-Learner.net Inc
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL
 * @copyright  (C) 2008-2012 Remote Learner.net Inc http://www.remote-learner.net
 *
 */
global $CFG;
require_once '../../config.php';
require_once $CFG->dirroot . '/curriculum/config.php';
require_once $CFG->dirroot . '/curriculum/lib/curriculumcourse.class.php';
require_once $CFG->dirroot . '/curriculum/lib/track.class.php';
$courseid = required_param('courseid', PARAM_INT);
require_login(0, false);
$tracks = track_get_listing();
$curcrsassign = curriculumcourse_get_list_by_course($courseid);
$output = '';
if (!empty($curcrsassign)) {
    foreach ($curcrsassign as $recid => $curcrsrec) {
        foreach ($tracks as $trackid => $trackrec) {
            if ($trackrec->curid == $curcrsrec->curriculumid) {
                $output .= '<option value="' . $trackid . '">' . $trackrec->name . '</option>' . "\n";
            }
        }
    }
}
echo $output;
Example #8
0
 /**
  * Clone a curriculum.
  * @param array $options options for cloning.  Valid options are:
  * - 'tracks': whether or not to clone tracks (default: false)
  * - 'courses': whether or not to clone courses (default: false)
  * - 'classes': whether or not to clone classes (default: false)
  * - 'moodlecourses': whether or not to clone Moodle courses (if they were
  *   autocreated).  Values can be (default: "copyalways"):
  *   - "copyalways": always copy course
  *   - "copyautocreated": only copy autocreated courses
  *   - "autocreatenew": autocreate new courses from course template
  *   - "link": link to existing course
  * - 'targetcluster': the cluster id or cluster object (if any) to
  *   associate the clones with (default: none)
  * @return array array of array of object IDs created.  Key in outer array
  * is type of object (plural).  Key in inner array is original object ID,
  * value is new object ID.  Outer array also has an entry called 'errors',
  * which is an array of any errors encountered when duplicating the
  * object.
  */
 function duplicate(array $options = array())
 {
     require_once elispm::lib('data/track.class.php');
     $objs = array('errors' => array());
     if (isset($options['targetcluster'])) {
         $userset = $options['targetcluster'];
         if (!is_object($userset) || !is_a($userset, 'userset')) {
             $options['targetcluster'] = $userset = new userset($userset);
         }
     }
     // Due to lazy loading, we need to pre-load this object
     $this->load();
     // clone main curriculum object
     $clone = new curriculum($this);
     unset($clone->id);
     $idnumber = $clone->idnumber;
     $name = $clone->name;
     if (isset($userset)) {
         $to_append = ' - ' . $userset->name;
         // if cluster specified, append cluster's name to curriculum
         $idnumber = append_once($idnumber, $to_append, array('maxlength' => 95));
         $name = append_once($name, $to_append, array('maxlength' => 59));
     }
     //get a unique idnumber
     $clone->idnumber = generate_unique_identifier(curriculum::TABLE, 'idnumber', $idnumber, array('idnumber' => $idnumber));
     if ($clone->idnumber != $idnumber) {
         //get the suffix appended and add it to the name
         $parts = explode('.', $clone->idnumber);
         $suffix = end($parts);
         $clone->name = $name . '.' . $suffix;
     } else {
         $clone->name = $name;
     }
     $clone = new curriculum($clone);
     $clone->save();
     $objs['curricula'] = array($this->id => $clone->id);
     $options['targetcurriculum'] = $clone->id;
     // associate with target cluster (if any)
     if (isset($userset)) {
         clustercurriculum::associate($userset->id, $clone->id);
     }
     if (!empty($options['courses'])) {
         // copy courses
         $currcrs = curriculumcourse_get_list_by_curr($this->id);
         if ($currcrs->valid()) {
             $objs['courses'] = array();
             $objs['classes'] = array();
             foreach ($currcrs as $currcrsdata) {
                 $course = new course($currcrsdata->courseid);
                 $rv = $course->duplicate($options);
                 if (isset($rv['errors']) && !empty($rv['errors'])) {
                     $objs['errors'] = array_merge($objs['errors'], $rv['errors']);
                 }
                 if (isset($rv['courses'])) {
                     $objs['courses'] = $objs['courses'] + $rv['courses'];
                 }
                 if (isset($rv['classes'])) {
                     $objs['classes'] = $objs['classes'] + $rv['classes'];
                 }
                 // associate with curriculum
                 if (isset($rv['courses'][$course->id])) {
                     $curcrs = new curriculumcourse($currcrsdata);
                     unset($curcrs->id);
                     $curcrs->courseid = $rv['courses'][$course->id];
                     $curcrs->curriculumid = $clone->id;
                     $curcrs->save();
                 }
             }
         }
         unset($currcrs);
     }
     if (!empty($objs['errors'])) {
         return $objs;
     }
     if (!empty($options['tracks'])) {
         // copy tracks
         $tracks = track_get_listing('name', 'ASC', 0, 0, '', '', $this->id);
         if (isset($objs['courses'])) {
             $options['coursemap'] = $objs['courses'];
         }
         if (!empty($tracks)) {
             $objs['tracks'] = array();
             if (isset($objs['courses'])) {
                 $options['coursemap'] = $objs['courses'];
             }
             if (!isset($objs['classes'])) {
                 $objs['classes'] = array();
             }
             foreach ($tracks as $track) {
                 $track = new track($track);
                 $options['classmap'] = $objs['classes'];
                 $rv = $track->duplicate($options);
                 if (isset($rv['errors']) && !empty($rv['errors'])) {
                     $objs['errors'] = array_merge($objs['errors'], $rv['errors']);
                 }
                 if (isset($rv['tracks'])) {
                     $objs['tracks'] = $objs['tracks'] + $rv['tracks'];
                 }
                 if (isset($rv['classes'])) {
                     $objs['classes'] = $objs['classes'] + $rv['classes'];
                 }
             }
         }
     }
     return $objs;
 }
Example #9
0
 /**
  * Display the track listing, filtering on curriculum if the id parameter is present
  */
 function display_default()
 {
     // Get parameters
     $sort = optional_param('sort', 'name', PARAM_ALPHA);
     $dir = optional_param('dir', 'ASC', PARAM_ALPHA);
     $page = optional_param('page', 0, PARAM_INT);
     $perpage = optional_param('perpage', 30, PARAM_INT);
     // how many per page
     $namesearch = trim(optional_param('search', '', PARAM_TEXT));
     $alpha = optional_param('alpha', '', PARAM_ALPHA);
     $parent_clusterid = $this->optional_param('parent_clusterid', 0, PARAM_INT);
     //curriculum id
     $id = $this->get_cm_id();
     // Define columns
     $columns = array('name' => array('header' => get_string('track_name', 'local_elisprogram')), 'description' => array('header' => get_string('track_description', 'local_elisprogram')), 'parcur' => array('header' => get_string('track_parcur', 'local_elisprogram')), 'class' => array('header' => get_string('track_classes', 'local_elisprogram')));
     // TBD
     if ($dir !== 'DESC') {
         $dir = 'ASC';
     }
     if (isset($columns[$sort])) {
         $columns[$sort]['sortable'] = $dir;
     } else {
         $sort = 'name';
         $columns[$sort]['sortable'] = $dir;
     }
     $items = track_get_listing($sort, $dir, $page * $perpage, $perpage, $namesearch, $alpha, $id, $parent_clusterid, trackpage::get_contexts('local/elisprogram:track_view'));
     $numitems = track_count_records($namesearch, $alpha, $id, $parent_clusterid, trackpage::get_contexts('local/elisprogram:track_view'));
     trackpage::get_contexts('local/elisprogram:track_edit');
     trackpage::get_contexts('local/elisprogram:track_delete');
     if (!empty($id)) {
         //print curriculum tabs if viewing from the curriculum view
         $curriculumpage = new curriculumpage(array('id' => $id));
         $curriculumpage->print_tabs('trackpage', array('id' => $id));
     }
     $this->print_list_view($items, $numitems, $columns, $filter = null, $alphaflag = true, $searchflag = true);
 }
Example #10
0
 /**
  * Display the track listing, filtering on curriculum if the id parameter is present
  */
 function action_default()
 {
     // Get parameters
     $sort = optional_param('sort', 'name', PARAM_ALPHA);
     $dir = optional_param('dir', 'ASC', PARAM_ALPHA);
     $page = optional_param('page', 0, PARAM_INT);
     $perpage = optional_param('perpage', 30, PARAM_INT);
     // how many per page
     $namesearch = trim(optional_param('search', '', PARAM_TEXT));
     $alpha = optional_param('alpha', '', PARAM_ALPHA);
     $parent_clusterid = $this->optional_param('parent_clusterid', 0, PARAM_INT);
     //curriculum id
     $id = $this->get_cm_id();
     // Define columns
     $columns = array('name' => get_string('track_name', 'block_curr_admin'), 'description' => get_string('track_description', 'block_curr_admin'), 'parcur' => get_string('track_parcur', 'block_curr_admin'), 'class' => get_string('track_classes', 'block_curr_admin'));
     $items = track_get_listing($sort, $dir, $page * $perpage, $perpage, $namesearch, $alpha, $id, $parent_clusterid, trackpage::get_contexts('block/curr_admin:track:view'));
     $numitems = track_count_records($namesearch, $alpha, $id, $parent_clusterid, trackpage::get_contexts('block/curr_admin:track:view'));
     trackpage::get_contexts('block/curr_admin:track:edit');
     trackpage::get_contexts('block/curr_admin:track:delete');
     if (!empty($id)) {
         //print curriculum tabs if viewing from the curriculum view
         $curriculumpage = new curriculumpage(array('id' => $id));
         $curriculumpage->print_tabs('trackpage', array('id' => $id));
     }
     $this->print_list_view($items, $numitems, $columns, $filter = null, $alphaflag = true, $searchflag = true);
 }