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(); } } }
/** * 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'); } }
* * 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;
/** * 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; }
/** * 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); }
/** * 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); }