Coder Social home page Coder Social logo

ilios / ilios Goto Github PK

View Code? Open in Web Editor NEW
78.0 16.0 38.0 97.73 MB

Curriculum Management System for the Health Professions

Home Page: http://www.iliosproject.org

License: MIT License

PHP 99.19% CSS 0.01% Dockerfile 0.23% Shell 0.15% Twig 0.42%
curriculum curriculum-management curriculum-mapping education open-source medical-education health-professions-education ilios php doctrine

ilios's Introduction

Ilios: Curriculum Management from UCSF

About

The Ilios Curriculum Management System addresses the needs of the Health Professions educational community by providing a user-friendly, flexible, and robust web application to collect, manage, analyze and deliver curricular information.

Ilios creates a comprehensive view of curricula by tracking events, learning content and activities over time. The system facilitates day-to-day administration and the delivery of information to learners; enhances curricular development, review and innovation; and reduces overhead for internal and accreditation reporting. The end result is a powerful tool creating complete and accurate pictures of complex, integrated, multi-year curricula.

Ilios manages learners and instructors and their relationships to curricular materials and activities, enabling the tracking of educational hours, roles and role transitions for participants both internal and external to an institution. Ilios also provides a robust, scalable delivery mechanism for user-centric calendar and scheduling information, with direct access to critical course information, materials, and other educational systems and services.

Ilios leverages the power of your existing online learning. With its comprehensive API, Ilios allows you to integrate with external data sources and systems. For schools using online learning systems such as Moodle or Canvas, Ilios provides a backbone of curricular information to make that deployment more robust and to complement the rich online tools, activities and materials already in use.

More Information and user documentation is available at iliosproject.org

Install and Update Instructions

Instructions for a new Install

Update Ilios

Upgrading From Ilios 2.x

Frontend Theming

For information about customizing the look and feel of the Ilios frontend for your respective institution, please visit docs/custom_theming.md for more information.

API Information

If you want to connect to the Ilios API a good place to start is docs/ilios_api.md.

Interacting with Ilios from the command line

Ilios provides a command line interface, see docs/custom_cli_commands.md for a list of available commands and how to use them.

Get Ilios

Download the latest distribution or clone the codebase.

Contact

For more information on Ilios please contact:

The Ilios Project * UCSF School of Medicine * 530 Parnassus Avenue * Box 0840 * San Francisco, CA 94143

Email: [email protected]

Development of Ilios

To get a development instance of Ilios up and running quickly, please review the steps in our Quick Setup Guide for Ilios for what is recommended and required.

ilios's People

Contributors

blo1 avatar ctam avatar dartajax avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar elliotkendallucsf avatar gboushey avatar github-actions[bot] avatar homu avatar jrjohnson avatar saschaben avatar stopfstedt avatar thecoolestguy avatar trott avatar vpassapera avatar zorgbort avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ilios's Issues

lastest phing version fails in deploy-prepare task

we're good on phing v2.4.12, but v2.6.0 fails in deploy-prepare task.

 Deploy Ilios-bundle /tmp/ilios/bundles/ilios_2013-08-26_14-32-28.tar.gz to "/web/ilios/htdocs_stefan_dev" directory and "ilios_dev_stefan" database
                (Y,n) [n]? Y
       [if] Error in IfTask
       [if] Error in IfTask
Execution of target "deploy-prepare" failed for the following reason: Aborting deployment.

re-factor the course calendar editing system

One of the significant bottlenecks for users is the clunkiness of the calendar editing system: In order to switch from session to session during course development in the calendar, they must travel back to the course page, select the session desired, click back into the calendar, and then begin their work again. Between the load times involved and the excess navigation, not to mention the cognitive fragmentation caused by all the breaks in workflow, this is essentially a dud of a function.

Ideally, we would refactor the way we are capturing calendar information so that travel between sessions within the calendar is more fluid and immediate. In the Google Calendar comparison, think of each session displayed (with our "show all sessions" radio selected) as one "my calendar" thread. I can choose to see and work with all the individual threads, without disruption. Ideally, ilios users would be able to click directly into an event for a session in which they are not currently working, and have the calendar shift them into that session, seamlessly.

IE conditional classes not needed

The IE conditional classes (ie-lt*) are only used to add an extra border for IE8 (and IE7 and IE6, but seriously, come on).

Here's what the screens look like with the classes:

screen shot 2013-11-04 at 10 46 07 am
screen shot 2013-11-04 at 10 46 20 am
screen shot 2013-11-04 at 10 46 49 am

And here's what they look like with the CSS rule removed:

screen shot 2013-11-04 at 10 47 57 am
screen shot 2013-11-04 at 10 48 57 am
screen shot 2013-11-04 at 10 49 14 am

Pull request to nuke the IE conditional classes coming soon....

inability to remove cohort/course associations

currently, once group associations are made from any associated cohort in a course, no cohort may be removed from the set. this can be a problem when a cohort is incorrectly added.

despite the issues of recursively identifying group associations to sessions and ILMs, we should look into a way to allow for cohorts with no associated groups to be removed from a course. This is likely to be part of furthering the FK and indexing of relational tables in issue #211.

unlink competencies from PCRS

As it turns out, the Competency Framework prohibits circular references even among non-hierarchical relationships. Since the current one-to-many mapping of competencies to PCRS results in many-to-many relationships between program objectives and PCRS in the report (leading to circular refs), we must revert to a strict one-to-one relationship between competencies and PCRS.

Undo some of the mappings introduced with v2.3.0 (see migration 11).

add task for creating a distro to build script

building a distro tarball currently requires a modest amount of work, but its still a nuisance.

automate this task. this should work as following:

  1. copy entire codebase (not just part of the /web dir) to a build dir, sans git, vagrant/puppet and build files/dirs
  2. do a search/replace on config files and X out most of the placeholders
  3. search/replace revision placeholder in default.index.php and default.ilios.php with current timestamp.

...that should be about it.

simplify translation api

right now, the translation functions require that a language code is passed on each call.

    $this->languagemap->t('some.key', $lang);

that language key is set in the application configuration. eliminate the need to pass this data around by reading it and setting it once as property of the language map class during instantiation.

associate each learner group with its "owning" cohort

Currently, this relationship is only established for "Cohort Master Groups" in a JOIN table cohort_master_group.

CREATE TABLE `cohort_master_group` (
    `cohort_id` INT(14) UNSIGNED NOT NULL,
    `group_id` INT(14) UNSIGNED NOT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

As can be seen above, the relationship between cohorts and "master groups" is rather weak, e.g. there are no foreign key contraints enforced in the JOIN table.

Furthermore, in order to find out which group is owned by a cohort for an arbitrary group one must first find the group's parent "master group".
This requires the traversal of a tree-like graph via the stored procedure root_group_of_group. Since this function is implemented as a recursive query internally, this becomes a very expensive operation very fast.

Proposed solution to this:

Associate each group with it's owning cohort directly. Add a column cohort_id to the group table, set the proper fkey etc.
Then update any relevant queries as applicable.

recurring events display does not load correctly on event creation

When creating a set of offerings as recurring events (using the recurring events tool), when the event is saved only the first two weeks of offerings created will display on the editing calendar, regardless of the length in weeks of recurrence. Returning to the Course/Session page, and then re-loading the calendar page for the session will display the full set of recurring events. N.B.: All instances display correctly in the list box below the calendar, so this is primarily a calendar rendering issue rather than a db commit issue (I think).

relative paths in yui-widgets.css stylesheet wrong

example:

.yui-skin-sam .yui-button {
    /* ... */
    background: url(../../../../scripts/yui/build/assets/skins/sam/sprite.png) repeat-x 0 0;
}

this goes up on directory too much.
find and fix all of these paths.

learner group student picker does not refresh after save

When adding a name to a learner group, the picker list of available names does not refresh after saving changes back to the server.

Example:

If you add student "XYZ" to the (top level) group "A", save that change, and then add that user to the another top-level group "B" as well, you cannot do so without a full page refresh, as the user's name is still "picked" from the available list in the picker.

implement psr-0 compliant autoloader for ilios libs

Everything under application/third_party/Ilios should be auto-loaded via a PSR-0 compliant auto-loader.

Update the PEAR-ish autoloader in application/hooks/Ilios/Hooks.php accordingly.

This also implies that we start using PHP namespaces, so make the necessary adjustments throughout Ilios as well.

clean up db schema install scripts

database/install/ilios_tables.sql is a mess.

TODO:

  • convert tabs to white space
  • indent everything properly (4 spaces per indentation level) and align the beginning of each SQL statement with the left margin.
  • lose the following statements and fragments:
    • SET auto_increment=1
    • SET character_set_client = utf8;
    • any table comments ( NOT the doc blocks above each CREATE TABLE statement, just the COMMENT='...' on the table itself)
  • apply proper quotes to table collation, table engine, default charset etc values.
  • add DROP TABLE IF EXISTS statements before each CREATE TABLE statement where missing.
  • remove any obsolete commented out code.

mesh picker for my reports not functioning

The mesh picker for my reports does not allow the actual input/selection of a term; no search button is available and hitting enter only resets the window. New since 2.3.1.

calendar download for instructor/director level users

Currently, the calendar download provides a personal calendar file geared toward the students: an ics showing only events to which the user is associated directly.

There is a need to provide a similar mechanism, only for users who are associated with courses at a more generic level. Specifically, faculty who are associated with a course as a course director should be able to download the entire course calendar, not just the sessions which they may be teaching. This could be addressed by providing more controls to the user at the point of download, or by creating a new download class specifically for directors.

translation helper methods

having to spell out

$this->languagemap->getI18NString('some.key');
// or
$this->languagemap->t('some.other.key');

is pretty verbose, especially when calling these methods in view templates.

provide short-named view-helper methods that alias these methods.

Web Links with special characters fail upon selection as learning materials

When a link with special characters is created as a 'Web Link' learning material, it causes the a 'save draft' or 'publish' action to fail when it is selected for use in a course.

A course administrator reported that the following weblink caused a problem when it was selected for use in a course:

http://www.blackwell-synergy.com/doi/pdf/10.1111/j.1743-498X.2004.00007.x#search=%22Practical%20Teaching%3A%20Great%20Presentations%20Every%20Time%22

Using its UC E-link counterpart worked, and so did using a version shortened with the UCSF Link shortener. Something is happening in the urlencoding/decoding of the item when it is inserted into/retrieved from the database.

External Course ID does not get cloned during course rollover

Currently, the only course-level attribute that does not get cloned during rollover aside from that of associated program cohort is that of external course ID. Not sure why; unlike with the relationship of cohort to program year objective, there is no significant modifier that would cause problems here (that I can think of).

We should look at adding external course ID to the course rollover attribute collection.

character encoding issue with CSV upload

upload still barfs if any entries have non-latin-1 chars, generating the error:

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  json_encode(): Invalid UTF-8 sequence in argument</p>
<p>Filename: controllers/group_management.php</p>
<p>Line Number: 634</p>

track course administrators and their association with courses and curriculum

Beginning in April of 2014, LCME (the national accreditation group for Medicine) will require that we implement a method for tracking course administrators and their associations with curricular material/activity. Our current workaround, of adding them as directors on courses, is not very effective or convenient.

Much of the requirement would be met by:

  • exposing the audit trail on activity against course/session, along the lines of a timestamp on each: "last updated by Xxxx Xxxx at 00:00:00 12/24/2012"
  • creating a new course attribute, "Course Administrator", which would be a select list like instructor or director.

Questions we will need answered:

  1. Is the Course Administrator A) an explicit role assigned to an individual, or B) anyone with permissions to modify a given course considered a CA?
  2. If A), then can there be more than one CA per course? If so, is one a "master"?
  3. If B), then is one person assigned as "master" or CA of record from among the pool?

IE8 - program manager throws a js error on load

program_search_support.js 
line 116
ilios.pm.cs.emptySearchDialogForViewing
'Can't move focus to the control because it is invisible, not enabled, or of a type that does not accept the focus.'

(this may affect other versions of IE.)

improve topics picker performance

The performance of the topics picker is abysmal.
Turns out it is powered by the world's most bestest stored procedure disciplines_for_title_restricted_by_school on the server side.

replace this procedure with basic SQL queries.

recurring events tool creates additional offerings when used with "create offerings by group" feature

when using "create offerings by group" and generating a recurring offering, if a set of subgroups is selected ("add an offering per sub-group"), the correct creation of offerings for each subgroup is created for the first occurrence of the event; then for every recurrence AFTER the first, a phantom offering is generated for the parent group of the sub-groups selected, along with the offerings for the sub-groups.

Day one:

dayonerecurring - correct offering count

Next day of recurrence:

daytworecurring - incorrect offering count

If creating a recurring event for the parent group only ("add an offering per parent group"), it reverses: the first day has a single event, and then each following day in the recurrence pattern has an offering for each sub-group, plus the parent.

Day one:

dayonerecurringparent - correct offering count

Next day of recurrence:

daytworecurringparent - incorrect offering count

Add new role: non-student learner

provide for a new role of "non-student learner". This role (role_id = 6) will provide the ability to add non-students (faculty, staff) into the student groups to allow for their association to curriculum as learners, without altering their primary status in the system, or modifying the EDS student record validation in place. The role would be assignable from the user account management console, and would be available only to non-students.

This will require a modification to the tests for calendar visibility as well as the calendar toggle (instructor vs. student).

break out shared program objectives by year

Currently, most program objectives are shared across multiple program years.
Break these program objectives out into per-year objectives.
Fill in the blanks by cloning existing objectives.

This is a data cleanup issue. The bug that was causing the objectives to be linked to multiple programs in the first place has been identified and eliminated a while back.

offering does not display in student search if published with no student group associations

If a session is published and one or more of its offerings does not have a student group associated to it--overriding the requirement for a student group to be associated--then when using the search tool in student view mode, that session's offerings will not display in the results --- even if there is full instructor/time/date/place data.

Non-student view is unaffected.

refactor user/user-group join tables

The Ilios database schema defines several poorly crafted JOIN tables that associated various entities, such as ILM sessions and offerings, with either users or groups. The context of this association may differ (instructors vs learners), but the implementation patterns are always the same - one table is used to store group and user associations.

This creates several problems, the most blatant one is that we cannot enforce full referential integrity on the database level.

The solution would be to create separate join tables for users and groups.

Here are the tables that need to be reworked:

  • group_default_instructor
  • ilm_session_facet_instructor
  • ilm_session_facet_learner
  • offering_instructor
  • offering_learner

Allow the generation of direct links to LMs for use outside Ilios

Provide a mechanism to create urls pointing to the actual files in the file system, so that they may be pasted into other spots for linkage (i.e. a moodle page, portfolio page, etc.)

Link generator would be accessible in the LM metadata panel. It would be active only for the assigned owner of the LM,

Add Independent Learning to list of searchable instructional methods in calendar filter search

Currently, users cannot search Independent Learning Sessions (ILM) in the calendar search. They should be added as an option.

Achtung! SOM has a session type "Independent Learning". Which is not the same as our Independent Learning special-case.

proposed UI changes:

  • add a "ILM only" filter option, which can be combined with the "Topic", "Course Level" and "Program/Cohort" filters, but not with the "Session Type" filters
  • if the "ILM only" option is selected, the form elements in the "Session Type" filter become disabled.

11-20-2012_4-15-03_pm

similarily...

11-20-2012_4-05-18_pm

reduce offerings payload by excluding unused data

certain offering attributes, such as learning materials and objectives, are never displayed in the calendar (course summary, offering details) if the owning offering is un-published or published as "scheduled".

reduce payload by checking offering publishing status server side and exclude them if applicable.

replace dashes in inventory report id

the AAMC just threw us another business requirement change

There are a couple of Business Rules that have only recently been coded, so files that have been successful in the past might not be successful now. 

The main one that I think may affect you is CS01, which states not only that the REPORTID must be unique, but also that it is alphanumeric, so you cannot include dashes or underscores.

For example <ReportID domain="idd:medicine.medschool:cir">20122013_8</ReportID> would return an error message.

<ReportID domain="idd:medicine.medschool:cir">20122013h</ReportID> would be accepted.

CI business rules validations

<errorList>
    <error>CF10: The program-level competency object http://ucsf.edu/program_objective/5793 does not have a corresponding 'Relation' tag that relates it to a PCRS.</error>
    <!-- ... -->
</errorLIst>
  1. PCRS URLs are not compliant
  2. <Relation> elements and contained elements are not properly namespaced.

change "no sessions found" label for course when loading sessions

Currently when a course is loading in the course management page, the "no sessions found" label is in place. Once a course is called, the message should change to "loading all course sessions" until the course load is complete. This is particularly noticeable as a need when loading courses of 50 sessions or more.

Allow the edit of selected LM Metadata

Currently, learning materials metadata is not editable once loaded to the system. This is cumbersome and problematic. Editing by (at least) the owner and by superusers should be enabled.

Learning Materials metadata attributes:

  • [file size] - For uploaded files, the size in KB. Non-editable. Provided by system.
  • [file type] - For uploaded files, the file mime-type / extension. Non-editable. Provided by system.
  • [Owner] - The user who has uploaded the Learning Materials. Non-editable. Provided by system.
  • [Upload date] - Non-editable. Provided by system.

The following attributes should become editable after upload:

  • Display Name - Free-text entry field of up to 60 characters. This name is what will display for users of the system to identify the Learning Materials.
  • File Name/Web link/citation - For files: the physical or actual name of the uploaded file; for web links, the literal URL; for citations, the specific cite content.

Editable for Weblinks and Citations (not files).

  • Owner role - Select from Author, Co-author, or Instructional Designer.
  • Content Author - Free-text entry field of up to 80 characters to capture the actual author (if known) of the Learning Materials content.
  • Status - Select from Draft, Revised, or Final.
  • Description - Free-text entry field to allow brief description of the Learning Materials.

For each unique use of a learning material, additional attributes may be added specific to that particular usage in the curriculum. These should become editable after upload:

  • MeSH Terms - Selected by searching the MeSH database. MeSH terms selected are unique to a given instance of use for any Learning Materials.
  • Notes - Free-text entry field to allow commentary and instruction for the Learning Materials. Notes may be set to be visible to all users, or set as visible only to instructional faculty/staff. Notes provided are unique to a given instance of use for any Learning Materials.
  • Required - Identifies required vs. recommended materials in the context of use. Requirement is unique to a given instance of use for any Learning Materials. In the learner view, required items will be noted by a star to the left of the item title.

modify display for course names/IDs in calendar search

Now that courses are beginning to have their external course IDs populated, it is clear that the current display for the search is not ideal.

Currently, the name and ID are concatenated into a single string within a single style span (see attached item 1). This should change to split the two into distinct units, and provide a styling to the ID which is aligned with that of the date following (see attached item 2).

Additionally, we should make sure that All course name listings in all displays are in same format and consistent throughout the application.

calsnap1

calsnap2

"students requiring assignment" flag does not refresh properly

After assigning pending student records in the admin console, the alert message does not update correctly to reflect the new status for the current school, but instead displays the total number of unassigned students for all schools.

ex: SOM has three students requiring assignment. One is assigned. after hitting the complete cancel button and returning to the default admin page, the alert reads "1197 students requiring assignment".

add "in draft" status for calendar events

right now, events (offerings) on the calendar are either shown in full, or as "scheduled" (tbd).
we need a third type, which is "in draft" (or perhaps "not published").

Allow LM linking from course summary to all session materials for instructors and directors assigned to the course

How it works now:

When the Course Summary is generated, the course level learning materials are available as links; the session learning materials are available as links ONLY if the user accessing the summary is a learner enrolled in that session of the course.

Proposed change:

in addition to existing functionality, any Instructor associated with a session would have active links to their sessions learning materials in the summary, and any director associated with the course would have active links to all learning materials in all sessions of course in the summary view.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.