diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 8ac3d78f..ef052b29 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -3,4 +3,6 @@ class ApplicationController < ActionController::Base def home; end + + def privacy; end end diff --git a/app/views/application/home.html.erb b/app/views/application/home.html.erb index bbc6eafe..505a413f 100644 --- a/app/views/application/home.html.erb +++ b/app/views/application/home.html.erb @@ -1 +1,30 @@ -Welcome to the Course Review App! \ No newline at end of file +

Welcome to Course Review!

+ +
+

What is this app?

+

+ This application was originally created as a capstone project for the Pennsylvania State University Master of Software Engineering. The purpose is to allow students to review classes and evaluate programs. Existing course review applications allow you to see the reviews for a course, but do not allow you to see the average reviews for a school or department. If you would like classes from your university to be added, please contact me with a link to the course catalog. +

+
+ +
+

Who maintains this application?

+

+ Primary maintainer is Jennifer Konikowski. You can also view the full list of contributers. +

+
+ +
+

I am concerned about privacy. How is my information kept secure?

+

+ The app records only your email. View our full <%= link_to "privacy policy", privacy_path %>. Currently, all the reviews are shown anonymously using a randomly generated UUID. If this changes in the future, the default will be anonymous with the option to toggle to public. +

+

+ For security infrastructure, this application uses Devise for authentication and CanCanCan for authorization. +

+
+ +
+

Need to report an issue or an enhancement request?

+

Please submit an issue on GitHub. +

diff --git a/app/views/application/privacy.html.erb b/app/views/application/privacy.html.erb new file mode 100644 index 00000000..a41826b4 --- /dev/null +++ b/app/views/application/privacy.html.erb @@ -0,0 +1,176 @@ +

Privacy Policy

+ +

Effective date: June 29, 2019

+ +

Course Review ("us", "we", or "our") operates the https://course-review-app.herokuapp.com website (hereinafter referred to as the "Service").

+ +

This page informs you of our policies regarding the collection, use and disclosure of personal data when you use our Service and the choices you have associated with that data.

+ +

We use your data to provide and improve the Service. By using the Service, you agree to the collection and use of information in accordance with this policy. Unless otherwise defined in this Privacy Policy, the terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, accessible from https://course-review-app.herokuapp.com

+ +

Definitions

+ + +

Information Collection and Use

+

We collect several different types of information for various purposes to provide and improve our Service to you.

+ +

Types of Data Collected

+ +

Personal Data

+

While using our Service, we may ask you to provide us with certain personally identifiable information that can be used to contact or identify you ("Personal Data"). Personally identifiable information may include, but is not limited to:

+ + + +

Usage Data

+ +

We may also collect information on how the Service is accessed and used ("Usage Data"). This Usage Data may include information such as your computer's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that you visit, the time and date of your visit, the time spent on those pages, unique device identifiers and other diagnostic data.

+ +

Tracking & Cookies Data

+

We use cookies and similar tracking technologies to track the activity on our Service and we hold certain information.

+

Cookies are files with a small amount of data which may include an anonymous unique identifier. Cookies are sent to your browser from a website and stored on your device. Other tracking technologies are also used such as beacons, tags and scripts to collect and track information and to improve and analyse our Service.

+

You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, if you do not accept cookies, you may not be able to use some portions of our Service.

+

Examples of Cookies we use:

+ + +

Use of Data

+

Course Review uses the collected data for various purposes:

+ + +

Legal Basis for Processing Personal Data under the General Data Protection Regulation (GDPR)

+

If you are from the European Economic Area (EEA), Course Review legal basis for collecting and using the personal information described in this Privacy Policy depends on the Personal Data we collect and the specific context in which we collect it.

+

Course Review may process your Personal Data because:

+ + +

Retention of Data

+

Course Review will retain your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes and enforce our legal agreements and policies.

+

Course Review will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period of time, except when this data is used to strengthen the security or to improve the functionality of our Service, or we are legally obligated to retain this data for longer periods.

+ +

Transfer of Data

+

Your information, including Personal Data, may be transferred to — and maintained on — computers located outside of your state, province, country or other governmental jurisdiction where the data protection laws may differ from those of your jurisdiction.

+

If you are located outside United States and choose to provide information to us, please note that we transfer the data, including Personal Data, to United States and process it there.

+

Your consent to this Privacy Policy followed by your submission of such information represents your agreement to that transfer.

+

Course Review will take all the steps reasonably necessary to ensure that your data is treated securely and in accordance with this Privacy Policy and no transfer of your Personal Data will take place to an organisation or a country unless there are adequate controls in place including the security of your data and other personal information.

+ +

Disclosure of Data

+ +

Disclosure for Law Enforcement

+

Under certain circumstances, Course Review may be required to disclose your Personal Data if required to do so by law or in response to valid requests by public authorities (e.g. a court or a government agency).

+ +

Legal Requirements

+

Course Review may disclose your Personal Data in the good faith belief that such action is necessary to:

+ + +

Security of Data

+

The security of your data is important to us but remember that no method of transmission over the Internet or method of electronic storage is 100% secure. While we strive to use commercially acceptable means to protect your Personal Data, we cannot guarantee its absolute security.

+ +

Our Policy on "Do Not Track" Signals under the California Online Protection Act (CalOPPA)

+

We do not support Do Not Track ("DNT"). Do Not Track is a preference you can set in your web browser to inform websites that you do not want to be tracked.

+

You can enable or disable Do Not Track by visiting the Preferences or Settings page of your web browser.

+ +

Your Data Protection Rights under the General Data Protection Regulation (GDPR)

+

If you are a resident of the European Economic Area (EEA), you have certain data protection rights. Course Review aims to take reasonable steps to allow you to correct, amend, delete or limit the use of your Personal Data.

+

If you wish to be informed about what Personal Data we hold about you and if you want it to be removed from our systems, please contact us.

+

In certain circumstances, you have the following data protection rights:

+ +

Please note that we may ask you to verify your identity before responding to such requests.

+ +

You have the right to complain to a Data Protection Authority about our collection and use of your Personal Data. For more information, please contact your local data protection authority in the European Economic Area (EEA).

+ +

Service Providers

+

We may employ third party companies and individuals to facilitate our Service ("Service Providers"), provide the Service on our behalf, perform Service-related services or assist us in analysing how our Service is used.

+

These third parties have access to your Personal Data only to perform these tasks on our behalf and are obligated not to disclose or use it for any other purpose.

+ +

Links to Other Sites

+

Our Service may contain links to other sites that are not operated by us. If you click a third party link, you will be directed to that third party's site. We strongly advise you to review the Privacy Policy of every site you visit.

+

We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.

+ +

Children's Privacy

+

Our Service does not address anyone under the age of 18 ("Children").

+

We do not knowingly collect personally identifiable information from anyone under the age of 18. If you are a parent or guardian and you are aware that your Child has provided us with Personal Data, please contact us. If we become aware that we have collected Personal Data from children without verification of parental consent, we take steps to remove that information from our servers.

+ +

Changes to This Privacy Policy

+

We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page.

+

We will let you know via email and/or a prominent notice on our Service, prior to the change becoming effective and update the "effective date" at the top of this Privacy Policy.

+

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.

+ +

Contact Us

+

If you have any questions about this Privacy Policy, please contact us:

+ \ No newline at end of file diff --git a/app/views/layouts/_navbar.html.erb b/app/views/layouts/_navbar.html.erb index ab92dfa1..cdb79140 100644 --- a/app/views/layouts/_navbar.html.erb +++ b/app/views/layouts/_navbar.html.erb @@ -32,5 +32,7 @@ <%= link_to('Sign up', new_user_registration_path, class: 'nav-link') %> <% end %> + + \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 5786676f..d792561e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,6 +4,8 @@ Rails.application.routes.draw do # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html root to: 'application#home' + + get '/privacy', to: 'application#privacy' resources :schools do resources :departments do resources :courses do diff --git a/lib/tasks/scrape_classes.rake b/lib/tasks/scrape_classes.rake index db3d7f9f..d9e7d14c 100644 --- a/lib/tasks/scrape_classes.rake +++ b/lib/tasks/scrape_classes.rake @@ -1,6 +1,7 @@ # frozen_string_literal: true + namespace :scrape_classes do - desc "scrape classes from the penn state website" + desc 'scrape classes from the penn state website' task :penn_state, [:level] do |_task, args| level = args.fetch(:level) || 'graduate' url = 'https://bulletins.psu.edu/university-course-descriptions/' + level + '/' @@ -29,7 +30,7 @@ namespace :scrape_classes do end end - desc "scrape classes from the UOP website" + desc 'scrape classes from the UOP website' task :uop do urls = [ ['FILL THIS OUT LATER', 'https://www.uopeople.edu/programs/general-education-requirements-course-catalog/'], @@ -65,18 +66,16 @@ namespace :scrape_classes do end desc 'parse scraped files and add to the system' - task :parse_json_courses, [:file_name, :school_short_name] => :environment do |_task, args| + task :parse_json_courses, %i[file_name school_short_name] => :environment do |_task, args| file_name = args.fetch(:file_name) school_short_name = args.fetch(:school_short_name) - school = School.find_by_short_name(school_short_name) - departments = JSON.parse(File.read("#{Rails.root}/lib/" + file_name)) + school = School.find_by(short_name: school_short_name) + departments = JSON.parse(File.read(Rails.root.join('lib', file_name))) departments.each do |k, v| - department = Department.find_or_create_by(short_name: k, name: v["name"], school: school) - v["courses"].each do |course_num, course_name| + department = Department.find_or_create_by(short_name: k, name: v['name'], school: school) + v['courses'].each do |course_num, course_name| Course.find_or_create_by(department: department, number: course_num, name: course_name) end end end end - -# be rails "scrape_classes:parse_json_courses[json/uop-courses.json, UOP]"