Giter Site home page Giter Site logo

ucfopen / materia Goto Github PK

View Code? Open in Web Editor NEW
36.0 9.0 32.0 30.43 MB

Engage students with easily embedded apps for online courses. Supercharge your course with compelling experiences and game mechanics.

Home Page: https://ucfopen.github.io/Materia-Docs/

License: GNU Affero General Public License v3.0

PHP 45.02% JavaScript 41.02% Shell 1.10% Hack 0.17% HTML 0.24% Dockerfile 0.39% Procfile 0.01% SCSS 12.05%
education games widgets educational-game edtech eduapp courseware materia ucf digital-learning university-of-central-florida canvas-lms lti hacktoberfest

materia's Introduction

Materia

Materia is a platform and ecosystem for small, self-contained, customizable e-learning applications called widgets, designed to enhance digital course content. Widgets in the catalog can be customized by instructors to suit their instructional goals and objectives, then shared with students directly or embedded in an LMS through LTI.

Materia and its associated library of widgets is an open-source project of the University of Central Florida's Center for Distributed Learning.

View the Materia Docs for info on installing, using, and developing Materia and widgets.

Join UCF Open Slack Discussions Join UCF Open Slack Discussions

Using Materia at Your Institution

It's important to note that UCF maintains an instance of Materia for the UCF community, but it cannot grant access to users of other institutions. External institutions are welcome to host their own copy of Materia, and interested parties should contact their IT and distance learning department(s) about making Materia available to their students. We also welcome questions and inquiries on the UCF Open Slack discussion linked above.

Widgets & Associated Repositories

While casual references to Materia typically involve both the platform and its associated ecosystem of widgets, this repository only includes the Materia platform itself. Additional open-source repositories associated with Materia include:

  • Most first-party widgets authored by UCF. These can be found by searching for "widget" under the UCFOpen GitHub organization or visiting the Materia Widget Gallery.
  • The Materia Widget Developer Kit (MWDK). This is a required dependency of all widgets and includes a built-in express server and webpack configs for rapid in-situ development of widgets.
  • Materia-Theme-UCF. This is a FuelPHP module that allows for overrides of certain views (login, help pages) with institution-specific variants.

Installation

Materia is configured to use Docker containers in production environments, orchestrated through docker compose, though other orchestration frameworks could potentially be used instead. While it may be possible to deploy Materia without Docker, we do not recommend doing so.

Docker Deployment

We publish production ready docker and nginx containers in the Materia Docker repository. For more info on using Docker in Production, read the Materia Docker Readme

Configuration

Visit the Server Variables page on our docs site for information about configuration through environment variables.

Development

Code contributors should review the CONTRIBUTING document before proceeding.

Local Dev with Docker

Get started with a local dev server:

git clone https://github.com/ucfopen/Materia.git

cd Materia/docker

./run_first.sh

The run_first.sh script only has to be run once for initial setup. Afterwards, your local copy will persist in a docker volume unless you explicitly use docker-compose down or delete the volume manually.

Use docker-compose up to run your local instance. The compose process must persist to keep the application alive. Materia is configured to run at https://127.0.0.1 by default.

In a separate terminal window, run yarn dev to enable the webpack dev server and live reloading while making changes to JS and CSS assets.

Note that Materia uses a self-signed certificate to facilitate https traffic locally. Your browser may require security exceptions for both 127.0.0.1:443 and 127.0.0.1:8008.

More info about Materia Docker can be found in the Materia Docker Readme

Creating additional users

See the wiki page for Creating a local user.

Running Tests

Tests run in the docker environment to maintain consistency. View the run_tests_*.sh scripts in the docker directory for options.

Running A Single Test Group

Inspect the actual test command in /.run_tests.sh for guidance, but as of the time of writing this, you can run a subset of the tests in the docker environment to save time.

The following command will run just the Oauth tests rather quickly:

./run_tests.sh --group=Oauth

Git Hooks

There is a pre-commit hook available to ensure your code follows our linting standards. Check out the comments contained inside the hook files (in the githooks directory) to install it, you may need a few dependencies installed to get linting working.

Authentication

Materia supports two forms of authentication:

  • Direct authentication through direct logins. Note that Materia does not provide an out-of-the-box tool for user generation. If your goal is to connect to an external identity management platform or service, you will need to author an authentication module to support this. Review FuelPHP's Auth package and Login driver documentation, as well as the ltiauth and materiaauth packages located in fuel/packages to get started.
  • Authentication over LTI. This is the more out-of-the-box solution for user management and authentication. In fact, you can disable direct authentication altogether through the BOOL_LTI_RESTRICT_LOGINS_TO_LAUNCHES environment variable, making LTI authentication the only way to access Materia. Visit our LTI Integration Overview page on the docs site for more information.

Asset Storage

Materia enables users to upload media assets for their widgets, including images and audio. There are two asset storage drivers available out of the box: file and db. file is the default asset storage driver, which can be explicitly set via the ASSET_STORAGE_DRIVER environment variable.

materia's People

Contributors

a-goetz avatar accell avatar ahoran3 avatar aileenpongnon avatar anthonyrodriguez726 avatar cayb0rg avatar clpetersonucf avatar dependabot[bot] avatar emanuelgitcodes avatar frenjaminbanklin avatar fyonekur avatar gitnix avatar iturgeon avatar iveysaur avatar jaxbot avatar ljoks avatar michaelferrara avatar nathaned avatar rdoolz51 avatar samuel-belcastro avatar superlaza avatar weining-li avatar williamradfunk avatar zachberry 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

materia's Issues

Provide do-not-edit warnings in Score Module files in the vendor directory

Issue by zachberry from Mon Nov 26 19:49:55 2012
Originally opened as https://github.com/ucfcdl/Materia/issues/521


Bahamut now "installs" Score Module files by moving them from the widget package source to /fuel/packages/materia/vendor/widget/score_module/. Developers shouldn't edit the /vendor version of the score module directly since this will get overwritten if the widget is re-installed.

It'd be nice to inject a warning into these files when the widget task installs them, for example:

<?php
/**
     **** DO NOT EDIT THIS FILE! ****

     This file was copied here by installing a widget package. Any modifications
     to this file will be overwritten if this widget package is upgraded or reinstalled.
     Edit the score module in the package source instead of this file.
**/

Enigma preview demo submit scores causes errors

Issue by iturgeon from Sat May 4 04:41:15 2013
Originally opened as https://github.com/ucfcdl/Materia/issues/718


Not sure if this is an enigma issue, materia.score.js issue, or a score module problem, but the server traces this error:

ERROR - 2013-05-04 04:14:09 --> 8 - Undefined property: stdClass::$value in /mnt/materia/fuel/packages/materia/classes/score/manager.php on line 237
DEBUG - 2013-05-04 04:14:09 --> Fuel\Core\Database_Exception Object
(
    [message:protected] => SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'value' cannot be null with query: "INSERT INTO `log` (`play_id`, `type`, `item_id`, `text`, `value`, `created_at`, `game_time`, `ip`) VALUES (-1, 'SCORE_ANSWERED_QUESTION', 'f28c9fed0faa83e31c2d6458bf7e3ca5', 'Arlen', null, 1367640849, 4.391000, '192.168.33.1')"
    [string:Exception:private] => 
    [code:protected] => 23000
    [file:protected] => /mnt/materia/fuel/core/classes/database/pdo/connection.php
    [line:protected] => 175
    [trace:Exception:private] => Array
        (
            [0] => Array
                (
                    [file] => /mnt/materia/fuel/core/classes/database/query.php
                    [line] => 256
                    [function] => query
                    [class] => Fuel\Core\Database_PDO_Connection
                    [type] => ->
                    [args] => Array
                        (
                            [0] => 2
                            [1] => INSERT INTO `log` (`play_id`, `type`, `item_id`, `text`, `value`, `created_at`, `game_time`, `ip`) VALUES (-1, 'SCORE_ANSWERED_QUESTION', 'f28c9fed0faa83e31c2d6458bf7e3ca5', 'Arlen', null, 1367640849, 4.391000, '192.168.33.1')
                            [2] => 
                        )

                )

            [1] => Array
                (
                    [file] => /mnt/materia/fuel/packages/materia/classes/session/log.php
                    [line] => 105
                    [function] => execute
                    [class] => Fuel\Core\Database_Query
                    [type] => ->
                    [args] => Array
                        (
                        )

                )

            [2] => Array
                (
                    [file] => /mnt/materia/fuel/packages/materia/classes/session/logger.php
                    [line] => 78
                    [function] => db_store
                    [class] => Materia\Session_Log
                    [type] => ->
                    [args] => Array
                        (
                        )

                )

            [3] => Array
                (
                    [file] => /mnt/materia/fuel/packages/materia/classes/score/manager.php
                    [line] => 237
                    [function] => add_log
                    [class] => Materia\Session_Logger
                    [type] => ::
                    [args] => Array
                        (
                            [0] => -1
                            [1] => SCORE_ANSWERED_QUESTION
                            [2] => f28c9fed0faa83e31c2d6458bf7e3ca5
                            [3] => Arlen
                            [4] => 
                            [5] => 4.391
                            [6] => 1367640849
                        )

                )

Add Courses to instances

Issue by iturgeon from Tue Jan 17 19:24:35 2012
Originally opened as ucfcdl#6


Each widget instance will be able to be associated with a specific course/semester.

Add this to the database, create widget, edit widget, and gameinstance data.

Then make sure that my-widgets can sort the list by these courses.

Uncouple Save Draft from Publish & Preview

Issue by JLoppert from Wed Feb 27 16:53:40 2013
Originally opened as https://github.com/ucfcdl/Materia/issues/591


Users should be able to save a draft of a widget that contains errors.

Publish, Preview and Save Draft all use checkForSave().

checkForSave() is implemented in the Creator.mxml of each widget and should return true only if the widget does not contain any errors.

Fix requires updating creator.js, materia.creator.js, each widget's Creator.mxml, maybe CreatorBase.mxml, and committing each recompiled widget.

Media Catalog: Users are unable to upload files in IE10

Issue by michealparks from Tue Apr 30 16:17:04 2013
Originally opened as https://github.com/ucfcdl/Materia/issues/702


Desktop Mode:

Apparently a bug exists somewhere between IE10 and plupload that disallows a user to use the "add files" button until a file is dragged into the "drag files here" field.

Metro Mode:

In addition to this problem, dragging files is nonexistent in Metro, which renders the user completely unable to bypass the bug and upload a file.

screen shot 2013-04-30 at 12 16 10 pm

Crossword character alignment

Issue by JLoppert from Mon Mar 11 14:27:58 2013
Originally opened as https://github.com/ucfcdl/Materia/issues/625


Crossword characters are not always aligned correctly.

Screen Shot 2013-03-13 at 12 40 30 PM

Issue stems from the text not always being placed in the center of the crossword space.

--- Potentially relevant code areas ---
CrosswordSpace.as:
constructor

CrosswordPuzzle.as:
getWordFromIntersectionClick()
setSpace()

Engine.as:
crosswordWordSelected()

Update Log type conversion

Issue by JLoppert from Tue Apr 30 14:22:13 2013
Originally opened as https://github.com/ucfcdl/Materia/issues/698


When creating/adding a new log type you have to do the following:

Add log type to

  • session/log.php
  • update type in the log table -- migration 003_create_log.php
  • update materia.score.js
  • update get_type() in session/logger.php

score.js defines some int value which is sent to the server. The server converts that value to a string defined in session/log.php.

The logging method should be updated to remove the conversion process.

Investigate adding badges to Materia

Issue by keeeeeegan from Mon Apr 16 18:46:51 2012
Originally opened as https://github.com/ucfcdl/Materia/issues/93


The profile page was designed to show a ranking, which should be a number between 0-100 that says something about the user's performance overall in the system. Kind of like an overall score screen so users can compare how they are doing with other users, but on a larger scale. Consider open badges as part of the rank.

http://openbadges.org/en-US/

https://wiki.mozilla.org/Badges

Modify the widget instance model to track practice/assessment mode.

Issue by FrenjaminBanklin from Tue Jul 30 18:48:58 2013
Originally opened as https://github.com/ucfcdl/Materia/issues/855


In order to enable #685, widget instances now need an additional property corresponding to the intended value of the instance for students, i.e. a practice widget/study tool or a quiz/assessment.

Also, since we're changing the widget_instance model anyway, it doesn't look like we're using height/width. Should we get rid of them?

Non-scoring preview for LTI connections with unknown user

Issue by zachberry from Wed Jul 24 19:27:42 2013
Originally opened as https://github.com/ucfcdl/Materia/issues/837


Problem: Showcasing Materia content via LTI is troublesome with special non-UCF users since it simply throws an 'Unknown User' error. It would be nice if we could default on a simplified preview mode which didn't reveal your score but allowed you to see something working. A notice would be very obvious perhaps that this is in a preview state.

materia.set.datetime.js fixTime function should allow for page load time

Issue by zachberry from Tue Apr 16 14:39:20 2013
Originally opened as https://github.com/ucfcdl/Materia/issues/666


The JS code to handle time zone issues doesn't account for page load times, so refreshing the page can cause a time such as 11:59 to oscillate between 12:00, 11:58, and so on.

At a minimum I think we should ignore any offsets < 30 seconds since the fixTime function is really about fixing issues where the user's computer is off by hours.

For browsers that support it this could be pretty useful as well: http://www.html5rocks.com/en/tutorials/webperformance/basics/

Allow widget developers to create same filenames in creator and engine folders.

Issue by michealparks from Thu Jul 25 16:15:31 2013
Originally opened as https://github.com/ucfcdl/Materia/issues/839


Makobuild and Materia currently consolidate both Engine/Creator JS/CSS files into one folder. However, the widget scaffold has the Creator and Engine JS/CSS files separated, which creates the illusion of being able to make files with the same filename, Ex. /_creator/file.js & /_engine/file.js. When consolidating directories makobuild will overwrite one of these files.

Long term solution: Change this.
Short term solution: Have Makobuild deliver a warning during widget compilation.

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.