= Features

* <b>Portal</b>
* <b>Installation and Configuration</b>
* <b>Browser Based WYSIWYG HTML Editing</b>
* <b>Templates</b>
* <b>Linking Pages</b>
* <b>Wikis</b>
* <b>Revision Control</b>
* <b>Harvesting</b>
* <b>Access Control</b>
* <b>File attachments</b>
* <b>Search</b>
* <b>Managing users:</b> 
* <b>RSS</b>
* <b>Email</b>


== Portal

The portal is the easy entry point for new and returning users, which allows anonymous access. The Home page
shows most recent discussions and changes. There is a list of Wikis and Users, an About Page, a Toolbox, Hall of Fame
and the archives can be accessed. 

* Implementation: PortalController.home, PortalController.archives, PortalController.wikis, PortalController.users
* Testing: PortalControllerTest

== Installation and Configuration

The first time the application is accessed the user is redirected to create the central admin
* Implementation: PortalController.home
* Testing: PortalControllerTest.test_home, LoginControllerTest.test_signup_central_admin

Several texts can be customized by the central admin: Welcome, About, Login, Help, Privacy Policy, Terms of Use
* Implementation: AdminMessage, UsersController.adminmessage, UsersController.account
* Testing:

== Browser Based WYSIWYG HTML Editing

WYSIWYG or HTML Editing provided by third party tool TinyMCE. Currently only TinyMCE is supported.
* Implementation: PagesController.checkout, PagesController.edit
* Testing: PagesControllerTest

== Templates

New pages can be created using templates. The templates are provided by a special Wiki with the title 'Templates'.
This Wiki is automatically created when the first user account (the administrator) is created. 
The 'Templates' Wiki is an ordinary Wiki except for the fact that the title ('Templates') gives 
special status to the pages that the pages of this Wiki appear in the new page dialog.

* Implementation: LoginController.new_cadmin, PagesController.new, WikiPage.new_using_template
* Testing: UserTest.test_new_cadmin, PortalControllerTest.test_home, PagesControllerTest.test_checkout_edithtml_save_checkin_new, PageTest.test_new_page_using_template

== Linking Pages

Users can link pages by copy past URL in a dialog box
* Implementation: feature of HTML editor (TinyMCE or PinEdit)
* Testing: tbd

== Wikis

Administrators can upload a zip file containing a published website created with EPF (or RMC)
* Implementation: Site.unzip_upload, SitesController.new
* Testing: SiteTest.test_upload

Administrators can define a baseline process with a EPF published site
* Implementation: Site, BaselineProcess, SitesController.new
* Testing: SiteTest.test_new_baseline_process, SitesControllerTest.test_new

Administrators can create a Wiki based on a baseline process (published site from EPF)
* Implementation: Site, Wiki, Wiki.wikify, SitesController.new_wiki,
* Testing: SiteTest.test_new_wiki, SitesControllerTest.test_new_wiki, SitesControllerTest.test_new_wiki_job_daily, SitesControllerTest.test_new_wiki_post 

Administrators can update a Wiki with a baseline process (published site from EPF) 
* Implementation: Wiki.update_wiki, SitesController.update
* Testing: SiteTest.test_update_wiki, SitesControllerTest.test_update_wiki

For performance reasons there is an option of using scheduled jobs to perform actual wikifying.
* Implementation: SitesController.update_now, SitesController.update_cancel
* Testing: SitesControllerTest.test_wikify_now, SitesControllerTest.test_new_wiki_job_daily, 

Administrator can make a Wiki obsolete
* Implementation: SitesController.obsolete
* Testing: SitesControllerTest.test_obsolete

== Revision Control

Checkout a page
* Implementation: Checkout
* Testing: CheckoutTest.test_new, CheckoutTest.test_checkin, PagesControllerTest.test_checkout_edithtml_save_checkin_new

Create a new page using a (predefined) template or any other page
* Implementation: PagesController.new, WikiPage.new_using_template
* Testing: PagesControllerTest.test_checkout_edithtml_save_checkin_new, PageTest.test_new_page_using_template

Save a checked out page
* Implementation: PagesController.save
* Testing: PagesControllerTest.test_checkout_edithtml_save_checkin_new

Check in a checked out page
* Implementation: PagesController.checkin
* Testing: PagesControllerTest.test_checkout_edithtml_save_checkin_new

Preview a checked out page
* Implementation: PagesController.preview
* Testing: TBD

Undo a checkout
* Implementation: PagesController.undocheckout
* Testing: PagesControllerTest.test_undocheckout

Rollback a change
* Implementation: PagesController.rollback
* Testing: PagesControllerTest.test_rollback

The central admin can delete a page with its associated records
* Implementation: PagesController.destroy
* Testing: TBD

Users can access version information of a version and add/update a version note
* Implementation: VersionsController.show, VersionsController.note
* Testing: VersionsControllerTest.test_show_and_diff

Admins (process engineers) can assign reviewer, mark versions reviewed ('done')
* Implementation: ReviewController
* Testing: TBD

Users can compare versions of a page
* Implementation: VersionsController.diff, Version.xhtmldiffpage
* Testing: VersionsControllerTest.test_show_and_diff


== Harvesting

Contributions can be reviewed and marked 'done'
* Implementation: DaText(Comment, Feedback), Version, Upload, ReviewController.toggle_done, ReviewController.assign, ReviewController.note
* Testing: TBD

Contributors receive email notification when changes, comments, uploads are harvested (are marked 'done') and when a Wiki gets updated with a new baseline
* Implementation: ReviewController.assign, ReviewController.note, ReviewController.toggle_done, ApplicationHelper.link_to_done_toggle
* Testing: UpdateTest.test_reviewed_notification_email

== Access Control

After installation the first unauthenticated (!) user can create the central admin account 
* Implementation: User, LoginController.login, LoginController.new_cadmin
* Testing: LoginControllerSetupTest.test01_signup_central_admin, LoginControllerTest.test01_signup_central_admin

The central admin account can grant and revoke admin privileges
* Implementation: UsersController.admin
* Testing:

The central admin can assign someone else as central admin
* Implementation: UsersController.cadmin, User.cadmin
* Testing: 

Admins can grant admin privileges
* Implementation: UsersController.admin
* Testing:

== File attachments
Users can upload documents and images
* Implementation: UploadsController, Upload
* Testing: UploadsControllerTest

== Managing users

Users can sign up with a valid email account and by providing and confirming a password (accounts need to be confirmed via a link sent via email)
* Implementation: LoginController
* Testing: LoginControllerTest.test_sign_up_with_pw, LoginControllerTest.test_sign_up_without_pw, LoginControllerTest.test_lost_password, SetupAndSignInTest.test_sign_up

User can sign up with a valid email account, a password is generated and sent via email
* Implementation: User.validate_on_create, LoginController, UsersController
* Testing: UserTest, SetupAndSignInTest.test_sign_up

Valid email accounts can be restriced to certain domains
* Implementation: User.validate, LoginController.sign_up, ENV['EPFWIKI_DOMAINS']
* Testing: SetupAndSignInTest.test02_sign_up

== Email

User are auto subscribed for receiving email
* Testing: CheckoutTest.test_notification_subscription, PageTest.test_new_page_using_template
* Implementation: Comment.after_create, Checkout.checkin, WikiPage.new_using_template

Users are send email about changes
* Implementation: PagesController.checkin, PagesController.discussion, Update.do_update
* Testing: UserTest.test_reviewed_notification_email, UpdateTest.test_notification, PagesControllerTest.test_discussion

User can subscribe and unsubscribe for receiving email
* Implementation: UsersController.toggle_change_report_notification, UsersController.notification
* Testing: TBD