Пример #1
0
/**
 * ELIS(TM): Enterprise Learning Intelligence Suite
 * Copyright (C) 2008-2012 Remote Learner.net Inc http://www.remote-learner.net
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * 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
 *
 */
function xmldb_crlm_cluster_themes_upgrade($oldversion = 0)
{
    global $CFG, $THEME, $db;
    $result = true;
    if ($result && $oldversion < 2010080602) {
        require_once $CFG->dirroot . '/curriculum/lib/customfield.class.php';
        require_once $CFG->dirroot . '/curriculum/plugins/cluster_classification/lib.php';
        require_once $CFG->dirroot . '/curriculum/plugins/cluster_classification/clusterclassification.class.php';
        //theme priority
        $theme_priority_field = new field(field::get_for_context_level_with_name('cluster', 'cluster_themepriority'));
        if (isset($theme_priority_field->owners['manual'])) {
            $theme_priority_owner = new field_owner($theme_priority_field->owners['manual']);
            $theme_priority_owner->param_help_file = 'crlm_cluster_themes/cluster_themepriority';
            $theme_priority_owner->update();
        }
        //theme selection
        $theme_field = new field(field::get_for_context_level_with_name('cluster', 'cluster_theme'));
        if (isset($theme_field->owners['manual'])) {
            $theme_owner = new field_owner($theme_field->owners['manual']);
            $theme_owner->param_help_file = 'crlm_cluster_themes/cluster_theme';
            $theme_owner->update();
        }
    }
    return $result;
}
Пример #2
0
/**
 * ELIS(TM): Enterprise Learning Intelligence Suite
 * Copyright (C) 2008-2012 Remote Learner.net Inc http://www.remote-learner.net
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * 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
 *
 */
function xmldb_crlm_cluster_classification_upgrade($oldversion = 0)
{
    global $CFG, $THEME, $db;
    $result = true;
    if ($result && $oldversion < 2010080502) {
        /// Define table crlm_cluster_classification to be created
        $table = new XMLDBTable('crlm_cluster_classification');
        /// Adding fields to table crlm_cluster_classification
        $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
        $table->addFieldInfo('shortname', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
        $table->addFieldInfo('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
        $table->addFieldInfo('params', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null);
        /// Adding keys to table crlm_cluster_classification
        $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
        $table->addKeyInfo('shortname_idx', XMLDB_KEY_UNIQUE, array('shortname'));
        /// Launch create table for crlm_cluster_classification
        $result = $result && create_table($table);
    }
    if ($result && $oldversion < 2010080503) {
        require_once $CFG->dirroot . '/curriculum/lib/customfield.class.php';
        require_once $CFG->dirroot . '/curriculum/plugins/cluster_classification/lib.php';
        require_once $CFG->dirroot . '/curriculum/plugins/cluster_classification/clusterclassification.class.php';
        $field = new field(field::get_for_context_level_with_name('cluster', CLUSTER_CLASSIFICATION_FIELD));
        // make sure we're set as owner
        if (!isset($field->owners['cluster_classification'])) {
            $owner = new field_owner();
            $owner->fieldid = $field->id;
            $owner->plugin = 'cluster_classification';
            $owner->add();
        }
        // make sure we have a default value set
        if (!field_data::get_for_context_and_field(NULL, $field)) {
            field_data::set_for_context_and_field(NULL, $field, 'regular');
        }
        $default = new clusterclassification();
        $default->shortname = 'regular';
        $default->name = get_string('cluster', 'block_curr_admin');
        $default->param_autoenrol_curricula = 1;
        $default->param_autoenrol_tracks = 1;
        $default->add();
    }
    // make sure 'manual' is an owner
    if ($result && $oldversion < 2010080504) {
        require_once $CFG->dirroot . '/curriculum/lib/customfield.class.php';
        require_once $CFG->dirroot . '/curriculum/plugins/cluster_classification/lib.php';
        require_once $CFG->dirroot . '/curriculum/plugins/cluster_classification/clusterclassification.class.php';
        $field = new field(field::get_for_context_level_with_name('cluster', CLUSTER_CLASSIFICATION_FIELD));
        $owner = new field_owner();
        $owner->fieldid = $field->id;
        $owner->plugin = 'manual';
        $owner->param_view_capability = '';
        $owner->param_edit_capability = 'moodle/user:update';
        $owner->param_control = 'menu';
        $owner->param_options_source = 'cluster_classifications';
        $owner->add();
    }
    return $result;
}
Пример #3
0
/**
 * Appends additional data to query parameters based on existence of theme priority field
 *
 * @param  string  $cluster_id_field  The field to join on for the cluster id
 * @param  string  $select            The current select clause
 * @param  string  $join              The current join clause
 */
function cluster_display_priority_append_sort_data($cluster_id_field, &$select, &$join)
{
    global $CURMAN;
    //make sure we can get the field we need for ordering
    if ($theme_priority_field = new field(field::get_for_context_level_with_name('cluster', CLUSTER_DISPLAY_PRIORITY_FIELD)) and $contextlevel = context_level_base::get_custom_context_level('cluster', 'block_curr_admin')) {
        $field_data_table = $CURMAN->db->prefix_table($theme_priority_field->data_table());
        //use this for easier naming in terms of sorting
        $select .= ', field_data.data AS priority ';
        $join .= "LEFT JOIN ({$CURMAN->db->prefix_table('context')} context\n                  JOIN {$field_data_table} field_data\n                    ON field_data.contextid = context.id\n                    AND field_data.fieldid = {$theme_priority_field->id})\n\n                    ON context.contextlevel = {$contextlevel}\n                    AND context.instanceid = {$cluster_id_field} ";
    }
}
Пример #4
0
/**
 * Appends additional data to query parameters based on existence of theme priority field
 *
 * @param  string  $cluster_id_field  The field to join on for the cluster id
 * @param  string  $select            The current select clause
 * @param  string  $join              The current join clause
 */
function userset_display_priority_append_sort_data($userset_id_field, &$select, &$join)
{
    global $DB;
    //make sure we can get the field we need for ordering
    if ($theme_priority_field = new field(field::get_for_context_level_with_name(CONTEXT_ELIS_USERSET, USERSET_DISPLAY_PRIORITY_FIELD))) {
        $field_data_table = $theme_priority_field->data_table();
        //use this for easier naming in terms of sorting
        $select .= ', field_data.data AS priority ';
        $join .= ' LEFT JOIN ({context} context
                   JOIN {' . $field_data_table . '} field_data
                     ON field_data.contextid = context.id
                     AND field_data.fieldid = ' . $theme_priority_field->id . ')

                     ON context.contextlevel = ' . CONTEXT_ELIS_USERSET . '
                     AND context.instanceid = ' . $userset_id_field . '
                 ';
    }
}
Пример #5
0
/**
 * ELIS(TM): Enterprise Learning Intelligence Suite
 * Copyright (C) 2008-2012 Remote Learner.net Inc http://www.remote-learner.net
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * 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
 *
 */
function xmldb_crlm_cluster_groups_upgrade($oldversion = 0)
{
    global $CFG, $THEME, $db;
    $result = true;
    if ($result && $oldversion < 2010080602) {
        require_once $CFG->dirroot . '/curriculum/lib/customfield.class.php';
        require_once $CFG->dirroot . '/curriculum/plugins/cluster_classification/lib.php';
        require_once $CFG->dirroot . '/curriculum/plugins/cluster_classification/clusterclassification.class.php';
        $field = new field(field::get_for_context_level_with_name('cluster', 'cluster_group'));
        if (isset($field->owners['manual'])) {
            $owner = new field_owner($field->owners['manual']);
            $owner->param_help_file = 'crlm_cluster_groups/cluster_groups';
            $owner->update();
        }
    }
    if ($result && $oldversion < 2010080603) {
        //retrieve the cluster context
        $context = context_level_base::get_custom_context_level('cluster', 'block_curr_admin');
        //get the cluster classification category
        $category = new field_category();
        $category->name = get_string('cluster_group_category', 'crlm_cluster_groups');
        $field = new field();
        $field->shortname = 'cluster_groupings';
        $field->name = get_string('autoenrol_groupings', 'crlm_cluster_classification');
        $field->datatype = 'bool';
        $field = field::ensure_field_exists_for_context_level($field, $context, $category);
        $owner_options = array('required' => 0, 'edit_capability' => '', 'view_capability' => '', 'control' => 'checkbox', 'columns' => 30, 'rows' => 10, 'maxlength' => 2048, 'help_file' => 'crlm_cluster_groups/cluster_groupings');
        field_owner::ensure_field_owner_exists($field, 'manual', $owner_options);
    }
    if ($result && $oldversion < 2010080604) {
        if ($field = new field(field::get_for_context_level_with_name('cluster', 'cluster_site_course_group'))) {
            $field->shortname = 'cluster_groupings';
            $field->update();
        }
    }
    return $result;
}
Пример #6
0
 /**
  * Get the user dashboard report view.
  *
  * @uses $CFG, $CURMAN
  * @param none
  * @return string The HTML for the dashboard report.
  */
 function get_dashboard()
 {
     global $CFG, $CURMAN;
     require_once CURMAN_DIRLOCATION . '/lib/curriculumstudent.class.php';
     //needed for AJAX calls
     require_js(array('yui_yahoo', 'yui_dom', 'yui_event', 'yui_connection', "{$CFG->wwwroot}/curriculum/js/util.js", "{$CFG->wwwroot}/curriculum/js/dashboard.js"), true);
     if (optional_param('tab', '', PARAM_CLEAN) == 'archivedlp') {
         $tab = 'archivedlp';
         $show_archived = 1;
     } else {
         $tab = 'currentlp';
         $show_archived = 0;
     }
     $content = '';
     $archive_var = '_elis_curriculum_archive';
     $totalcourses = 0;
     $totalcurricula = 0;
     $completecourses = 0;
     $curriculas = array();
     $classids = array();
     $sql = 'SELECT curstu.id, curstu.curriculumid as curid, cur.name as name
               FROM ' . $CURMAN->db->prefix_table(CURASSTABLE) . ' curstu
               JOIN ' . $CURMAN->db->prefix_table(CURTABLE) . ' cur
                 ON cur.id = curstu.curriculumid
              WHERE curstu.userid = \'' . $this->id . '\' ORDER BY cur.priority ASC, cur.name ASC';
     if ($usercurs = get_records_sql($sql)) {
         foreach ($usercurs as $usercur) {
             // Check if this curricula is set as archived and whether we want to display it
             $crlm_context = get_context_instance(context_level_base::get_custom_context_level('curriculum', 'block_curr_admin'), $usercur->curid);
             $data_array = field_data::get_for_context_and_field($crlm_context, $archive_var);
             $crlm_archived = 0;
             if (is_array($data_array) && !empty($data_array)) {
                 foreach ($data_array as $data_key => $data_obj) {
                     $crlm_archived = !empty($data_obj->data) ? 1 : 0;
                 }
             }
             if ($show_archived == $crlm_archived) {
                 $totalcurricula++;
                 $curriculas[$usercur->curid]['id'] = $usercur->curid;
                 $curriculas[$usercur->curid]['name'] = $usercur->name;
                 $data = array();
                 if ($courses = curriculumcourse_get_listing($usercur->curid, 'curcrs.position, crs.name', 'ASC')) {
                     foreach ($courses as $course) {
                         $totalcourses++;
                         $course_obj = new course($course->courseid);
                         $coursedesc = $course_obj->syllabus;
                         if ($cdata = student_get_class_from_course($course->courseid, $this->id)) {
                             foreach ($cdata as $classdata) {
                                 if (!in_array($classdata->id, $classids)) {
                                     $classids[] = $classdata->id;
                                 }
                                 if ($classdata->completestatusid == STUSTATUS_PASSED) {
                                     $completecourses++;
                                 }
                                 if ($mdlcrs = moodle_get_course($classdata->id)) {
                                     $coursename = '<a href="' . $CFG->wwwroot . '/course/view.php?id=' . $mdlcrs . '">' . $course->coursename . '</a>';
                                 } else {
                                     $coursename = $course->coursename;
                                 }
                                 $data[] = array($coursename, $coursedesc, $classdata->grade, $classdata->completestatusid == STUSTATUS_PASSED ? get_string('yes') : get_string('no'), $classdata->completestatusid == STUSTATUS_PASSED && !empty($classdata->completetime) ? date('M j, Y', $classdata->completetime) : get_string('na', 'block_curr_admin'));
                             }
                         } else {
                             $data[] = array($course->coursename, $coursedesc, 0, get_string('no'), get_string('na', 'block_curr_admin'));
                         }
                     }
                 }
                 $curriculas[$usercur->curid]['data'] = $data;
             } else {
                 // Keep note of the classid's regardless if set archived or not for later use in determining non-curricula courses
                 if ($courses = curriculumcourse_get_listing($usercur->curid, 'curcrs.position, crs.name', 'ASC')) {
                     foreach ($courses as $course) {
                         if ($cdata = student_get_class_from_course($course->courseid, $this->id)) {
                             foreach ($cdata as $classdata) {
                                 if (!in_array($classdata->id, $classids)) {
                                     $classids[] = $classdata->id;
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     // Show different css for IE below version 8
     if (check_browser_version('MSIE', 7.0) && !check_browser_version('MSIE', 8.0)) {
         // IEs that are lower than version 8 do not get the float because it messes up the tabs at the top of the page for some reason
         $float_style = 'text-align:right;';
     } else {
         // Sane browsers get the float tag
         $float_style = 'text-align:right; float:right;';
     }
     // Tab header
     $field_exists = field::get_for_context_level_with_name('curriculum', $archive_var);
     if (!empty($field_exists)) {
         $tabrow = array();
         $tabrow[] = new tabobject('currentlp', $CFG->wwwroot . '/curriculum/index.php?tab=currentlp', get_string('tab_current_learning_plans', 'block_curr_admin'));
         $tabrow[] = new tabobject('archivedlp', $CFG->wwwroot . '/curriculum/index.php?tab=archivedlp', get_string('tab_archived_learning_plans', 'block_curr_admin'));
         $tabrows = array($tabrow);
         print_tabs($tabrows, $tab);
     }
     $content .= print_heading_block(get_string('learningplanwelcome', 'block_curr_admin', fullname($this)), '', true);
     if ($totalcurricula === 0) {
         $blank_lang = $tab == 'archivedlp' ? 'noarchivedplan' : 'nolearningplan';
         $content .= '<br /><center>' . get_string($blank_lang, 'block_curr_admin') . '</center>';
     }
     // Load the user preferences for hide/show button states
     if ($collapsed = get_user_preferences('crlm_learningplan_collapsed_curricula')) {
         $collapsed_array = explode(',', $collapsed);
     } else {
         $collapsed = '';
         $collapsed_array = array();
     }
     $content .= '<input type="hidden" name="collapsed" id="collapsed" value="' . $collapsed . '">';
     if (!empty($usercurs)) {
         foreach ($usercurs as $usercur) {
             if (!isset($curriculas[$usercur->curid])) {
                 continue;
             }
             $curricula = $curriculas[$usercur->curid];
             $table = new stdClass();
             $table->head = array(get_string('class', 'block_curr_admin'), get_string('description', 'block_curr_admin'), get_string('score', 'block_curr_admin'), get_string('completed_label', 'block_curr_admin'), get_string('date', 'block_curr_admin'));
             $table->data = $curricula['data'];
             $curricula_name = empty($CURMAN->config->disablecoursecatalog) ? '<a href="index.php?s=crscat&section=curr&showcurid=' . $curricula['id'] . '">' . $curricula['name'] . '</a>' : $curricula['name'];
             $header_curr_name = get_string('learningplanname', 'block_curr_admin', $curricula_name);
             if (in_array($curricula['id'], $collapsed_array)) {
                 $button_label = get_string('showcourses', 'block_curr_admin');
                 $extra_class = ' hide';
             } else {
                 $button_label = get_string('hidecourses', 'block_curr_admin');
                 $extra_class = '';
             }
             $heading = '<div class="clearfix"></div>' . '<div style="' . $float_style . '">' . '<script id="curriculum' . $curricula['id'] . 'script" type="text/javascript">toggleVisibleInitWithState("curriculum' . $curricula['id'] . 'script", "curriculum' . $curricula['id'] . 'button", "' . $button_label . '", "' . get_string('hidecourses', 'block_curr_admin') . '", "' . get_string('showcourses', 'block_curr_admin') . '", "curriculum-' . $curricula['id'] . '");</script></div>' . $header_curr_name;
             $content .= '<div class="dashboard_curricula_block">';
             $content .= print_heading($heading, 'left', 2, 'main', true);
             $content .= '<div id="curriculum-' . $curricula['id'] . '" class="yui-skin-sam ' . $extra_class . '">';
             if (empty($curricula['data'])) {
                 $content .= get_string('nocourseassoc', 'block_curr_admin');
             } else {
                 $content .= print_table($table, true);
             }
             $content .= '</div>';
             $content .= '</div>';
         }
     }
     /// Completed non-curricula course data
     if ($tab != 'archivedlp') {
         if (!empty($classids)) {
             $sql = "SELECT stu.id, stu.classid, crs.name as coursename, stu.completetime, stu.grade, stu.completestatusid\n                        FROM " . $CURMAN->db->prefix_table(STUTABLE) . " stu\n                        INNER JOIN " . $CURMAN->db->prefix_table(CLSTABLE) . " cls ON cls.id = stu.classid\n                        INNER JOIN " . $CURMAN->db->prefix_table(CRSTABLE) . " crs ON crs.id = cls.courseid\n                        WHERE userid = {$this->id}\n                        AND classid " . (count($classids) == 1 ? "!= " . current($classids) : "NOT IN (" . implode(", ", $classids) . ")") . "\n                        ORDER BY crs.name ASC, stu.completetime ASC";
         } else {
             $sql = "SELECT stu.id, stu.classid, crs.name as coursename, stu.completetime, stu.grade, stu.completestatusid\n                        FROM " . $CURMAN->db->prefix_table(STUTABLE) . " stu\n                        INNER JOIN " . $CURMAN->db->prefix_table(CLSTABLE) . " cls ON cls.id = stu.classid\n                        INNER JOIN " . $CURMAN->db->prefix_table(CRSTABLE) . " crs ON crs.id = cls.courseid\n                        WHERE userid = {$this->id}\n                        ORDER BY crs.name ASC, stu.completetime ASC";
         }
         if ($classes = get_records_sql($sql)) {
             $table = new stdClass();
             $table->head = array(get_string('class', 'block_curr_admin'), get_string('score', 'block_curr_admin'), get_string('completed_label', 'block_curr_admin'), get_string('date', 'block_curr_admin'));
             $table->data = array();
             foreach ($classes as $class) {
                 if ($mdlcrs = moodle_get_course($class->classid)) {
                     $coursename = '<a href="' . $CFG->wwwroot . '/course/view.php?id=' . $mdlcrs . '">' . $class->coursename . '</a>';
                 } else {
                     $coursename = $class->coursename;
                 }
                 $table->data[] = array($coursename, $class->grade, $class->completestatusid == STUSTATUS_PASSED ? get_string('yes') : get_string('no'), $class->completestatusid == STUSTATUS_PASSED && !empty($class->completetime) ? date('M j, Y', $class->completetime) : get_string('na', 'block_curr_admin'));
             }
             $header_curr_name = get_string('noncurriculacourses', 'block_curr_admin');
             if (in_array('na', $collapsed_array)) {
                 $button_label = get_string('showcourses', 'block_curr_admin');
                 $extra_class = ' hide';
             } else {
                 $button_label = get_string('hidecourses', 'block_curr_admin');
                 $extra_class = '';
             }
             $heading = '<div class="clearfix"></div>' . '<div style="' . $float_style . '">' . '<script id="noncurriculascript" type="text/javascript">toggleVisibleInitWithState("noncurriculascript", "noncurriculabutton", "' . $button_label . '", "' . get_string('hidecourses', 'block_curr_admin') . '", "' . get_string('showcourses', 'block_curr_admin') . '", "curriculum-na");</script></div>' . $header_curr_name;
             $content .= '<div class="dashboard_curricula_block">';
             $content .= print_heading($heading, 'left', 2, 'main', true);
             $content .= '<div id="curriculum-na" class="yui-skin-sam ' . $extra_class . '">';
             $content .= print_table($table, true);
             $content .= '</div>';
             $content .= '</div>';
         }
     }
     return $content;
 }
Пример #7
0
 /**
  * Creates known user filter if present
  *
  * @uses $USER
  * @param string $fieldname
  * @param boolean $advanced
  * @return object filter
  */
 function get_field($fieldname, $advanced)
 {
     global $USER, $DB;
     $IFNULL = "COALESCE(mi, '')";
     $FULLNAME = $DB->sql_concat_join("' '", array('firstname', $IFNULL, 'lastname'));
     $FIRSTLASTNAME = $DB->sql_concat('firstname', "' '", 'lastname');
     switch ($fieldname) {
         case 'username':
             return new user_filter_text('username', get_string('username'), $advanced, 'username');
         case 'realname':
             return new pm_user_filter_text_OR('realname', get_string('fullname'), $advanced, 'fullname', array($FULLNAME, $FIRSTLASTNAME));
         case 'lastname':
             return new user_filter_text('lastname', get_string('lastname'), $advanced, 'lastname');
         case 'firstname':
             return new user_filter_text('firstname', get_string('firstname'), $advanced, 'firstname');
         case 'idnumber':
             return new user_filter_text('idnumber', get_string('idnumber'), $advanced, 'idnumber');
         case 'email':
             return new user_filter_text('email', get_string('email'), $advanced, 'email');
         case 'city':
             return new user_filter_text('city', get_string('city'), $advanced, 'city');
         case 'country':
             return new user_filter_select('country', get_string('country'), $advanced, 'country', get_string_manager()->get_list_of_countries(), $USER->country);
         case 'timecreated':
             return new user_filter_date('timecreated', get_string('timecreated'), $advanced, 'timecreated');
         case 'language':
             return new user_filter_select('language', get_string('preferredlanguage'), $advanced, 'language', get_string_manager()->get_list_of_translations(true));
         case 'clusterid':
             $clusters = userset_get_menu();
             //need to reference the user table directly to allow use of filters in DB calls that do not
             //require the full SQL query with table aliases
             return new pm_user_userset_filter('clusterid', get_string('usercluster', 'local_elisprogram'), $advanced, '{' . user::TABLE . '}.id', $clusters);
         case 'curriculumid':
             $choices = program_get_menu();
             //need to reference the user table directly to allow use of filters in DB calls that do not
             //require the full SQL query with table aliases
             return new pm_user_program_filter('curriculumid', get_string('usercurricula', 'local_elisprogram'), $advanced, '{' . user::TABLE . '}.id', $choices);
         case 'inactive':
             $inactive_options = array(get_string('o_active', 'local_elisprogram'), get_string('all'), get_string('o_inactive', 'local_elisprogram'));
             return new pm_show_inactive_filter('inactive', get_string('showinactive', 'local_elisprogram'), $advanced, 'inactive', $inactive_options);
         default:
             if (strncmp($fieldname, 'field_', 6) === 0) {
                 $f = substr($fieldname, 6);
                 if ($rec = field::get_for_context_level_with_name(CONTEXT_ELIS_USER, $f)) {
                     return new pm_custom_field_filter($fieldname, $rec->shortname, $advanced, $rec);
                 }
             }
             return null;
     }
 }
Пример #8
0
/**
* moodle_profile_can_sync function to determine if syncing custom field to/from Moodle is possible
*
* @param  string $shortname   the custom field shortname
* @param  string $eliscontrol (optional) the custom field control type: checkbox, datetime, menu, ...
                              If not specified it's looked-up in DB
* @return bool   true if the custom field can be synced, false otherwise
* @uses   $DB
*/
function moodle_profile_can_sync($shortname, $eliscontrol = null)
{
    global $DB;
    $moodlefield = $DB->get_record('user_info_field', array('shortname' => $shortname));
    if (empty($moodlefield)) {
        return false;
    }
    $fieldowner = null;
    if (empty($eliscontrol)) {
        // eliscontrol not specified so look it up ...
        $elisfield = field::get_for_context_level_with_name(CONTEXT_ELIS_USER, $shortname);
        if (empty($elisfield->id) || empty($elisfield->owners) || !isset($elisfield->owners['manual'])) {
            return false;
            // no elis field data found
        }
        $fieldowner = new field_owner($elisfield->owners['manual']);
        $eliscontrol = $fieldowner->param_control;
        if (empty($eliscontrol)) {
            return false;
            // invalid control type found
        }
    }
    $mdldatatype = $moodlefield->datatype;
    $fieldtypenosync = get_invalid_sync_controls($mdldatatype);
    if (!empty($fieldtypenosync) && is_array($fieldtypenosync) && in_array($eliscontrol, $fieldtypenosync)) {
        return false;
        // sync not permitted
    }
    // ELIS-8363: Check for multi-valued fields that can't sync to Moodle
    if (empty($elisfield)) {
        $elisfield = field::get_for_context_level_with_name(CONTEXT_ELIS_USER, $shortname);
    }
    if (!empty($elisfield) && !empty($elisfield->multivalued) && isset($elisfield->owners['moodle_profile']) && $elisfield->owners['moodle_profile']->exclude == pm_moodle_profile::sync_to_moodle) {
        return false;
        // sync not permitted
    }
    // Handle special cases of ELIS checkbox using list
    if ($eliscontrol == 'checkbox') {
        if ($mdldatatype == 'checkbox') {
            if (empty($fieldowner)) {
                $elisfield = field::get_for_context_level_with_name(CONTEXT_ELIS_USER, $shortname);
                if (!empty($elisfield->owners) && isset($elisfield->owners['manual'])) {
                    $fieldowner = new field_owner($elisfield->owners['manual']);
                }
            }
            if (!empty($fieldowner) && (!empty($fieldowner->param_options) || !empty($fieldowner->param_options_source))) {
                return false;
            }
        } else {
            if (empty($fieldowner)) {
                $elisfield = field::get_for_context_level_with_name(CONTEXT_ELIS_USER, $shortname);
                if (!empty($elisfield->owners) && isset($elisfield->owners['manual'])) {
                    $fieldowner = new field_owner($elisfield->owners['manual']);
                }
            }
            if (!empty($fieldowner) && empty($fieldowner->param_options) && empty($fieldowner->param_options_source)) {
                return false;
            }
        }
    }
    return true;
    // sync is ok
}
Пример #9
0
function cluster_count_records($namesearch = '', $alpha = '', $extrafilters = array())
{
    global $CURMAN;
    $select = array();
    $LIKE = $CURMAN->db->sql_compare();
    if (!empty($namesearch)) {
        $namesearch = trim($namesearch);
        $select[] = "(name {$LIKE} '%{$namesearch}%')";
    }
    if ($alpha) {
        $select[] = "(name {$LIKE} '{$alpha}%')";
    }
    if (!empty($extrafilters['contexts'])) {
        /*
         * Start of cluster hierarchy extension
         */
        $sql_condition = '0=1';
        if (cluster::all_clusters_viewable()) {
            //user has capability at system level so allow access to any cluster
            $sql_condition = '0=0';
        } else {
            //user does not have capability at system level, so filter
            $viewable_clusters = cluster::get_viewable_clusters();
            if (empty($viewable_clusters)) {
                //user has no access to any clusters, so do not allow additional access
                $sql_condition = '0=1';
            } else {
                //user has additional access to some set of clusters, so "enable" this access
                $cluster_context_level = context_level_base::get_custom_context_level('cluster', 'block_curr_admin');
                //use the context path to find parent clusters
                $like = sql_ilike();
                $parent_path = sql_concat('parent_context.path', "'/%'");
                $cluster_filter = implode(',', $viewable_clusters);
                $sql_condition = "id IN (\n                                      SELECT parent_context.instanceid\n                                      FROM {$CURMAN->db->prefix_table('context')} parent_context\n                                      JOIN {$CURMAN->db->prefix_table('context')} child_context\n                                        ON child_context.path {$like} {$parent_path}\n                                        AND parent_context.contextlevel = {$cluster_context_level}\n                                        AND child_context.contextlevel = {$cluster_context_level}\n                                        AND child_context.instanceid IN ({$cluster_filter})\n                                  )";
            }
        }
        /*
         * End of cluster hierarchy extension
         */
        $context_filter = $extrafilters['contexts']->sql_filter_for_context_level('id', 'cluster');
        //extend the basic context filter by potentially enabling access to parent clusters
        $select[] = "({$context_filter} OR {$sql_condition})";
    }
    if (isset($extrafilters['parent'])) {
        $select[] = "parent={$extrafilters['parent']}";
    }
    if (isset($extrafilters['classification'])) {
        require_once CURMAN_DIRLOCATION . '/plugins/cluster_classification/lib.php';
        $contextlevel = context_level_base::get_custom_context_level('cluster', 'block_curr_admin');
        $field = new field(field::get_for_context_level_with_name($contextlevel, CLUSTER_CLASSIFICATION_FIELD));
        $select[] = "id IN (SELECT ctx.instanceid\n                              FROM {$CURMAN->db->prefix_table('context')} ctx\n                              JOIN (SELECT ctx.id AS contextid, IFNULL(fdata.data, fdefault.data) AS data\n                                      FROM {$CURMAN->db->prefix_table('context')} ctx\n                                 LEFT JOIN {$CURMAN->db->prefix_table($field->data_table())} fdata ON fdata.contextid = ctx.id AND fdata.fieldid = {$field->id}\n                                 LEFT JOIN {$CURMAN->db->prefix_table($field->data_table())} fdefault ON fdefault.contextid IS NULL AND fdefault.fieldid = {$field->id}) fdata ON fdata.data = '{$extrafilters['classification']}' AND fdata.contextid = ctx.id\n                             WHERE ctx.contextlevel = {$contextlevel})";
    }
    $select = implode(' AND ', $select);
    return $CURMAN->db->count_records_select(CLSTTABLE, $select);
}
Пример #10
0
 /**
  * ELIS-4797: Test Various Custom Field Operations
  */
 public function test_customfieldoperations()
 {
     $contextlevels = \local_eliscore\context\helper::get_legacy_levels();
     foreach ($contextlevels as $ctxname => $ctxlvl) {
         $category = $this->create_field_category($ctxlvl);
         $field = $this->create_field($category, $ctxlvl);
         $fieldsfetched = field::get_for_context_level($ctxlvl);
         $fieldfound = false;
         foreach ($fieldsfetched as $fieldfetched) {
             if ($fieldfetched->shortname === $field->shortname) {
                 $fieldfound = true;
             }
         }
         $this->assertTrue($fieldfound);
         $fieldfetched = field::get_for_context_level_with_name($ctxlvl, $field->shortname);
         $this->assertEquals($field->shortname, $fieldfetched->shortname);
         $fieldfetched = field::ensure_field_exists_for_context_level($field, $ctxlvl, $category);
         $this->assertEquals($field->shortname, $fieldfetched->shortname);
         $catsfetched = field_category::get_for_context_level($ctxlvl);
         $catfound = false;
         foreach ($catsfetched as $catfetched) {
             if ($catfetched->id == $category->id) {
                 $catfound = true;
             }
         }
         $this->assertTrue($catfound);
         if ($ctxlvl === CONTEXT_ELIS_PROGRAM) {
             $cur = $this->create_curriculum();
             $fielddata = field_data::get_for_context_and_field(null, $field);
             $fielddata = $fielddata->current();
             $res = $fielddata->set_for_context_from_datarecord($ctxlvl, $cur);
             $this->assertTrue($res);
         }
     }
 }
Пример #11
0
function cluster_count_records($namesearch = '', $alpha = '', $extrafilters = array())
{
    global $DB;
    $filters = array();
    if (!empty($namesearch)) {
        $namesearch = trim($namesearch);
        $filters[] = new field_filter('name', "%{$namesearch}%", field_filter::LIKE);
    }
    if ($alpha) {
        $filters[] = new field_filter('name', "{$alpha}%", field_filter::LIKE);
    }
    if (!empty($extrafilters['contexts'])) {
        /*
         * Start of cluster hierarchy extension
         */
        $sql_condition = new select_filter('FALSE');
        if (userset::all_clusters_viewable()) {
            //user has capability at system level so allow access to any cluster
            $sql_condition = new select_filter('TRUE');
        } else {
            //user does not have capability at system level, so filter
            $viewable_clusters = userset::get_viewable_clusters();
            if (empty($viewable_clusters)) {
                //user has no access to any clusters, so do not allow additional access
                $sql_condition = new select_filter('FALSE');
            } else {
                //user has additional access to some set of clusters, so "enable" this access
                //use the context path to find parent clusters
                $path = $DB->sql_concat('parent_context.path', "'/%'");
                list($IN, $inparams) = $DB->get_in_or_equal($viewable_clusters, SQL_PARAMS_NAMED);
                $sql_condition = new select_filter("id IN (SELECT parent_context.instanceid\n                              FROM {context} parent_context\n                              JOIN {context} child_context\n                                ON child_context.path LIKE {$path}\n                               AND parent_context.contextlevel = " . CONTEXT_ELIS_USERSET . "\n                               AND child_context.contextlevel = " . CONTEXT_ELIS_USERSET . "\n                               AND child_context.instanceid {$IN}\n                           )", $inparams);
            }
        }
        /*
         * End of cluster hierarchy extension
         */
        $context_filter = $extrafilters['contexts']->get_filter('id', 'cluster');
        //extend the basic context filter by potentially enabling access to parent clusters
        $filters[] = new OR_filter(array($context_filter, $sql_condition));
    }
    if (isset($extrafilters['parent'])) {
        $filters[] = new field_filter('parent', $extrafilters['parent']);
    }
    if (isset($extrafilters['classification'])) {
        require_once elispm::file('plugins/usetclassify/lib.php');
        $field = new field(field::get_for_context_level_with_name(CONTEXT_ELIS_USERSET, USERSET_CLASSIFICATION_FIELD));
        $filters[] = new elis_field_filter($field, 'id', CONTEXT_ELIS_USERSET, $extrafilters['classification']);
    }
    return userset::count($filters);
}