Welcome to the ORB documentation¶
Contents:
Managing an ORB installation¶
Content Review Process¶
ORB Knowledge Management Tasks¶
All of the management tasks below are done from the ORB admin pages (https://health-orb.org/admin/) and you will need to be an admin user to be able to access these pages, or perform any of the tasks listed below.
User/Permissions Management¶
Search for a user¶
- Go to the ORB admin pages
- Under the Authentication and Authorization section select ‘Users’
- You can search based on name, username or email address
Update a users information/change password¶
- Find the user you’d like to update (Search for a user)
- Click to edit their details
- From here you can update their information and change their password
- Click save when finished
Add a new content reviewer¶
The new reviewer should register on ORB first and let us have their username so we can then assign them permissions.
- Go to the ORB admin pages
- Under the ORB section select ‘User profiles’
- Search or browse for the user and click to edit their details
- Under the reviewer roles, select the role(s) to give this user
- Click ‘save’
Give access to organisation analytics¶
Users can be given permissions to view the analytics for all the resources published under their organisations.
- Go to the ORB admin pages
- Under the ORB section select ‘Tag Owners’
- Click on ‘Add tag owner’ and select the user and tag to give permissions to, then save
Usually we’d give users access to tags that are organisations, although you could assign users to any tag.
View Content Reviewers¶
If you need to find out who is currently listed as being a content reviewer, and for which roles:
- Go to the ORB admin pages
- Under the ORB section select ‘User profiles’
- From the filtering menu on the right hand side, you can filter the users by the reviewer roles
Health Domain Management¶
Add a new health domain¶
- Go to the ORB admin pages
- Under the ORB section select ‘Tags’
- Select ‘Add Tag’ button (top right of screen)
- For the category, select ‘health domain’
- Add the name of the new name in both the ‘name’ and ‘name [en]’ fields
- Select your user id as both the create and update user
- Update the ‘order by’ field to reflect where in the list of health domains you would like the new one to appear - if you are placing it between existing domains, you should also update the order by for the existing domains to ensure consistency in display.
- Untick the ‘published’ checkbox if you would like to add some resources to the domain before it appears on the homepage. Once you are ready to publish the domain, just tick this box.
- Click ‘save’
Resource Management¶
Remove/Hide a resource¶
Usually it will be best to just hide a resource, rather than delete it, since deleting it will remove all of the statistics and other information that is associated with a resource.
- Go to the ORB admin pages
- Under the ORB section select ‘Resources’
- Search or browse for the resource and click to edit the details
- Change the status to either ‘pending’, ‘rejected’ or ‘archived’ (‘archived’ option coming soon)
- Click save
To completely delete the resource, from the edit page, there is an option to delete the resource.
Toolkit management¶
Add or update a toolkit¶
- Go to the ORB admin pages
- Under the ‘Toolkits’ section select ‘Toolkits’
- Search or browse for the toolkit and click to edit the details
Resource Collections¶
Create/Update a collection of resources¶
Collections may be resources that are part of a particular curriculum (eg OpenWASH).
- Go to the ORB admin pages
- Under the ORB section select ‘Collections’
- Either click to edit an existing collection, or click to ‘Add Collection’
- Enter a title/description/logo and then save
Now to add/edit the resources in the collection:
- Go to the ORB admin pages
- Under the ORB section select ‘Collection resources’
- Click on ‘Add Collection resource’
- Select the resource and the collection to add it to, optionally add an ‘order by’ number
- Click save, repeat for each resource to add to the collection
Tag Management (incl. Languages & Geographies)¶
Update the info/image for a tag¶
- Go to the ORB admin pages
- Under the ORB section select ‘Tags’
- Browse or search for the tag to update and click to edit it
- You can upload a new image or change the information for the tag
- For the image files, ORB will automatically resize and crop (if necessary) any images files for display on the site
- Click ‘save’
Update logo and information for an organisation¶
All organisations are stored as ‘tags’, see Update the info/image for a tag
Update the icon for geography or language¶
All geographies and languages are stored as ‘tags’, see Update the info/image for a tag
Updating Resource Review Guidelines/Roles¶
All the review guidelines/criteria are stored in the ORB database, so these can be updated or added to without making changes to the ORB code base.
Update a review guideline¶
- Go to the ORB admin pages
- Under the ORB section, select ‘Resource Criteria’
- Click on the criteria to update
- Make the necessary updates in the form and press save
Add new review guideline¶
- Go to the ORB admin pages
- Under the ORB section, select ‘Resource Criteria’
- Click on the button (top right) ‘Add Resource Criterion’
- Complete the description (the criteria text), and enter a number for ‘order by’ and ‘category order by’. These determine the order in which the criteria will be displayed.
- If the criteria is a for a specific reviewer role, select the role from the drop down list.
- Press save
Update/Add a reviewer role¶
- Go to the ORB admin pages
- Under the ORB section, select ‘Reviewer Roles’
- Select the role to change, or add a new one from the ‘Add reviewer role’ button
- If you have added a new role, you will likely want to add specific review guidelines for this role (see above)
ORB Peer Network - orb.peers
¶
synopsis: | Shared data across a network of peers |
---|
The ORB API provides a way for data on an ORB site to be accessed programmatically. This allows for other one ORB instance to download resources from another, syncing resources across a network of ORB peers.
The starting requirement is API access to the target ORB (e.g. the global mPowering ORB).
Setting up peers¶
A peer is added to your ORB instance by adding three data items:
- host name
- user name
- API key
This can be done from the Django admin or using a management command, add_peer.
The management command is especially helpful for automating setup of an ORB instance.
Note that the API key is stored and read in plaintext.
Syncing data¶
To sync data from a configured ORB peer, use the sync_peer_resources management command. This can be used without arguments or the numeric primary keys of configured peers can be provided to sync only from select peers.
The primary keys can be discovered via the Django admin or by using the management command list_peers.
How syncing works¶
The core action of the peer data sync is to copy or update resources from the remote ORB to the local ORB.
Global IDs¶
Every resource has a globally unique identifier which is copied with synced resources. This ensures that a resource can be downloaded from one ORB and from yet another and still retain a non-overridable ID that tracks it across instances. This GUID is used to identify resources for update.
Pending by default¶
Resources on the remote ORB that are not present on the local ORB are copied to new resources in the local ORB and placed in the pending state. These must be reviewed by a content administrator prior to becoming public on the local ORB.
Updates¶
Updates to a remote resource will overwrite any local changes.
Languages¶
ORB instances may have resources available with multiple language translations. Only data for languages explicitly supported on the local ORB instance will be synced. Other languages will be ignored.
Module overview¶
ORB Analytics¶
ORB stores a lot of data about how the site and resources are accessed.
Internationalization/Translations - Technical Set-up¶
Translating source content¶
Todo. See the Django i18n docs in the meantime!
Translating database content¶
Content in the database is user created content and cannot be translated using the normal gettext interface that Django provides. Instead a package called django-modeltranslation provides for language-specific mirrored fields in the database that allow for content specific translation.
Specifying models and fields for translation¶
Translations are registered much like admin.ModelAdmin classes in a translation.py file in each app root. For each model to translate create a translation class based on the TranslationOptions class, and specify the fields.:
from modeltranslation.translator import translator, TranslationOptions
from orb import models
class CategoryTranslation(TranslationOptions):
fields = ('name',)
translator.register(models.Category, CategoryTranslation)
In the above example the CategoryTranslation class specifies only that the name field should be translated, and the Category model is registered with this translation options class.
Realizing new translation fields¶
Field registration is by itself an insufficient step. It is like adding new fields to a model - you still need to create a database migration to realize the field(s). This is straightforward 3-step process.
- Run makemigrations for the app in question
- Apply the migrations with migrate
- Update the translation fields with the update_translation_fields command
The third step is important because of how modeltranslations pulls data out of the database. If you have a name field and then decide to translate it, then presuming an English language site with Spanish and Portuguese available as well, you will have four database fields: name, name_en, name_es, and name_pt.
Note
Dialect or region specific codes will have their own fields if specified, e.g. name_pt_br.
Once active, modeltranslation will look for the name value in name_en! Running update_translation_fields updates those values.
A convenience command has been added to the Makefile:
make register-languages
This will create migrations, apply them, and then update the translation fields.
Important
You must create new migrations any time you register new models/fields and also if you change the project LANGUAGES setting, so that database fields are available for each language.
Source code & Installation¶
The ORB site source code is available on GitHub: https://github.com/mPowering/django-orb
The site is built using the Django framework.
Server set-up and management¶
Email Setup¶
SSL Certificates¶
Search Engine¶
Backups¶
System updates¶
ORB Settings¶
- ORB_INFO_EMAIL
- ‘orb@example.com’
- ORB_GOOGLE_ANALYTICS_CODE
- Google Analytics tracking code
- ORB_PAGINATOR_DEFAULT
- 20
- ORB_RESOURCE_DESCRIPTION_MAX_WORDS
- 150
- ORB_RESOURCE_MIN_RATINGS
- 3
- SITE_HTTP_PROTOCOL
- string value which should be either ‘http’ or ‘https’ (email tasks will default to ‘http’ if this is not defined)
- STAGING
- False # used for version context processor
- TASK_UPLOAD_FILE_MAX_SIZE
- maximum file upload size in bytes
- TASK_UPLOAD_FILE_TYPE_BLACKLIST
- list of file types (MIME types) to exclude
Change log¶
v2.8.0 - not yet released¶
- 529: Add KPI report - https://github.com/mPowering/django-orb/issues/529
- 536: EU GDPR - add options to download data and delete account - https://github.com/mPowering/django-orb/issues/536
v2.7.0 - Released 3 Apr 2018¶
- 512: Moving to Django 1.11.x LTS - https://github.com/mPowering/django-orb/issues/512
v2.6.0 - Released 22 Feb 2018¶
- 462: Add option to archive a resource - https://github.com/mPowering/django-orb/issues/462
- add defusedxml==0.5.0 as package requirement
- 489: Add new/updated icons - https://github.com/mPowering/django-orb/issues/489
- 493: Can’t drag resources into a course - https://github.com/mPowering/django-orb/issues/493
- 494: Add course button not functioning - https://github.com/mPowering/django-orb/issues/494
- 496: Courses created twice - https://github.com/mPowering/django-orb/issues/496
- Update search bots list
- 504: Review & update docs/info when user reg is implemented - https://github.com/mPowering/django-orb/issues/504
- 523: Survey info- cadre and numbers being added when learning/browsing - https://github.com/mPowering/django-orb/issues/523
- 518: After survey the redirect for file should return the file, not a redirect to full path - https://github.com/mPowering/django-orb/issues/518
- 517: Registration form is still asking for optional fields - https://github.com/mPowering/django-orb/issues/517
- 516: All survey questions are showing up immediately - https://github.com/mPowering/django-orb/issues/516
- 513: After login/registration user should go back to the resource - https://github.com/mPowering/django-orb/issues/513
- 510: Pre-fill previous data used on resource download/link info request - https://github.com/mPowering/django-orb/issues/510
- 509: Request extra info on resource download/link - https://github.com/mPowering/django-orb/issues/509
- 508: Update to Resource meta data page - https://github.com/mPowering/django-orb/issues/508
- 507: Update registration page - https://github.com/mPowering/django-orb/issues/507
- 506: Settings for turning registration on & off - https://github.com/mPowering/django-orb/issues/506
- 505: Allow users to log in with either username or email - https://github.com/mPowering/django-orb/issues/505
v2.5.2 - Released 4 May 2017¶
- 472: Remove crt_member & mep_member fields from UserProfile model - https://github.com/mPowering/django-orb/issues/472
- 482: On advanced search, combining filters gives zero results - https://github.com/mPowering/django-orb/issues/482
v2.5.1 - Released 26 Apr 2017¶
- 469: Add auto-complete to the organisation field too - https://github.com/mPowering/django-orb/issues/469
- 477: Advanced search error - Field error: Relation fields do not support nested lookups - https://github.com/mPowering/django-orb/issues/477
v2.5.0 - Released 25 Apr 2017¶
- 368: Add auto complete on “other tags” - https://github.com/mPowering/django-orb/issues/368
- 468: Styling enhancements for auto-complete functionality - https://github.com/mPowering/django-orb/issues/468
- 182: Auto complete for geography and languages - https://github.com/mPowering/django-orb/issues/182
v2.4.0 - Released 17 Apr 2017¶
- 463: Add some additional help info on the model fields - https://github.com/mPowering/django-orb/issues/463
- 439: Tag view error: FieldError: Cannot resolve keyword u’discount’ into field. - https://github.com/mPowering/django-orb/issues/439
- 425: Toolkits - move to being a database model instead - https://github.com/mPowering/django-orb/issues/425
- 456: Ability to merge tags - https://github.com/mPowering/django-orb/issues/456
v2.3.0 - Released 27 Mar 2017¶
- 347: Add SSL cert to site - http://github.com/mPowering/django-orb/issues/347
- 440: IntegrityError on importing Spanish translation database files - http://github.com/mPowering/django-orb/issues/440
- 441: ReadTheBuild build failing with AttributeError: ‘module’ object has no attribute ‘UUIDField’ - http://github.com/mPowering/django-orb/issues/441
- 430: Add option in django admin to search/order by username - http://github.com/mPowering/django-orb/issues/430
- 428: Remove 1mCHW data - http://github.com/mPowering/django-orb/issues/428
- 445: Test peer to peer functionality end-to-end - https://github.com/mPowering/django-orb/issues/445
- 437: Update templates to use django 1.8 style of static files - https://github.com/mPowering/django-orb/issues/437
- 405: Allow health domains to be ‘hidden’ - https://github.com/mPowering/django-orb/issues/405
- 438: Update location of language selection in header for mobile - https://github.com/mPowering/django-orb/issues/438
- 448: export_db_translations - allow specifying the language - https://github.com/mPowering/django-orb/issues/448
- 449: Strategy for db translation updates - https://github.com/mPowering/django-orb/issues/449
- 450: Add the new videos to a page on the site & revise How to page - https://github.com/mPowering/django-orb/issues/450
- 432: Ability to preserve ordering of the tags - https://github.com/mPowering/django-orb/issues/432
- 431: Comma separator when multiple organisations listed - https://github.com/mPowering/django-orb/issues/431
- 459: ugettext and ugettext_lazy for crispy forms - https://github.com/mPowering/django-orb/issues/459
- 458: Integrity error when adding a new resource in Spanish - https://github.com/mPowering/django-orb/issues/458
v2.2.2 - released 5 Dec 2016¶
- 350: API - error when requesting limit of 1000 - http://github.com/mPowering/django-orb/issues/350
- 383: Scope of database field translations - http://github.com/mPowering/django-orb/issues/383
- 380: Tag API is only returning tags that are already attached to a resource - http://github.com/mPowering/django-orb/issues/380
- 378: Tags can be duplicated - http://github.com/mPowering/django-orb/issues/378
- 365: Implement option for user to change language - http://github.com/mPowering/django-orb/issues/365
- 369: Allow for translators to translate content from the database - http://github.com/mPowering/django-orb/issues/369
- 366: Add Spanish lang pack for interface - http://github.com/mPowering/django-orb/issues/366
- 395: On selecting Accept/Reject the review should be checked for… - http://github.com/mPowering/django-orb/issues/395
- 392: CRT process - starting review with no role assignments - http://github.com/mPowering/django-orb/issues/392
- 384: Content Review - should be an option to add a (free-text) reason for rejection - http://github.com/mPowering/django-orb/issues/384
- 385: Content Review - reviews should be able to check off the individual criteria - http://github.com/mPowering/django-orb/issues/385
- 414: Add migration file following latest commits - http://github.com/mPowering/django-orb/issues/414
- 371: Update content review workflow with new CRT structure - http://github.com/mPowering/django-orb/issues/371
- 372: Allow health domain owners to approve content - http://github.com/mPowering/django-orb/issues/372
- 400: Resource submitted email gets sent after step 1 rather than step 2 - http://github.com/mPowering/django-orb/issues/400
- 406: Error on final resource review (when rejected) - http://github.com/mPowering/django-orb/issues/406
- 404: Update about page - to reflect CRT/MEP process - http://github.com/mPowering/django-orb/issues/404
v2.2.1 - released 3 May 2016¶
- 344: Country map - update to show content we have for latin/south america - http://github.com/mPowering/django-orb/issues/344
v2.2.0 - released 23 Apr 2016¶
- 343: On analytics page split out orgs with approved content vs those without - http://github.com/mPowering/django-orb/issues/343
- 340: API - add category to the tags - http://github.com/mPowering/django-orb/issues/340
- 339: API - allow fetching of content by health domain or other tag - http://github.com/mPowering/django-orb/issues/339
- 255: Menu bar & drop down - http://github.com/mPowering/django-orb/issues/255
- 232: Add all ISO 639.2 standard languages as tags - http://github.com/mPowering/django-orb/issues/232
v2.1.0 - released 4 Nov 2015¶
- 342: Add area for toolkits - http://github.com/mPowering/django-orb/issues/342
v2.0.0 - released 14 Oct 2015¶
- 212: On resource form allow specifying the title of file or url - http://github.com/mPowering/django-orb/issues/212
- 86: UI to add multiple files to a resource - http://github.com/mPowering/django-orb/issues/86
- 101: After login/registration go back to original page - http://github.com/mPowering/django-orb/issues/101
- 311: Terms link on registration form not prominent - http://github.com/mPowering/django-orb/issues/311
- 322: Add page specifically for CRT members to review content - http://github.com/mPowering/django-orb/issues/322
- 305: Add CC REL markup - esp for search engines etc - http://github.com/mPowering/django-orb/issues/305
- 313: License options on the advanced search form - http://github.com/mPowering/django-orb/issues/313
- 324: Create fixture of all CC license variations and properties - http://github.com/mPowering/django-orb/issues/324
- 303: Country map - also show generic resources for continent - http://github.com/mPowering/django-orb/issues/303
- 295: Create page to view map to browse country resources by - http://github.com/mPowering/django-orb/issues/295
- 332: Update “health domain” in menu to be “browse resources” - http://github.com/mPowering/django-orb/issues/332
- 331: Rename ‘My Profile’ in menu - http://github.com/mPowering/django-orb/issues/331
- 76: Ability to save/bookmark resources? - http://github.com/mPowering/django-orb/issues/76
- 325: Create collections of resources - http://github.com/mPowering/django-orb/issues/325
- 328: Update upload step 2 with more explanation - http://github.com/mPowering/django-orb/issues/328
- 329: Update bookmarking icon and move to row with ratings - http://github.com/mPowering/django-orb/issues/329
- 330: Allow removing of bookmark - http://github.com/mPowering/django-orb/issues/330
- 337: Error on advanced search - http://github.com/mPowering/django-orb/issues/337
v1.1.0 - released 11th Aug 2015¶
- 293: Add order by last updated to order options - http://github.com/mPowering/django-orb/issues/293
- 228: Allow ordering by rating - http://github.com/mpowering/django-orb/issues/228
- 296: Write unit tests for rating functionality - http://github.com/mpowering/django-orb/issues/296
- 279: Create admin page to get email addresses for those who have signed up to newsletter - http://github.com/mpowering/django-orb/issues/279
- 271: Add popular tags to analytics main page - http://github.com/mpowering/django-orb/issues/271
- 13: Add option to view users - http://github.com/mpowering/django-orb/issues/13
- 149: Option to show analytics for an individual resource - http://github.com/mpowering/django-orb/issues/149
- 304: Allow users to upload profile image - http://github.com/mpowering/django-orb/issues/304
- 287: New field for attribution for resources - http://github.com/mpowering/django-orb/issues/287
- 80: Provide analytics of resource usage/downloads to content providers - http://github.com/mpowering/django-orb/issues/80
- 270: Add no resources submitted during month on Visitor analytics page - http://github.com/mpowering/django-orb/issues/270
- 187: Check that invalid header error emails are suppressed - http://github.com/mpowering/django-orb/issues/187
- 291: Changing/removing/adding resource image not working when editing a resource - http://github.com/mpowering/django-orb/issues/291
- 306: When on user profile view page - displays banner as if user is logged in - http://github.com/mpowering/django-orb/issues/306
- 308: How to distinguish between live and staging server? - http://github.com/mpowering/django-orb/issues/308
- 318: Error when accessing unapproved resource from direct link and not logged in - http://github.com/mpowering/django-orb/issues/318
- 33: Allow users to rate resources - http://github.com/mpowering/django-orb/issues/33
- 299: Update How to page - to include Moodle/courses - http://github.com/mpowering/django-orb/issues/299
- 316: On login page, add info about all being case sensitive - http://github.com/mpowering/django-orb/issues/316
- 321: Add CC FAQs page - http://github.com/mpowering/django-orb/issues/321
v1.0.2¶
- 314: Allow CRT and MEP members to view resources even though not approved - http://github.com/mpowering/django-orb/issues/314
- 312: Advanced search not working? - http://github.com/mpowering/django-orb/issues/312
- 315: Check up on bots to ignore - http://github.com/mpowering/django-orb/issues/315
v1.0.1¶
- 294: Add total countries to analytics - http://github.com/mpowering/django-orb/issues/294
- 298: Error when getting mailing list - http://github.com/mpowering/django-orb/issues/298
- 297: Blank searches being recorded? - http://github.com/mpowering/django-orb/issues/297
- 302: Memory Error for large file downloads - http://github.com/mpowering/django-orb/issues/302
28 May 2015¶
- 277: Add no languages the resources are in to the monthly analytics page - http://github.com/mPowering/django-orb/issues/277
- 209: Add description word count limit to API too - http://github.com/mPowering/django-orb/issues/209
27 May 2015¶
- 278: On homepage make the title “ORB by mPowering” - http://github.com/mpowering/django-orb/issues/278
- 201: Create specific cartodb account for mpowering - http://github.com/mPowering/django-orb/issues/201
25 May 2015¶
- 276: On admin site order drop downs - http://github.com/mPowering/django-orb/issues/276
- 285: make sure title is trimmed before saving - http://github.com/mPowering/django-orb/issues/285
21 May 2015¶
- 282: Name Error when updating profile - Organisation not defined - http://github.com/mpowering/django-orb/issues/282
- 278: On homepage make the title “ORB by mPowering” - http://github.com/mpowering/django-orb/issues/278
19 May 2015¶
- 274: Check the text in the resource overview, html entities not rendering properly - http://github.com/mpowering/django-orb/issues/274
- 273: Can’t upload pdf files, get message that can’t upload application files - http://github.com/mpowering/django-orb/issues/273
15 May 2015¶
- 267: Add robots.txt to avoid downloading the actual resource files - http://github.com/mPowering/django-orb/issues/267
- 268: Add link to CC on resource form - http://github.com/mpowering/django-orb/issues/268
14 May 2015¶
- 263: Error when exporting organisation analytics - http://github.com/mpowering/django-orb/issues/263
- 261: Finish About page - http://github.com/mpowering/django-orb/issues/261
- 242: Add generic photo for resources uploaded with no image - http://github.com/mpowering/django-orb/issues/242
- 264: Update icons - http://github.com/mpowering/django-orb/issues/264
- 265: Update resource placeholder images - http://github.com/mpowering/django-orb/issues/265
- 266: On Organisation analytics page, list out all the resources (with links to edit) - http://github.com/mpowering/django-orb/issues/266
13 May 2015¶
- 243: On analytics page add unique visitors per month - http://github.com/mpowering/django-orb/issues/243
- 252: On analytics add no resources - http://github.com/mpowering/django-orb/issues/252
- 257: Check API can’t change the status of a resource - http://github.com/mpowering/django-orb/issues/257
- 70: Should we add the time for the resource - http://github.com/mPowering/django-orb/issues/70
- 245: Align resource images in centre of cell? - http://github.com/mPowering/django-orb/issues/245
- 258: Update clean resourcefiles script to include tidying images and tags - http://github.com/mPowering/django-orb/issues/258
- 168: Potential error on tag filter results - http://github.com/mpowering/django-orb/issues/168
- 260: Bug when trying to add resource and no organisation on user profile - http://github.com/mpowering/django-orb/issues/260
- 226: Use proper translation strings in the email templates - http://github.com/mPowering/django-orb/issues/226
- 194: Finish adding error codes for API - http://github.com/mPowering/django-orb/issues/194
- 178: in the API use request.build_absolute_uri - http://github.com/mPowering/django-orb/issues/178
- 79: On SearchTracker log which page they’re on - http://github.com/mPowering/django-orb/issues/79
12 May 2015¶
- 256: On content partner page add option to click on logo to view resources - http://github.com/mpowering/django-orb/issues/256
- 254: Update content partner page - http://github.com/mpowering/django-orb/issues/254
- 253: Update How to use ORB resources page - http://github.com/mpowering/django-orb/issues/253
- 251: On resource row page made the image clickable to link to the resource - http://github.com/mpowering/django-orb/issues/251
11 May 2015¶
- 250: Check profile form can’t be accessed if not logged in - http://github.com/mpowering/django-orb/issues/250
- 236: Expire sessions - http://github.com/mpowering/django-orb/issues/236
- 195: In API - if resource exists then return the full resource - http://github.com/mPowering/django-orb/issues/195
8 May 2015¶
- 246: Check spacing of link icons - http://github.com/mpowering/django-orb/issues/246
- 248: How to delete resources but without removing the tracker - http://github.com/mpowering/django-orb/issues/248
- 247: Filtering page no longer required now we have the advanced search? - http://github.com/mpowering/django-orb/issues/247
- 244: Check resource row icons wrapping correctly on mobile - http://github.com/mpowering/django-orb/issues/244
7 May 2015¶
- 155: How to use the content - video plus FAQs type page? - http://github.com/mpowering/django-orb/issues/155
- 233: Add closed caption icon for subtitled videos - http://github.com/mpowering/django-orb/issues/233
- 241: Check study time can be submitted via the API - http://github.com/mpowering/django-orb/issues/241
- 235: Search results - cope with misspellings - http://github.com/mpowering/django-orb/issues/235
- 227: In icons on resource row show extra icons for… - http://github.com/mpowering/django-orb/issues/227
- 240: Add study time to resource row display - http://github.com/mpowering/django-orb/issues/240
- 239: Make red line on banner 1px larger - http://github.com/mpowering/django-orb/issues/239
- 71: Add contact email, web/cookie/privacy policy - http://github.com/mpowering/django-orb/issues/71
- 141: Include disclaimer type info - http://github.com/mpowering/django-orb/issues/141
6 May 2015¶
- 225: Use minified version of stylesheet - http://github.com/mpowering/django-orb/issues/225
- 224: Add advanced search option - http://github.com/mpowering/django-orb/issues/224
5 May 2015¶
- 222: In Search API if query string not provided (or empty) - should return bad request - http://github.com/mpowering/django-orb/issues/222
- 223: Content partner page - link directly to partner resources - http://github.com/mpowering/django-orb/issues/223
- 45: Check over guidelines page - http://github.com/mpowering/django-orb/issues/45
- 216: Add user registrations to analytics - http://github.com/mpowering/django-orb/issues/216
4 May 2015¶
- 208: Move flag icons to be last in row - http://github.com/mpowering/django-orb/issues/208
- 211: Add option to add an image for each ResourceFile and ResourceURL - http://github.com/mpowering/django-orb/issues/211
- 210: On resource view page allow tags and icons to flow/wrap properly - http://github.com/mpowering/django-orb/issues/210
- 207: License - have text next to the icon instead of underneath - http://github.com/mpowering/django-orb/issues/207
- 83: Add images for all tags - http://github.com/mpowering/django-orb/issues/83
- 217: Add TagTracker - so we know which are are the popular tags - http://github.com/mpowering/django-orb/issues/217
- 190: Record no of hits directly out to organisation websites - http://github.com/mpowering/django-orb/issues/190
1 May 2015¶
- 144: Max 100-150 words for description of resource - http://github.com/mpowering/django-orb/issues/144
- 88: Decide on valid file upload types - http://github.com/mpowering/django-orb/issues/88
- 206: Script to do link checking - http://github.com/mpowering/django-orb/issues/206
- 205: Script to clear up unused uploaded resource files - http://github.com/mpowering/django-orb/issues/205
- 119: Check that user doesn’t upload same resource twice - http://github.com/mpowering/django-orb/issues/119
- 214: How to add generic icons for unknown languages and geographies - http://github.com/mpowering/django-orb/issues/214
30 Apr 2015¶
- 203: Add optional file size on ResourceURL object - http://github.com/mpowering/django-orb/issues/203
- 204: Make sure mailing list checkbox on register form is ticked by default - http://github.com/mpowering/django-orb/issues/204
29 Apr 2015¶
- 197: Add organisation(s) to analytics pending resources - http://github.com/mpowering/django-orb/issues/197
- 200: Check to see if the jquery UI lib can be removed - http://github.com/mpowering/django-orb/issues/200
- 199: Add version no to the footer - http://github.com/mpowering/django-orb/issues/199
28 Apr 2015¶
- 189: Add option to order resource files and links - http://github.com/mpowering/django-orb/issues/189
- 191: Add image credits for flags etc - http://github.com/mpowering/django-orb/issues/191
- 192: Bug in updating resource that’s been submitted via API - http://github.com/mpowering/django-orb/issues/192
- 193: Add error codes and exception handling for API - http://github.com/mpowering/django-orb/issues/193
- 196: API - check adding URLs working - http://github.com/mpowering/django-orb/issues/196
27 Apr 2015¶
- 175: For rejection ask user to tick which items the resource didn’t match - http://github.com/mpowering/django-orb/issues/175
- 120: How to notify users when their resources are approved/rejected - http://github.com/mpowering/django-orb/issues/120
- 186: Add email notification to admins when new resource submitted - http://github.com/mpowering/django-orb/issues/186
- 174: Update list of pending resources on analytics page - http://github.com/mpowering/django-orb/issues/174
26 Apr 2015¶
- 154: When submitting first resource, send welcome email about the process - http://github.com/mpowering/django-orb/issues/154
- 171: Have a welcome email for new users who register - http://github.com/mpowering/django-orb/issues/171
24 Apr 2015¶
- 177: Add selection criteria to the guidelines page - http://github.com/mpowering/django-orb/issues/177
22 Apr 2015¶
- 181: Allow tag owners to edit any resources - http://github.com/mpowering/django-orb/issues/181
- 183: Change ‘save’ button on add resource form to be ‘submit’ instead - http://github.com/mpowering/django-orb/issues/183
- 173: Make license a drop down option - http://github.com/mpowering/django-orb/issues/173
- 150: Add logo to banner - http://github.com/mpowering/django-orb/issues/150
21 Apr 2015¶
- 154: When submitting first resource, send welcome email about the process - http://github.com/mpowering/django-orb/issues/154
- 176: Reset user password - for long emails the last part gets cut off - http://github.com/mpowering/django-orb/issues/176
20 Apr 2015¶
- 7: How to filter by multiple tags - http://github.com/mpowering/django-orb/issues/7
- 163: On filter tags, validate that something has been selected - http://github.com/mpowering/django-orb/issues/163
- 158: Fill in Photo credits - http://github.com/mpowering/django-orb/issues/158
- 82: Pages about CRT and MEP (& content providers?) - http://github.com/mpowering/django-orb/issues/82
- 167: Add better templating system for emails - http://github.com/mpowering/django-orb/issues/167
- 166: Feed errors - http://github.com/mpowering/django-orb/issues/166
18 Apr 2015¶
- 161: RSS feeds link to example.com - rather than the actual site - http://github.com/mpowering/django-orb/issues/161
- 160: On advanced filtering page - only show options for which there are resources available - http://github.com/mpowering/django-orb/issues/160
17 Apr 2015¶
- 157: Get emailing working - http://github.com/mpowering/django-orb/issues/157
- 156: Add search function to tag django admin page - http://github.com/mpowering/django-orb/issues/156
- 159: Complete partners page - http://github.com/mpowering/django-orb/issues/159
15 Apr 2015¶
- 152: Add extra registration info to the profile page - http://github.com/mpowering/django-orb/issues/152
- 153: Finish up tag/organisation/country page - http://github.com/mpowering/django-orb/issues/153
- 148: On org analytics page allow download by month - http://github.com/mpowering/django-orb/issues/148
14 Apr 2015¶
- 111: On registration form use the target user as field - http://github.com/mpowering/django-orb/issues/111
- 145: For audience allow adding other type on registration page only - http://github.com/mpowering/django-orb/issues/145
- 146: On user profile add option to opt in/out of getting updates from mpowering - http://github.com/mpowering/django-orb/issues/146
13 Apr 2015¶
- 147: Automatically prepopulate the organisation with the users organisation - http://github.com/mpowering/django-orb/issues/147
- 75: Links for sharing resources - http://github.com/mpowering/django-orb/issues/75
pre 12 Apr 2015¶
- 133: Added license (GPL) - http://github.com/mPowering/django-orb/issues/133
- 129: If on child tag page - show link back to parent tag - http://github.com/mPowering/django-orb/issues/129
- 126: On tag pages show the child tags (with no resources) - http://github.com/mPowering/django-orb/issues/126
- 112: Add field to comply with terms/conditions/privacy on registration form - http://github.com/mPowering/django-orb/issues/112
- 130: Add info about uploading vs linking - http://github.com/mPowering/django-orb/issues/130
- 140: Add option for organisation owners to download their stats - http://github.com/mPowering/django-orb/issues/140
- 122: Add Study time to resources - http://github.com/mPowering/django-orb/issues/122
- 128: Make sure parent tags are included in search indexing - http://github.com/mPowering/django-orb/issues/128
- 121: Prevent the same resourcetag being added twice - http://github.com/mPowering/django-orb/issues/121
- 138: Add option for staff to change status of a resource - http://github.com/mPowering/django-orb/issues/138
- 125: Add language as field on resource pages - http://github.com/mPowering/django-orb/issues/125
- 124: Change geography to be a text input field - http://github.com/mPowering/django-orb/issues/124
- 113: Provide analytics for content provider organisations - http://github.com/mPowering/django-orb/issues/113
- 118: Add write API for resources - alpha version at least http://github.com/mPowering/django-orb/issues/118
- 109: Add option of hierarchy of tags http://github.com/mPowering/django-orb/issues/109
- 26: How to add the actual files to the search index http://github.com/mPowering/django-orb/issues/26
Virus Checking¶
Since the ORB platform allows users to upload files, these files should be checked for viruses.
Even if an uploaded file contains a virus that may not harm the server operating system, users who download the files may be using operating systems which are susceptible to the virus.
The ORB server uses the ClamAV open source antivirus engine to scan uploaded files.
A sample shell script to run the virus checker and email the results is included
in the utils
directory (virus-scan.sh
)
REST API¶
The REST API is still under development.
There is an example of the search API running at: http://alexlittle.net/mpowering/examples/search.php
Current versions of the API helper libraries can be found at:
- for PHP: https://github.com/mPowering/mpowering-api-php
- for Python: https://github.com/mPowering/mpowering-api-python
These helper libraries also include some examples of how to use the API.
Accessing the API¶
Note
Currently, for any REST API method requests, you will need to contact us so we can enable your account for these API methods.
To make any request to the API, you must supply your username and API Key (your API key can be found on your ORB profile page).
Resource¶
For getting the information about a resource, submitting a new resource or updating an existing resource
Endpoint: /api/v1/resource/
Allowed methods:
- GET
- POST
- PUT
Required params (POST and PUT):
- title
- description
Search¶
For searching the ORB database
Endpoint: /api/v1/resource/search/
Allowed methods:
- GET
Required params:
- q - the query search term
ORB Roadmap¶
OpenDeliver¶
AMI Installation¶
To assist with setting up the Open Deliver process, mPowering has created an Amazon Machine Image (AMI) on Amazon Web Services (AWS), which already has the 3 key components set up and configured on one machine:
- ORB
- Moodle
- OppiaMobile server
The specific versions and machine info can be found below.
Pre-requisites¶
You will need to have:
- An AWS account, see: https://aws.amazon.com/ - you will need a debit/credit card for the monthly charges for hosting and bandwidth.
- Some experience in using the command line/SSH to log into and configure the server, and experience in server and MySQL database management
- A domain name registered that you can point to your new services. If you don’t have this then please ask mPowering about how we can help with providing a sub-domain.
Installation¶
- Log into your AWS account and go to EC2 services
- From ‘Instances’ select ‘Launch Instance’
- Select ‘Community AMIs’ and search for ‘OpenDeliver’ (or search for the AMI ID as listed in OpenDeliver AMI Versions) - you may need to select the zone to be ‘US East’ for the AMI to appear in the search results.
- Follow the instructions to create and launch the instance. Remember to keep the server keys safe and secure, you will need these to log into your machine and, if lost, cannot be recovered.
Once the machine is up and running you can log in using SSH.
Post Installation Set-up & Configuration (Required)¶
The following must be set up and configured to ensure your machine is accessible and secure.
Update database passwords¶
All the database passwords are set to ‘opendeliver’ - all these must be changed to make your server is secure. The following passwords and configurations should be changed (using the MySQL command line):
- MySQL root password - using
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('<new-password>');
- ORB database password - using
SET PASSWORD for 'mpower'@'localhost' = PASSWORD('<new-password>');
- Moodle database password - using
SET PASSWORD for 'moodleuser'@'localhost' = PASSWORD('<new-password>');
- Oppia database password - using
SET PASSWORD for 'oppiauser'@'localhost' = PASSWORD('<new-password>');
After changing the database passwords remember to run flush privileges
.
Now update the site database configurations to use your new passwords:
- ORB - edit
/home/www/platform/mpower/mpower/settings.py
- Moodle - edit
/home/www/moodle/config.php
- Oppia - edit
/home/www/oppia/oppia_core/settings.py
Assign static IP (elastic IP)¶
In AWS you should create an Elastic IP and assign it to your newly created machine. This ensures that when you assign a domain name, the IP address will be static and so not change if the machine is stopped.
Assign domain names¶
Each component will need it’s own sub-domain (or domain) name. Once you have assigned the new elastic/static IP address to your domain & sub-domains, then update the following:
ORB:
- Apache configuration - update
ServerName
in/etc/apache2/sites-available/health-orb.conf
and/etc/apache2/sites-available/health-orb-ssl.conf
- Django - update
ALLOWED_HOSTS
in/home/www/platform/mpower/mpower/settings.py
Moodle:
- Apache configuration - update
ServerName
andRedirectPermanent
in/etc/apache2/sites-available/moodle.opendeliver.conf
andServerName
in/etc/apache2/sites-available/moodle.opendeliver-le-ssl.conf
- config - update
$CFG->wwwroot
in/home/www/moodle/config.php
Oppia:
- Apache configuration - update
ServerName
in/etc/apache2/sites-available/oppia.conf
and/etc/apache2/sites-available/oppia-ssl.conf
- Django - update
ALLOWED_HOSTS
in/home/www/oppia/oppia_core/settings.py
Install SSL certificates¶
All the components are set up to use SSL certificates (i.e. using the secure https
). ORB can be accessed either through non-secure http or through secure https, but Moodle and Oppia are set to to be accessed via https only (anyone using http for either of these will be re-directed to the secure version).
The SSL certificates are generated using the free service LetsEncrypt (https://letsencrypt.org/) and will need to be updated to match your (sub-)domain names.
Run
sudo letsencrypt --apache certonly
, you’ll need to run this 3 times, once for each of the 3 domainsEdit the apache site configuration files to update the SSL key file paths (the directory paths are also given at the end of running letsencrypt):
For ORB (
/etc/apache2/sites-available/health-orb-ssl.conf
):SSLCertificateFile /etc/letsencrypt/live/<insert-ORB-domain-name-here>/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<insert-ORB-domain-name-here>/privkey.pem
For Moodle (
/etc/apache2/sites-available/moodle.opendeliver-le-ssl.conf
):SSLCertificateFile /etc/letsencrypt/live/<insert-Moodle-domain-name-here>/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<insert-Moodle-domain-name-here>/privkey.pem
For Oppia (
/etc/apache2/sites-available/oppia-ssl.conf
):SSLCertificateFile /etc/letsencrypt/live/<insert-Oppia-domain-name-here>/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<insert-Oppia-domain-name-here>/privkey.pem
Now enable the SSL sites by running:
sudo a2ensite health-orb-ssl.conf
sudo a2ensite moodle.opendeliver-le-ssl.conf
sudo a2ensite oppia-ssl.conf
Finally restart apache with
sudo service apache2 restart
You should now have all 3 sites running and available with your domain names and with SSL enabled.
Update component admin passwords¶
The administrator passwords for each of ORB, Moodle and Oppia should now be updated:
- For ORB, log into the site with username/password ‘admin’/’opendeliver’, then go the profile page (under ‘My ORB’ in the menu bar) and update the password
- For Moodle, log into the site with username/password ‘admin’/’OpenDeliver1!’, then go to the profile page to update the password
- For Oppia, log into the site with username/password ‘admin’/’opendeliver’, then go the profile page (under ‘My Oppia’ in the menu bar) and update the password
Post Installation Set-up & Configuration (highly recommended)¶
Email configuration¶
To enable the sending of emails (for example password reset and notification messages), you will need to set up and configure the AWS SES service (https://aws.amazon.com/ses/)
Reserved instance¶
Assuming you are planning to have the site running 24x7, then you should look at purchasing a reserved instance from AWS, as this will be much cheaper than on-demand usage.
Cron tasks¶
Several scheduled tasks are set up for ORB, Moodle, Oppia, backing up and auto-renewing the SSL certificates, you check and amend the times and frequency these tasks run by looking at the sudo crontab (sudo crontab -e
).
Regular Maintenance¶
All systems need regular, ongoing maintenance to keep them up to date and secure.
Backups¶
The databases and uploads are backed up regularly (according to the cron schedule), however these backup files are stored on the server (in the directory /home/backup
),
so you should ensure these are regularly copied off-server, for example by using rsync
(https://en.wikipedia.org/wiki/Rsync) to copy the backup files onto another machine/device.
Operating system updates¶
You should regularly (suggested once per month) ensure that the operating system is kept up to date with the latest bug and security fixes. Use sudo apt-get update
then sudo apt-get upgrade
on the command line to check for and install any Ubuntu updates
Updates from core code repositories¶
The AWS AMI is a point-in-time snapshot of the core code for ORB, Moodle and OppiaMobile, so you should ensure that the code for each of these is kept up to date.
Updating OpenDeliver AMI Instance¶
OpenDeliver AMI Versions¶
OpenDeliver AMI - v6 - released 15 Jan 2019¶
- ORB v2.8.1
- Moodle v3.4.7
- OppiaMobile server v0.10.1
AMI ID: ami-06970223a6333c1b4
OpenDeliver AMI - v5 - released 11 May 2018¶
- ORB v2.8.1
- Moodle v3.4.2
- OppiaMobile server v0.10.1
AMI ID: ami-fe5fd681
OpenDeliver AMI - v4 - released 13 Apr 2018¶
- ORB v2.7.0
- Moodle v3.4
- OppiaMobile server v0.10.0
OpenDeliver AMI - v3 - released 6 Jul 2017¶
- ORB v2.5.2
- Moodle v3.3
- OppiaMobile server v0.9.10
OpenDeliver AMI - v2 - released 6 Apr 2017¶
- ORB v2.3.0
- Moodle v3.2.2
- OppiaMobile server v0.9.8
OpenDeliver AMI - v1 - released Jan 2017¶
- ORB v2.2.2
- Moodle v3.2
- OppiaMobile server v0.9.8