/** * Test that a user without program_view permissions does not get any data returned */ public function test_nocurriculumpermission() { $this->load_csv_data(); $this->setGuestUser(); $curriculumfilter = array('contexts' => curriculumpage::get_contexts('local/elisprogram:program_view')); $curricula = clustercurriculum::get_curricula(1, 0, 5, 'cur.priority ASC, cur.name ASC', $curriculumfilter); $this->assertInternalType('array', $curricula); $this->assertEmpty($curricula); }
/** * Dynamically loads child menu items for a cluster 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_userset($id, $parent_cluster_id, $parent_curriculum_id, $num_block_icons, $parent_path = '') { global $CFG; //page dependencies require_once elispm::file('coursepage.class.php'); $result_items = array(); /***************************************** * Cluster - Child Cluster Associations *****************************************/ //note - no need to worry about permissions since there is no prevents/prohibits in ELIS $cluster_css_class = block_elisadmin_get_item_css_class('cluster_instance'); $listing = cluster_get_listing('name', 'ASC', 0, $num_block_icons, '', '', array('parent' => $id)); //$listing = cluster_get_listing('priority, name', 'ASC', 0, $num_block_icons, '', '', array('parent' => $id)); if (!empty($listing)) { foreach ($listing as $item) { $params = array('id' => $item->id, 'action' => 'view'); $cluster_count = cluster_count_records('', '', array('parent' => $item->id)); $curriculum_count = clustercurriculum::count_curricula($item->id); $isLeaf = empty($cluster_count) && empty($curriculum_count); $result_items[] = block_elisadmin_get_menu_item('userset', $item, 'root', $cluster_css_class, $item->id, $parent_curriculum_id, $params, $isLeaf, $parent_path); } } //summary item $num_records = cluster_count_records('', '', array('parent' => $id)); if ($num_block_icons < $num_records) { $params = array('id' => $parent_cluster_id); $result_items[] = block_elisadmin_get_menu_summary_item('userset', $cluster_css_class, $num_records - $num_block_icons, $params, '', $parent_path); } /***************************************** * Cluster - Curriculum *****************************************/ $curriculum_css_class = block_elisadmin_get_item_css_class('curriculum_instance'); //permissions filter $curriculum_filter = array('contexts' => curriculumpage::get_contexts('local/elisprogram:program_view')); $curricula = clustercurriculum::get_curricula($id, 0, $num_block_icons, 'cur.priority ASC, cur.name ASC', $curriculum_filter); if (!empty($curricula)) { foreach ($curricula as $curriculum) { $curriculum->id = $curriculum->curriculumid; $params = array('id' => $curriculum->id, 'action' => 'view'); //count associated courses $course_filter = array('contexts' => coursepage::get_contexts('local/elisprogram:course_view')); $course_count = curriculumcourse_count_records($curriculum->id, '', '', $course_filter); //count associated tracks $track_contexts = trackpage::get_contexts('local/elisprogram:track_view'); $track_count = track_count_records('', '', $curriculum->id, $parent_cluster_id, $track_contexts); //count associated clusters $cluster_filter = array('contexts' => usersetpage::get_contexts('local/elisprogram:userset_view')); $cluster_count = clustercurriculum::count_clusters($curriculum->id, $parent_cluster_id, $cluster_filter); $isLeaf = empty($course_count) && empty($track_count) && empty($cluster_count); $result_items[] = block_elisadmin_get_menu_item('curriculum', $curriculum, 'root', $curriculum_css_class, $parent_cluster_id, $curriculum->id, $params, $isLeaf, $parent_path); } } //summary item $num_records = clustercurriculum::count_curricula($id, $curriculum_filter); if ($num_block_icons < $num_records) { $params = array('id' => $id); $result_items[] = block_elisadmin_get_menu_summary_item('clustercurriculum', $curriculum_css_class, $num_records - $num_block_icons, $params, '', $parent_path); } return $result_items; }
/** * Dynamically loads child menu items for a cluster entity * * @param int $id The entity id * @param int $parent_cluster_id The last cluster passed going down the curr_admin tree, or 0 if none * @param int $parent_curriculum_id The last curriculum passed going down the curr_admin 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_curr_admin_load_menu_children_cluster($id, $parent_cluster_id, $parent_curriculum_id, $num_block_icons, $parent_path = '') { global $CFG, $USER; // page dependencies require_once $CFG->dirroot . '/curriculum/coursepage.class.php'; //error_log("block_curr_admin_load_menu_children_cluster($id, $parent_cluster_id, $parent_curriculum_id, $num_block_icons, $parent_path)"); $result_items = array(); /***************************************** * Cluster - Child Cluster Associations *****************************************/ // TBD: no permission check 'cause currently there is no prevents/prohibits in ELIS $cluster_css_class = block_curr_admin_get_item_css_class('cluster_instance'); $parent_clst_filter = array('contexts' => clusterpage::get_contexts('block/curr_admin:cluster:view'), 'parent' => $id); $listing = cluster_get_listing('priority, name', 'ASC', 0, $num_block_icons, '', '', $parent_clst_filter); $curriculum_filter = array('contexts' => curriculumpage::get_contexts('block/curr_admin:curriculum:view')); if (!empty($listing)) { foreach ($listing as $item) { $params = array('id' => $item->id, 'action' => 'view'); $cluster_filter = array('contexts' => clusterpage::get_contexts('block/curr_admin:cluster:view'), 'parent' => $item->id); $cluster_count = cluster_count_records('', '', $cluster_filter); $curriculum_count = clustercurriculum::count_curricula($item->id, $curriculum_filter); $isLeaf = empty($cluster_count) && empty($curriculum_count); $result_items[] = block_curr_admin_get_menu_item('cluster', $item, 'root', $cluster_css_class, $item->id, $parent_curriculum_id, $params, $isLeaf, $parent_path); //error_log("block_curr_admin_load_menu_children_cluster(); parent of cluster child = {$result_items[count($result_items) - 1]->parent}"); } } //summary item $num_records = cluster_count_records('', '', $parent_clst_filter); if ($num_block_icons < $num_records) { $params = array('id' => $parent_cluster_id); $result_items[] = block_curr_admin_get_menu_summary_item('cluster', $cluster_css_class, $num_records - $num_block_icons, $params, '', $parent_path); } /***************************************** * Cluster - Curriculum *****************************************/ $curriculum_css_class = block_curr_admin_get_item_css_class('curriculum_instance'); // permissions filter $curricula = clustercurriculum::get_curricula($id, 0, $num_block_icons, 'cur.priority ASC, cur.name ASC', $curriculum_filter); if (!empty($curricula)) { foreach ($curricula as $curriculum) { $curriculum->id = $curriculum->curriculumid; $params = array('id' => $curriculum->id, 'action' => 'view'); // count associated courses $course_filter = array('contexts' => coursepage::get_contexts('block/curr_admin:course:view')); $course_count = curriculumcourse_count_records($curriculum->id, '', '', $course_filter); // count associated tracks $track_contexts = trackpage::get_contexts('block/curr_admin:track:view'); $track_count = track_count_records('', '', $curriculum->id, $parent_cluster_id, $track_contexts); // count associated clusters $cluster_filter = array('contexts' => clusterpage::get_contexts('block/curr_admin:cluster:view')); $cluster_count = clustercurriculum::count_clusters($curriculum->id, $parent_cluster_id, $cluster_filter); $isLeaf = empty($course_count) && empty($track_count) && empty($cluster_count); $result_items[] = block_curr_admin_get_menu_item('curriculum', $curriculum, 'root', $curriculum_css_class, $parent_cluster_id, $curriculum->id, $params, $isLeaf, $parent_path); } } //summary item $num_records = clustercurriculum::count_curricula($id, $curriculum_filter); if ($num_block_icons < $num_records) { $params = array('id' => $id); $result_items[] = block_curr_admin_get_menu_summary_item('clustercurriculum', $curriculum_css_class, $num_records - $num_block_icons, $params, '', $parent_path); } //error_log("block_curr_admin_load_menu_children_cluster => " . count($result_items) . " child meuitems."); return $result_items; }
function action_copycurredit() { global $CFG, $USER, $CURMAN; require_js($CFG->wwwroot . '/curriculum/js/clustercurriculumpage.js'); $id = $this->required_param('id', PARAM_INT); // Create a list of curricula to be excluded $curriculumshown = array(); $table = new stdClass(); $table->head = array(get_string('clustcpyclustname', 'block_curr_admin'), get_string('clustcpycurname', 'block_curr_admin'), get_string('clustcpyadd', 'block_curr_admin'), get_string('clustcpytrkcpy', 'block_curr_admin'), get_string('clustcpycrscpy', 'block_curr_admin'), get_string('clustcpyclscpy', 'block_curr_admin'), get_string('clustcpymdlclscpy', 'block_curr_admin')); $table->class = 'cluster_copy_curriculum'; // Get all clusters $sort = 'name'; $dir = 'ASC'; $clusters = cluster_get_listing($sort, $dir, 0); $clusterlist = array(); $sql = 'SELECT * from ' . $CURMAN->db->prefix_table('crlm_cluster'); // Exclude clusters the user does not have the capability to manage/see $context = get_contexts_by_capability_for_user('cluster', 'block/curr_admin:cluster:view', $USER->id); foreach ($clusters as $clusid => $clusdata) { $haspermission = $context->context_allowed($clusid, 'cluster'); if (!$haspermission) { unset($clusters[$clusid]); } } echo '<form action="index.php" method="post">'; $mdlcrsoptions = array('copyalways' => get_string('currcopy_mdlcrs_copyalways', 'block_curr_admin'), 'copyautocreated' => get_string('currcopy_mdlcrs_copyautocreated', 'block_curr_admin'), 'autocreatenew' => get_string('currcopy_mdlcrs_autocreatenew', 'block_curr_admin'), 'link' => get_string('currcopy_mdlcrs_link', 'block_curr_admin')); $contexts = curriculumpage::get_contexts('block/curr_admin:associate'); foreach ($clusters as $clusid => $clusdata) { $assocurr = clustercurriculum::get_curricula($clusid); if (!empty($assocurr)) { $first = true; foreach ($assocurr as $assocurrrec) { // Add to list of curricula to exclude $curriculumshown[] = $assocurrrec->curriculumid; // Skip over this clusters associated curricula if ($clusid == $id) { continue; } // Skip over curricula that user cannot associate if (!$contexts->context_allowed($assocurrrec->curriculumid, 'curriculum')) { continue; } if ($first) { $curname = format_string($clusdata->name); $first = false; } else { $curname = ''; } $table->data[] = array($curname, format_string($assocurrrec->name), print_checkbox(self::CPY_CURR_PREFIX . $assocurrrec->curriculumid, 1, false, '', '', '', true), print_checkbox(self::CPY_CURR_TRK_PREFIX . $assocurrrec->curriculumid, 1, false, '', '', '', true), print_checkbox(self::CPY_CURR_CRS_PREFIX . $assocurrrec->curriculumid, 1, false, '', '', '', true), print_checkbox(self::CPY_CURR_CLS_PREFIX . $assocurrrec->curriculumid, 1, false, '', '', '', true), choose_from_menu($mdlcrsoptions, self::CPY_CURR_MDLCRS_PREFIX . $assocurrrec->curriculumid, '', '', '', 0, true)); $table->rowclass[] = 'clus_cpy_row'; } } } // Add unassociated row to table $table->data[] = array(get_string('unassociated', 'block_curr_admin'), '', '', '', '', '', ''); $table->rowclass[] = 'clus_cpy_row unassigned'; // Get all curriculums, removing curricula that have already // been listed $curriculums = curriculum_get_listing($sort, $dir, 0, 0, '', '', $contexts); foreach ($curriculums as $curriculumid => $curriculumdata) { if (false === array_search($curriculumid, $curriculumshown)) { $table->data[] = array('', format_string($curriculumdata->name), print_checkbox(self::CPY_CURR_PREFIX . $curriculumid, 1, false, '', '', '', true), print_checkbox(self::CPY_CURR_TRK_PREFIX . $curriculumid, 1, false, '', '', '', true), print_checkbox(self::CPY_CURR_CRS_PREFIX . $curriculumid, 1, false, '', '', '', true), print_checkbox(self::CPY_CURR_CLS_PREFIX . $curriculumid, 1, false, '', '', '', true), choose_from_menu($mdlcrsoptions, self::CPY_CURR_MDLCRS_PREFIX . $curriculumid, '', '', '', 0, true)); $table->rowclass[] = 'clus_cpy_row'; } } $currselectall = '<div class="currselectall">' . '<a id="clus_currcpy_select_all" onclick="cluster_copycurriculum_set_all_selected()">' . get_string('selectall') . '</a></div>'; $trkselectall = '<div class="trkselectall">' . '<a id="clus_trkcpy_select_all" onclick="cluster_copytrack_set_all_selected()">' . get_string('selectall') . '</a></div>'; $crsselectall = '<div class="crsselectall">' . '<a id="clus_crscpy_select_all" onclick="cluster_copycourse_set_all_selected()">' . get_string('selectall') . '</a></div>'; $clsselectall = '<div class="clsselectall">' . '<a id="clus_crscpy_select_all" onclick="cluster_copyclass_set_all_selected()">' . get_string('selectall') . '</a></div>'; $table->data[] = array('', '', $currselectall, $trkselectall, $crsselectall, $clsselectall); $table->rowclass[] = 'clus_cpy_row select_all_row'; echo print_table($table, true); echo '<div class="clus_curr_cpy_save_exit">'; echo '<input type="submit" name="save" value="' . get_string('saveexit', 'block_curr_admin') . '">'; echo '<div class="hidden">'; echo '<input type="hidden" name="id" value="' . $id . '">'; echo '<input type="hidden" name="s" value="clstcur">'; echo '<input type="hidden" name="action" value="copycurr">'; echo '<input type="hidden" name="sesskey" value="' . $USER->sesskey . '">'; echo '</div>'; echo '</div>'; echo '</form>'; }
/** * Display copy curriculum action. */ public function display_copycurredit() { global $CFG, $USER, $PAGE, $DB, $OUTPUT; $PAGE->requires->js('/local/elisprogram/js/clustercurriculumpage.js'); $id = $this->required_param('id', PARAM_INT); // Create a list of curricula to be excluded. $curriculumshown = array(); $table = new html_table(); $table->head = array(get_string('userset_cpyclustname', 'local_elisprogram'), get_string('userset_cpycurname', 'local_elisprogram'), get_string('userset_cpyadd', 'local_elisprogram'), get_string('userset_cpytrkcpy', 'local_elisprogram'), get_string('userset_cpycrscpy', 'local_elisprogram'), get_string('userset_cpyclscpy', 'local_elisprogram'), get_string('userset_cpymdlclscpy', 'local_elisprogram')); $table->class = 'cluster_copy_curriculum'; // Get all clusters. $sort = 'name'; $dir = 'ASC'; $clusters = cluster_get_listing($sort, $dir, 0); $clusterlist = array(); $sql = 'SELECT * from {' . userset::TABLE . '}'; // Exclude clusters the user does not have the capability to manage/see. $context = get_contexts_by_capability_for_user('cluster', 'local/elisprogram:userset_view', $USER->id); echo '<form action="index.php" method="post">'; $mdlcrsoptions = array('copyalways' => get_string('program_copy_mdlcrs_copyalways', 'local_elisprogram'), 'copyautocreated' => get_string('program_copy_mdlcrs_copyautocreated', 'local_elisprogram'), 'autocreatenew' => get_string('program_copy_mdlcrs_autocreatenew', 'local_elisprogram'), 'link' => get_string('program_copy_mdlcrs_link', 'local_elisprogram')); $contexts = curriculumpage::get_contexts('local/elisprogram:associate'); foreach ($clusters as $clusid => $clusdata) { if (!$context->context_allowed($clusid, 'cluster')) { continue; } $assocurr = clustercurriculum::get_curricula($clusid); if (!empty($assocurr)) { $first = true; foreach ($assocurr as $assocurrrec) { // Add to list of curricula to exclude. $curriculumshown[] = $assocurrrec->curriculumid; // Skip over this clusters associated curricula. if ($clusid == $id) { continue; } // Skip over curricula that user cannot associate. if (!$contexts->context_allowed($assocurrrec->curriculumid, 'curriculum')) { continue; } if ($first) { $curname = format_string($clusdata->name); $first = false; } else { $curname = ''; } // Disable the last 3 options unless the first is checked. $checkboxids = "'" . self::CPY_CURR_PREFIX . $assocurrrec->curriculumid . "',\n '" . self::CPY_CURR_TRK_PREFIX . $assocurrrec->curriculumid . "',\n '" . self::CPY_CURR_CRS_PREFIX . $assocurrrec->curriculumid . "',\n '" . self::CPY_CURR_CLS_PREFIX . $assocurrrec->curriculumid . "'"; $togglecheckboxes = "cluster_copy_checkbox_changed(" . $checkboxids . ");"; $table->data[] = array($curname, format_string($assocurrrec->name), html_writer::checkbox(self::CPY_CURR_PREFIX . $assocurrrec->curriculumid, 1, false, '', array('id' => self::CPY_CURR_PREFIX . $assocurrrec->curriculumid, 'onclick' => $togglecheckboxes)), html_writer::checkbox(self::CPY_CURR_TRK_PREFIX . $assocurrrec->curriculumid, 1, false, '', array('disabled' => true, 'id' => self::CPY_CURR_TRK_PREFIX . $assocurrrec->curriculumid)), html_writer::checkbox(self::CPY_CURR_CRS_PREFIX . $assocurrrec->curriculumid, 1, false, '', array('disabled' => true, 'id' => self::CPY_CURR_CRS_PREFIX . $assocurrrec->curriculumid)), html_writer::checkbox(self::CPY_CURR_CLS_PREFIX . $assocurrrec->curriculumid, 1, false, '', array('disabled' => true, 'id' => self::CPY_CURR_CLS_PREFIX . $assocurrrec->curriculumid)), html_writer::select($mdlcrsoptions, self::CPY_CURR_MDLCRS_PREFIX . $assocurrrec->curriculumid)); $table->rowclass[] = 'clus_cpy_row'; } } } // Add unassociated row to table. $table->data[] = array(get_string('usersetprogram_unassociated', 'local_elisprogram'), '', '', '', '', '', ''); $table->rowclass[] = 'clus_cpy_row unassigned'; // Get all curriculums, removing curricula that have already been listed. $curriculums = curriculum_get_listing($sort, $dir, 0, 0, '', '', $contexts); foreach ($curriculums as $curriculumid => $curriculumdata) { if (false === array_search($curriculumid, $curriculumshown)) { $checkboxids = "'" . self::CPY_CURR_PREFIX . $curriculumid . "',\n '" . self::CPY_CURR_TRK_PREFIX . $curriculumid . "',\n '" . self::CPY_CURR_CRS_PREFIX . $curriculumid . "',\n '" . self::CPY_CURR_CLS_PREFIX . $curriculumid . "'"; $togglecheckboxes = "cluster_copy_checkbox_changed(" . $checkboxids . ");"; $table->data[] = array('', format_string($curriculumdata->name), html_writer::checkbox(self::CPY_CURR_PREFIX . $curriculumid, 1, false, '', array('id' => self::CPY_CURR_PREFIX . $curriculumid, 'onclick' => $togglecheckboxes)), html_writer::checkbox(self::CPY_CURR_TRK_PREFIX . $curriculumid, 1, false, '', array('disabled' => true, 'id' => self::CPY_CURR_TRK_PREFIX . $curriculumid)), html_writer::checkbox(self::CPY_CURR_CRS_PREFIX . $curriculumid, 1, false, '', array('disabled' => true, 'id' => self::CPY_CURR_CRS_PREFIX . $curriculumid)), html_writer::checkbox(self::CPY_CURR_CLS_PREFIX . $curriculumid, 1, false, '', array('disabled' => true, 'id' => self::CPY_CURR_CLS_PREFIX . $curriculumid)), html_writer::select($mdlcrsoptions, self::CPY_CURR_MDLCRS_PREFIX . $curriculumid)); $table->rowclass[] = 'clus_cpy_row'; } } $currselectall = '<div class="currselectall">'; $currselectall .= '<a id="clus_currcpy_select_all" onclick="cluster_copycurriculum_set_all_selected()">'; $currselectall .= get_string('selectall') . '</a></div>'; $trkselectall = '<div class="trkselectall"><a id="clus_trkcpy_select_all" onclick="cluster_copytrack_set_all_selected()">'; $trkselectall .= get_string('selectall') . '</a></div>'; $crsselectall = '<div class="crsselectall"><a id="clus_crscpy_select_all" onclick="cluster_copycourse_set_all_selected()">'; $crsselectall .= get_string('selectall') . '</a></div>'; $clsselectall = '<div class="clsselectall"><a id="clus_crscpy_select_all" onclick="cluster_copyclass_set_all_selected()">'; $clsselectall .= get_string('selectall') . '</a></div>'; $table->data[] = array('', '', $currselectall, $trkselectall, $crsselectall, $clsselectall); $table->rowclass[] = 'clus_cpy_row select_all_row'; echo html_writer::table($table); echo '<div class="clus_curr_cpy_save_exit">'; echo '<input type="submit" name="save" value="' . get_string('userset_saveexit', 'local_elisprogram') . '">'; echo '<div class="hidden">'; echo '<input type="hidden" name="id" value="' . $id . '">'; echo '<input type="hidden" name="s" value="clstcur">'; echo '<input type="hidden" name="action" value="copycurr">'; echo '<input type="hidden" name="sesskey" value="' . $USER->sesskey . '">'; echo '</div>'; echo '</div>'; echo '</form>'; }