Giter Club home page Giter Club logo

obojobo-classic's Introduction

Obojobo

Obojobo is a Learning Module Management System

Quick Start with Docker

For local development, testing, and as a reference for the architecture setup, we have a Docker environment to get you up and running quickly.

The docker-compose setup will automatically set up the server containers, seed the database, and get everything up and running.

  1. Install Docker for Mac/Windows/Linux
  2. Run docker-compose up -d (-d makes it run in the background eg: daemonized). this will take a while the first time.
  3. After 2 finishes: Run docker-compose run --rm phpfpm composer install to install wordpress and all the php vendor libraries.
  4. After 3 finishes: Run docker-compose run --rm phpfpm php internal/update_password.php obojobo_admin rocketduck to set the obojobo_admin user's password.
  5. Log in either at http://127.0.0.1/repository or http://127.0.0.1/wp/wp-admin

React Repository AND Docker

Docker isn't needed to work with storybook components, just use yarn storybook for that. To allow react to talk to the server, you'll need to run webpack-dev-server and the docker servers together.

That means you need to have BOTH the docker servers running (docker-compose up -d shown above) AND the webpack dev server (yarn dev). Using this combo requires the obojobo config for APP_URL be set to the url that webpack-dev-server creates, that value is hardcoded (due to php class const) in cfgLocal.docker.php. The url you should use is whatever webpack-dev-server announces when it starts running, usually https:/127.0.0.1:8080

Requirements

  • Unique domain or sub domain (obojobo.yourschool.edu)
  • libjpeg
  • libpng
  • Nginx & PHPFPM (or Apache & mod_php)
  • MySQL 5.5 or 5.6 database
  • Memcached
  • PHP 5.6 (with the following extensions)
  • gd
  • mbstring
  • mycrypt
  • mysql
  • mysqlnd
  • opcache
  • pecl-memcache
  • xml
  • Install PHP Composer via https://getcomposer.org/download

Production Install

PHP Setup

  1. Configure your php.ini settings. (typically located in /etc/php5/php.ini or nearby)
  • set date.timezone to America/New_York or whatever's appropriate
  • set session.save_handler to 'memcache'
  • set session.save_path to localhost:11211 (should be whatever your memcache server is running)

PHP-FPM Setup (NGINX ONLY)

  1. Set a few php-fpm options (typically located in /etc/php-fpm.conf or /etc/php-fpm.d/*.conf)
  • user = nginx
  • group = nginx
  • security.limit_extensions to .php

NGINX Setup

We have a handful of url routing settings unique to Obojobo that need to be configured into the webserver.

  1. Set up your Nginx config, typically located in /etc/nginx/nginx.conf or /etc/nginx/conf.d/*.conf
  2. Use the rules set in internal/docker/nginx.conf as a reference. Note the docker example is setup so that obojobo is the only site.

APACHE SETUP

  1. Enable modrewrite sudo a2enmod rewrite
  2. Use internal/docker/apache-vhost.conf to update your apache virtual hosts. Ve sure to adjust the domain matching and directories if needed
  3. sudo service apache2 restart

Create Databases

Keeping separate users for wordpress and obojobo tables helps to somewhat isolate data and permissions.

  1. Create 2 mysql users
  • obojobo_user
  • obojobo_wp_user
  1. Create 2 mysql databases
  • obojobo
  • obojobo_wordpress
  1. Give each user access to each database
  • GRANT ALL ON obojobo.* TO 'obojobo_user'@'%';
  • GRANT ALL ON obojobo_wordpress.* TO 'obojobo_wp_user'@'%';
  • FLUSH PRIVILEGES;
  1. Create tables and fill sample data
  • mysql -uroot -p < internal/docker/01_obojobo_tables.sql
  • mysql -uroot -p < internal/docker/02_obojobo_sampledata.sql
  • mysql -uroot -p < internal/docker/04_wordpress_tables.sql
  • mysql -uroot -p < internal/docker/05_wordpress_data.sql
  1. Update wordpress tables to match your domain. The sample data uses http://localhost, use a tool like https://rudrastyh.com/tools/sql-queries-generator to change that to your own domain.

Set up Obojobo

  1. Git clone Obojobo git clone [email protected]:ucfcdl/Obojobo.git /var/www/obojobo
  2. Install composer libraries: In the /var/www/obojobo and run composer install or php composer.phar install
  3. Make sure the following directories are writable by the webserver user (usually nginx or www-user).
  • internal/logs
  • internal/media
  • internal/templates/compiled
  1. Copy /internal/config/cfgLocal.default.php to /internal/config/cfgLocal.php and customize

Configure

  1. Run through the options in cfgLocal.php for database connection info, paths, and hosts.

Customization

Wordpress Themes

Login Modules

Administration

TBD

obojobo-classic's People

Contributors

ctcuff avatar iturgeon avatar jaxbot avatar jpeterson976 avatar maufcost avatar vutoan1245 avatar zachberry avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

obojobo-classic's Issues

Component: DataGridStudentScoreCell

Shows a student's score for an assessment (or -- if an attempt has been started but not completed). Additionally if the score was imported it shows (Imported), otherwise it shows a Details... button which eventually will open the ModalScoreDetails modal

Mockups:

image

Component: Button

Note that there are a few styles needed - A link-like button (both bold and not bold), a smaller button, a larger button and finally an "alternate" version which would be silver instead of purple.

Component: ModalScoreDetails

(This component hasn't been fully stubbed out yet - Feel free to work on it but you may need to build out some sub-components)

This is the dialog that shows up if a user clicks on the 'Details...' link from the DataGridStudentScoreCells.

Mockups:

image

image

image

PermsManager creates issues when using mysqli

On php7, mysql_* functions are no longer avail and we need to update to mysqli. Most of this work was done, but there are a few oddly place mysql calls that aren't abstracted through the db layer.

Component: ModalScoresByQuestion

(This component hasn't been fully stubbed out yet. Feel free to work on it, but you may need to build out sub-components)

This dialog shows up when a user clicks on the button at the bottom of InstancesSection, showing scoring data on each question in a learning object.

image

image

Component: ModalInstanceDetails

This modal lets you create instances or edit instances. The mockup is mostly copied from the older Flash UI since I like the layout of that interface. The various elements would just be updated with the modern look.

image

Component: Instances list

Need a component that will list and sort instances. Users should be able to filter the list with a filter input and clear the filter input with a clear button. Users should also be able to click on the column headings to sort by that column.

Old UI reference:

Untitled-3

Example data:

[
	{
		"instID": "1438",
		"loID": "14427",
		"userID": "6661",
		"userName": "Zachary A Berry",
		"name": "Conducting a Literature Review ",
		"courseID": "deleteme",
		"createTime": "1282069407",
		"startTime": "1282069380",
		"endTime": "1282082400",
		"attemptCount": "1",
		"scoreMethod": "h",
		"allowScoreImport": "1",
		"perms": [],
		"courseData": { "type": "none" },
		"externalLink": null,
		"originalID": 0,
		"_explicitType": "obo\\lo\\InstanceData"
	},
	{
		"instID": "5205",
		"loID": "23735",
		"userID": "6661",
		"userName": "Zachary A Berry",
		"name": "Citing Sources Using MLA Style",
		"courseID": "be_creative_lst",
		"createTime": "1371668609",
		"startTime": "0",
		"endTime": "0",
		"attemptCount": "1",
		"scoreMethod": "h",
		"allowScoreImport": "1",
		"perms": [],
		"courseData": { "type": "none" },
		"externalLink": "canvas",
		"originalID": 0,
		"_explicitType": "obo\\lo\\InstanceData"
	}
]

(API Call: https://obojobo.ucf.edu/api/json.php?m=getInstances)

Credhub iframe should persist between assessments

Every time the scores page is shown a request is POSTed to credhub, however the oauth timestamp is not updated. This eventually causes a timeout error. Instead we should be keeping on to that iframe once its generated, and update it only after a new attempt is submitted.

Component: MyInstances

The left-side of the UI, which stays fixed to the browser height. SearchField will let you filter the data grid and the refresh button would reload the instance list.

Mockup:

image

SAML logins can end up in an endless redirect loop

Using the private UCF auth module, if a user authenticates via SAML but doesn't exist in our authorization database - the software will redirect them back to the login screen, then back to SAML, and on an on.

Obojobo should instead display an error message.

Component: DataGrid

This is the base data grid component. Users should be able to click on the header row to sort the grid by the various columns. The style should match the mockup.

Example:

image

Component: DefList

A set of key/value pairs (although as shown in the example below the key can be empty)

image

Lti roles are a little fragile

Make sure the lti roles are more robust, we have some defined now using some non-standard roles from the past, need to update them so that urn:lti:instrole:ims/lis/Administrator is recognized as an admin

Captivate 5 spy can produce NaN scores

Responses are indexed by a question index. If a student skips a question the for loop to calculate the current score will include undefined resulting in a NaN total.

YouTube videos no longer support embedding in flash

When creating learning objects that contain YouTube Videos, the Repository used to load the video into the interface directly.

YouTube stopped supporting this, and the Repository errors in a weird way. Right now, the first youtube video loaded will appear every time any other youtube video is shown.

This does not affect the html viewer in any way. So despite them looking wrong in the authoring environment, they work just fine for students.

IE Edge doesnt allow QA answer change sometimes

This occurs on loID: 31854

If the assessment contains a question with a flash materia widget, then a QA input question, after the flash materia widget is completed (score screen shown), the QA Input question seems to stop allowing you to "Save Answer" even after it's changed.

Component: Header

The purple pill in the center is the "banner", and the Header component has a prop that decides if the banner should be shown or not. Clicking on the banner or on the 'about' link should fire onClickAboutOrBannerLink, which eventually will show a modal describing the differences between the old Obo and Obo next.

Mockup:

image

question sets with alts can cache incorrectly

It appears it is possible that preview be incorrect due to cached qsets.

An lo with question alts will sometimes display all questions (though not as alts) in preview mode.

Clearing cache seems to clear the issue.

Note - there seems to be no code that clears the qgroup cache, suggest adding a call to clear the cache when editing questions, and adding a shorter expire time for the cache on qsets.

Component: DataGridAttemptsCell

This cell shows the number of attempts taken out of the number of available attempts (which is numAttempts + numAdditionalAttemptsAdded) [In Classic users can grant students additional attempts on a case-by-case basis]. The plus and minus buttons add or remove additional attempts (The minus button only appears when additional attempts have been added)

Mockup:

image

Upgrade api to allow JSON POST requests for use with module importer

We need a way to move lo modules from one obojobo install to another. This necessitates api upgrades so the scripts can upload new learning objects through the json api.

Currently this isn't possible because the api endpoints that convert json objects to php objects are not available through a json POST request.

ModLTI won't update a user's info

If a user's email or name changes in Canvas, and the user already exists in Obojobo, their user info won't be updated.

At UCF, this was chosen because we use a custom auth module to connect to a database that contains this info. Without that, the lti really needs to be able to update the users, so let's change the code so lti authentications can update email, first, and last names.

Add ability to detect lti messages in normal view routing

we have 2 endpoints. Using the picker, we use /lti/assignment.php?instID=XXXX. Using the copy-paste share url, we use /view/XXXX

If someone copies the view link into an lti-assignment page in canvas, the scores are not sent back.

Add detection in the view page to act as an lti when those params are detected.

Master Lo's aren't keeping their authors properly

Created by: iturgeon

Notify Coreen when completed.

Hi Ian,

Can I get my name added in the stats for the modules I created --under the option “List learning Object Authors”?

Here’s the list of modules I authored

  • Avoiding Plagiarism Using APA Style
  • Avoiding Plagiarism Using MLA Style
  • Citing Sources Using APA Style
  • Citing Sources Using MLA Style
  • Conducting a Literature Review
  • Creating a Search Strategy
  • Evaluating Web Sites
  • Focusing an Information Search
  • Maximizing Google Scholar Searches
  • Recognizing a Research Study
  • Selecting Articles for Academic Assignments

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.